我想要的只是使聚光灯跟随对象。
这是一个两步过程。首先,找到目标的坐标位置(在世界坐标中)。其次,将该位置加上偏移量应用于您的聚光灯。由于您的灯光沿 x 轴旋转 90°,因此我假设您的灯光在上方并向下看。
var offset = new Vector3(0, 5, 0);
function Update()
{
// Move this object
transform.Translate (0, 0, objectSpeed*Time.deltaTime);
// Move the light to transform's position + offset.
// Note that the light's rotation has already been set and does
// not need to be re-set each frame.
lightView.transform.position = transform.position + offset;
}
如果您想要更平滑的“跟随”动作,请随时间进行线性插值。代替
lightView.transform.position = transform.position + offset;
和
lightView.transform.position = Vector3.Lerp(lightView.transform.position, transform.position + offset, Time.deltaTime * smoothingFactor);
smoothingFactor
浮动在哪里。
transform.*
顺便说一句,调用任何类型的重复游戏循环几乎是死路一条,因为GameObject.transform
它实际上是一个执行组件搜索的 get 属性。大多数 Unity 文档建议您首先缓存转换变量。
更好的代码:
var myTrans = transform; // Cache the transform
var lightTrans = lightView.transform;
var offset = new Vector3(0, 5, 0);
function Update()
{
// Move this object
myTrans.Translate (0, 0, objectSpeed*Time.deltaTime);
// Move the light to transform's position + offset.
// Note that the light's rotation has already been set and does
// not need to be re-set each frame.
lightTrans.position = myTrans.position + offset;
}