相机移动到错误的方向,当我使其活跃.Unity5
本文关键字:活跃 Unity5 移动 错误 方向 相机 | 更新日期: 2023-09-27 17:50:35
基本上我在场景中有2个相机,我通过按一个按钮使第二个相机活动。当它激活时,我希望它从原始位置移动到我在脚本中指定的位置。但实际情况是,当第二个摄像头激活时,它会移动到很远的地方。
我把我的第二个相机放在我想要的地方,并记录x/y/z位置和旋转,然后我把它放在脚本作为startPosition。之后,我移动相机一点,并把它的Start()移动到它的startPosoton。所以当我激活第二个摄像头时它应该从它的位置移动到这个startPosition,但它不是。
有人有这个问题吗?
这是我的部分代码:所以当第二个摄像头激活时,它会这样做
public float smoothTime = 2;
private Vector3 newPosition;
private Quaternion newRotation;
private Vector3 startPosition = new Vector3 (-139.56f,6.58f,21.82f);
private Quaternion startRotation = Quaternion.Euler(0.22f,212.71f, 0f);
void Awake(){
newPosition = transform.position;
newRotation = transform.rotation;
}
void Start () {
newPosition = startPosition;
newRotation = startRotation;
}
void Update () {
PositionAndRotationChanging ();
}
void PositionAndRotationChanging () {
transform.position = Vector3.Lerp
(transform.position,newPosition,Time.deltaTime * smoothTime);
transform.rotation = Quaternion.Slerp(transform.rotation, newRotation,
Time.deltaTime * smoothTime);
}
我想你误解了lerp的作用。"线性插值"接受两个值并返回另一个值,即它们之间的t
%。如果您从不传递0或1的t
,则您将永远不会在输出中看到这两个端点。
通常情况下,您可能会传入一个t
,随着时间的推移而增加。例如,你可以有一个浮点数timer
,每帧增加一次Time.deltaTime
:
float timer;
Vector3 startPosition = Vector3.zero;
Vector3 endPosition = Vector3.up * 10f;
//move from "startPosition" to "endPosition" over 20 seconds
void Update() {
timer += Time.deltaTime;
transform.position = Vector3.Lerp(startPosition, endPosition, timer / 20f);
}
在你的情况下,你保持t
或多或少不变。它大概等于smoothTime
乘以0.02
。通过反复移动transform.position
和endPosition
,您将产生一种有趣的舒缓效果——因为您的输出总是会接近40%。
根据您编写代码的方式,您可能更喜欢使用MoveTowards
和RotateTowards
,而不是:
public class ExampleClass : MonoBehaviour {
public Transform target;
public float moveSpeed;
public float rotSpeed;
void Update() {
float move = moveSpeed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, target.position, move);
float rot = rotSpeed * Time.deltaTime;
transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, rot);
}
}
这些辅助函数的工作方式不同,允许您将X
单元移动到更靠近某个点的位置,或将Y
旋转到更靠近某个方向的位置。