我正在使对象移动它的update()并根据用户输入向左向上转。我想要的只是让聚光灯跟随对象。 对象的旋转:0,180,0 SpotLight的轮换:90,0,0 由于旋转不同(并且它们需要像那样),我无法使光跟随物体。 代码:
function Update () {
SetControl(); // Input Stuff...
transform.Translate (0, 0, objectSpeed*Time.deltaTime);
lightView.transform.eulerAngles=this.transform.eulerAngles;
lightView.transform.Rotate=this.transform.eulerAngles;
lightView.transform.Translate(snakeSpeed*Time.deltaTime,0, 0); //THIS IS INCORRECT
}
lightView只是指向SpotLight。
答案 0 :(得分:3)
您正在寻找的是Unity方法Transform.lookAt。
将以下脚本置于聚光灯下。此代码将使其附加的对象,查看另一个对象。
// Drag another object onto it to make the camera look at it.
var target : Transform;
// Rotate the camera every frame so it keeps looking at the target
function Update() {
transform.LookAt(target);
}
答案 1 :(得分:1)
我想要的只是让聚光灯跟随对象。
这是一个两步过程。首先,找到目标的坐标位置(以世界坐标表示)。其次,将该位置加上偏移量应用于您的聚光灯。由于你的光线沿着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;
}