【发布时间】:2017-01-25 08:39:38
【问题描述】:
在我的 Unity3D C# 项目中遇到相机移动问题。
我有什么:
- 场景中的一些物体
- 一个相机,可以从任何物体的位置或它自己的当前位置飞行
我需要什么:
- 平滑旋转相机到对象的原点之一
- 飞到物体附近的位置(有一个空的,所以我飞到空的坐标)
算法:旋转到物体的原点,旋转完成后开始飞到空的位置。飞行时,查看物体的原点。
问题是它不平滑,相机在运动结束时“跳跃”。
我的 C# 代码(附在相机上):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testMove : MonoBehaviour {
public GameObject startObj;
public GameObject endObj;
public float speed = 1.0F;
private float startTime;
private float journeyLength;
private string endObjName;
private GameObject endObjLookAt;
void Start () {
startTime = Time.time;
if (startObj) {
} else {
startObj = this.gameObject;
}
journeyLength = Vector3.Distance(startObj.transform.position, endObj.transform.position);
endObjName = endObj.name;
endObjLookAt = GameObject.Find(endObjName + "LookAt");
}
void Update () {
if (endObj) {
float distCovered = (Time.time - startTime) * speed;
float fracJourney = distCovered / journeyLength;
tweenLook(endObjLookAt, fracJourney);
float angle = Quaternion.Angle(transform.rotation, Quaternion.LookRotation(endObjLookAt.transform.position - transform.position));
if (angle <= 0.0001) {
Debug.Log("rotation finished");
tweenPos(startObj, endObj, fracJourney);
transform.LookAt(endObjLookAt.transform.position);
}
}
}
private void tweenPos(GameObject startObj, GameObject endObj, float fracJourney) {
Vector3 newposition = Vector3.Lerp(startObj.transform.position, endObj.transform.position, fracJourney);
transform.position = newposition;
}
private void tweenLook(GameObject endObjLookAt, float fracJourney) {
Quaternion newrotation = Quaternion.LookRotation(endObjLookAt.transform.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, newrotation, fracJourney);
}
}
【问题讨论】:
-
为什么不
Lerp()ing? -
@YotamSalmon 您能否有礼貌地告诉我 Lerp 应该使用什么参数以及在哪里?抱歉,我对 Unity 很陌生。只是想在 Unity 中移植我的 ThreeJs 相机运动。
-
对不起,如果我看起来很粗鲁,那绝不是我的意图:) 你传递了一个 T 初始值(可以是 int、float、vector、Quaterion 等)、T 最终值和 lerping 因子(0-1 ),它实际上会影响运动。通常您使用 Time.deltaTime * N (N 变化) 作为 lerping 因素
-
@YotamSalmon 没关系,我不认为你粗鲁!谢谢! :)
-
@halfer 非常感谢 yoo,明白了!