1

我正在让一个对象在它的 update() 中移动,并根据用户输入向左向右向上向下。我想要的只是使聚光灯跟随对象。物体的旋转:0,180,0 聚光灯的旋转: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。

4

2 回答 2

4

您正在寻找的是 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);
}
于 2013-01-07T11:14:36.270 回答
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;
}
于 2013-01-08T00:12:46.123 回答