【发布时间】:2016-05-07 06:26:22
【问题描述】:
这并没有实现我真正想要的。它基本上只是围绕一个空旋转,直到达到最大值。当我使用此代码时,它运行良好。 “最大”角度会根据您决定首先移动的方式而变化。有没有办法设置最大旋转角度?
using UnityEngine;
using System.Collections;
public class CameraMovement : MonoBehaviour {
Transform rotAround;
public float maxRotation = 0;
// Use this for initialization
void Start () {
rotAround = GameObject.Find ("CamRotation").GetComponent <Transform> ();
}
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.D) && maxRotation < 52.0f) {
transform.RotateAround (rotAround.position, Vector3.down, 100 * Time.deltaTime);
maxRotation += 1;
}
if (Input.GetKey (KeyCode.A) && maxRotation > -52.0f) {
transform.RotateAround (rotAround.position, Vector3.up, 100 * Time.deltaTime);
maxRotation -= 1;
}
}
}
【问题讨论】:
-
100 * Time.deltaTime 不等于 1,这是一个错误的假设。事实上,你永远无法判断 Time.deltaTime 下一帧是什么,但它大约是 1 / 60,所以 0.016667。
-
@MikeSmith 你永远不应该指望
Time.deltaTime保持不变。这只是当前帧和最后一帧之间经过的时间量。这对于调节不规则帧速率的计算非常有用。 -
@yes 嗯,抱歉,我没有。我以为是帧速率时间,可能会有所不同。我使用了 100,因为在我最初的 50 时,相机移动太慢了。除非你是在评论别人。
-
@MikeSmith 但是你为什么只在旋转中添加 1。 100 / 60 大约是 1.66667 而不是 1。也是的,Time.deltaTime 是 2 帧之间的时间,它会有所不同。但请参阅 gjttt1s 的答案,我确定它有效......
-
@是的,我实际上并没有在任何类型的旋转中添加 1。它更像是我的假边界,因为我不知道如何设置最大旋转角度。游戏开始时,凸轮处于默认位置,而无意义的变量 maxRotation 为 0。它基本上所做的就是每次移动时加 1。当它运行 Update() 循环时,它会检查 maxRotation 变量是否仍在它的“边界”内,如果是,您可以在该帧上移动。但是,例如,如果您大于 90 或小于 -90,则 if 语句将是错误的,您无法再朝那个方向移动。
标签: c# unity3d rotation euler-angles