コードにはかなりの非効率性があります。 Update
ループでGetComponent<>()
に電話をかけてはいけません。代わりにStart
機能を使用して、それにrefereceを格納しUpdate
ループであることを使用します。
public class ForwardBack : MonoBehaviour
{
private Transform thisTransform = null;
void Start()
{
// Get refrence
thisTransform = GetComponent<Transform>();
}
void Update()
{
//Use refrence.
thisTransform.Rotate(Vector3.right * Time.deltaTime);
}
}
注:あなたはMonoBehaviour
のすべての子供がTransform
コンポーネントへの参照を検索しますtransform
プロパティを継承することを実現することがあります。これを使用するのは非効率的です。私がここに示したようにあなたは自分自身の参照を得るべきです。
編集:@JoeBlowによって指摘されているように、transform
プロパティはうまく使えます。 Unity文書にどのようにTransform
コンポーネントが返されるかについて何も言及されていません。私はそれがちょうどGetComponent
のラッパーであることを読んだが、いくつかの異なるソースから。あなたの自由裁量で使用してください。
第2に、回転するためにユーラーアングルを使用しないでください。それはdocsでそう言います。
この変数を使用して絶対値を読み取り、角度を設定します。角度が360度を超えると失敗するため、それらを増分しないでください。代わりにTransform.Rotateを使用してください。
あなたも、あなたはそれがこれを単にその値に設定するのではなく、ゆっくりと増加しますかなかった場合でも、意味とにかくnew Vector3(0, 0, -90)
にそれを設定し、角度をインクリメントしていないように見えます。 eulerAngles
ため
ドキュメントはまた、あなたが、これはあなたがInput.GetKey
ではなくInput.GetKeyDown
に入力方法を変更する必要がありますが、これはすでに他の1で言及されてきた仕事を得る.TO Transform.Rotateである使用されなければならないものにあなたを導きます答え。次に、あなたはあなたの希望の軸の周りを回転することができます。あなたが持っているフレームレートに関係なく同じ速度で回転するように、値を拡大するにはTime.deltaTime
を使用することを忘れないでください。ローテーションのコードは次のようになります。
public class ForwardBack : MonoBehaviour
{
public float roatationSpeed;
private Transform thisTransform = null;
void Start()
{
thisTransform = GetComponent<Transform>();
}
void Update()
{
if(Input.GetKey(KeyCode.RightArrow)
{
thisTransform.Rotate(Vector3.right * rotationSpeed * Time.deltaTime);
}
if(Input.GetKey(KeyCode.LeftArrow)
{
thisTransform.Rotate(Vector3.left * rotationSpeed * Time.deltaTime);
}
}
}
(1) 'transform.eulerAngles'です。しかし、あなたの場合(2)単に '.eulerAngles'ではなく' .Rotate'を必要とします。 – Fattie