1

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を指しています。

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

私が望むのは、スポットライトをオブジェクトに追従させることだけです。

これは 2 段階のプロセスです。まず、ターゲットの座標位置 (ワールド座標) を見つけます。次に、その位置とオフセットをスポットライトに適用します。あなたのライトは 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フロートはどこにありますか。

余談ですが、は実際にはコンポーネント検索を行う get プロパティであるtransform.*ため、あらゆる種類の繰り返しゲーム ループで呼び出すのは死に近いです。GameObject.transformほとんどの 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 に答える