Nemo Asked:2024-06-10 23:51:44 +0000 UTC2024-06-10 23:51:44 +0000 UTC 2024-06-10 23:51:44 +0000 UTC 是否可以从 C# 代码中移动光标以及如何移动? 772 我想在我的游戏中实现反馈,但是由于有一个CameraController脚本,旋转相机后,代码接收鼠标坐标并将其返回,即需要移动光标,我希望你的帮助。 c# 2 个回答 Voted Best Answer Тихирун Ррр 2024-06-11T03:27:03Z2024-06-11T03:27:03Z 尝试编写代码CameraController来更改保存的鼠标位置,以便在读取新位置时它向上移动。 您让鼠标返回到中心位置。添加代码来记住您“有一个反冲”,并且下次您读取鼠标移动时,它将向相机添加旋转。 并向您的问题添加代码。 KingPeas 2024-06-11T18:32:37Z2024-06-11T18:32:37Z 我用了这个方法。您创建一个 Target 对象,该对象准确地放置在您需要的位置,看起来方向正确并且由鼠标控制,也就是说,您的控制器准确地控制该对象。对于相机,您编写一个简单的脚本来尝试将相机与该对象结合起来。为了使观察者偏离目标时一切都变得漂亮,请使用更新将位置和旋转平滑地结合到目标。 我曾经使用过这个脚本:取自这里https://ru.stackoverflow.com/a/781002/33519 public class FollowMe : MonoBehaviour { public Transform Target = null; public bool Smoothing = true; public Transform LookObject = null; public bool KeepDistance = true; public float TimeMoving = 0.5f; // Use this for initialization void Start() { } // Update is called once per frame void Update() { if (Target != null) { if (Smoothing) { float distance = 0f; if (LookObject != null) { distance = (transform.position - LookObject.position).magnitude; } transform.position = Vector3.Slerp(transform.position, Target.position, Time.deltaTime / TimeMoving); transform.rotation = Quaternion.Slerp(transform.rotation, Target.rotation, Time.deltaTime / TimeMoving); if (LookObject != null && KeepDistance) { Vector3 direction = transform.position - LookObject.position; if (distance > direction.magnitude) transform.position = LookObject.position + direction.normalized * distance; } } else { transform.position = Target.position; transform.rotation = Target.rotation; } } } } 目标 - 我们有一个相机应该跟随的物体。比如说一个游戏角色。 LookObject - 这是如果你需要看第二个物体,粗略地说,如果相机在角色的背后,那么lookObject就是角色前面的物体,这样相机看起来就在角色的前面,而不是在他的背后 平滑 - 使过渡平滑或严格组合,当目标对象已经设置动画并且您只需要重复其运动,然后禁用/启用时非常有用 timeMoving - 您的对象(在本例中为相机)在偏离目标时应匹配状态的时间。 keepDistance - 这是如果您希望对象与目标保持在给定距离而不是靠近的情况。也就是说,在开始工作之前,你将相机放置在距离目标物体 5 米的地方,它总是倾向于在这五米范围内接近它并朝它的方向看。 因此,在反冲期间,您可以根据需要转动相机本身,但目标物体保持在同一位置,并且相机本身会迅速努力转向所需的方向。如果同时他们开始用鼠标扭转和移动目标,那么摄像机就会开始朝那个方向平滑移动,这将类似于你清醒过来并恢复正常状态的效果。
尝试编写代码
CameraController来更改保存的鼠标位置,以便在读取新位置时它向上移动。您让鼠标返回到中心位置。添加代码来记住您“有一个反冲”,并且下次您读取鼠标移动时,它将向相机添加旋转。
并向您的问题添加代码。
我用了这个方法。您创建一个 Target 对象,该对象准确地放置在您需要的位置,看起来方向正确并且由鼠标控制,也就是说,您的控制器准确地控制该对象。对于相机,您编写一个简单的脚本来尝试将相机与该对象结合起来。为了使观察者偏离目标时一切都变得漂亮,请使用更新将位置和旋转平滑地结合到目标。
我曾经使用过这个脚本:取自这里https://ru.stackoverflow.com/a/781002/33519
因此,在反冲期间,您可以根据需要转动相机本身,但目标物体保持在同一位置,并且相机本身会迅速努力转向所需的方向。如果同时他们开始用鼠标扭转和移动目标,那么摄像机就会开始朝那个方向平滑移动,这将类似于你清醒过来并恢复正常状态的效果。