2016-04-26 6 views
1

エラーを持って提案オプションを使用しようとして 回以上

は事前

using UnityEngine; 
using System.Collections; 

public class ForwardBack : MonoBehaviour { 
    // speed variable 
    public float speed; 


    public KeyCode pressLeft; 
    public KeyCode pressRight; 
    public float rotationSpeed; 

    // Use this for initialization 
    void Start() { 
     speed = 1f; 
    } 

    // Update is called once per frame 
    void Update() { 

     transform.Translate(0f, speed*Input.GetAxis("Vertical") *  Time.deltaTime,0f); 

     if (Input.GetKey(KeyCode.RightArrow)) 
     { 
      transform.Rotate(Vector3.Right * rotationSpeed * Time.deltaTime); 
     } 
     if (Input.GetKey(KeyCode.LeftArrow)) 
     { 
       transform.Rotate(Vector3.Left * rotationSpeed * Time.deltaTime); 
     } 
    } 
} 
+0

(1) 'transform.eulerAngles'です。しかし、あなたの場合(2)単に '.eulerAngles'ではなく' .Rotate'を必要とします。 – Fattie

答えて

1

コードにはかなりの非効率性があります。 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); 
     } 
    } 
} 
+0

ありがとうございます。最初に統一でプログラミングしようとする。いくつかのyoutubeビデオを見て自分自身を混乱させる必要があります。もう一度お試しいただきありがとうございます –

+0

@KevinCranfieldそれはクールな男です、みんなどこかで始まります。 YouTubeのビデオには注意が必要ですが、悪い習慣を覚えるのは簡単です。これ、またはあなたの質問に対する他の答えがあなたが探していた答えであれば、それも受け入れることを忘れないでください! –

+0

アプリケーションを使用すると、受け入れの回答が見つかりません –

2

であなたを右、その定義 ラインtransform.Rotate(Vector3.Rightではありません感謝のVector3 。連続プレス用Input.GetKeyチェック一方で、代わりにInput.GetKeyDown

Input.GetKeyDownボタンが押されたかどうかを検出するのInput.GetKeyを試してみてください私はあなたのシリンダーのみオンにされている理由つまり想像ce。

関連する問題