2017-03-19 5 views
0

説明: こんにちは、私はC#で始まる非常に初心者のプログラマーです。私はユニティ3DのキューブをA点からB点に移動したいところに固執しています。ある時点に達すると、それを停止したいと思います。ループ中にオブジェクトを使用すると、オブジェクトが即座にジャンプする理由はありませんが、更新時にスムーズに移動します

問題: 私の問題は、オブジェクトを更新時に移動するとうまく動きます。条件を追加してwhileループに追加すると、ジャンプするだけです(コメントされたセクション)。チュートリアルや私が間違っていることに関する情報が見つかりません。私はループなどのチュートリアルをたくさん見ていましたが、それは私を助けませんでした。

望ましい結果:ループ

すべてのヘルプは を高く評価している間に点AとBの間キューブの スムーズな動きがUpdate()方法としてのあなた

トーマス

using System.Collections; 
    using System.Collections.Generic; 
    using UnityEngine; 

    public class PujdeTo : MonoBehaviour { 

     public bool moveBox = true; 
     public float objectSpeed = 1; 

     void Start() { 

     } 

     void Update() 
     { 
      transform.Translate(Vector3.left * (objectSpeed * Time.deltaTime)); 
     } 
     void FixedUpdate() 
     { 
      //while (moveBox == true) 
      //{ 
      // transform.Translate(Vector3.left * (objectSpeed * Time.deltaTime)); 
      // //transform.localPosition += Vector3.left * Time.deltaTime * speed; 
      // if (transform.localPosition.x <= -10) 
      // { 
      //  moveBox = false; 
      // } 
      //} 
     } 
    } 
+0

あなたは同時に ')'アップデート() 'と' FixedUpdate(両方を使用していましたか?サイドノートでは、 'moveBox'はすでにブール値であるため、' moveBox == true'という条件は冗長です。代わりに 'while(moveBox)'だけを使用してください。実際には、 'while'ループ全体を取り除くことができ、' moveBox'変数は必要ありません。 – dabadaba

+0

このコードは大きなものの一部です。そのため、ブールのものがそこにあります。 Grooからの回答は、私がそれを理解するのを助けました。とにかく素早い答えをありがとう。 – Tomas

+0

私があなたが 'moveBox'変数を全く必要としないと言ったとき、私はGrooの答えが示唆したことを正確に意味していました:オブジェクトが移動するのを止めるために' moveBox'をチェックする必要はありません。常にロジックを単純化してみてください。 – dabadaba

答えて

0

と思いますありがとうございましたループ本体。 Unityはこのメソッドをフレームごとに1回呼び出します。

実際の描画は別の方法で行われているので、Unityが関係するのは、メソッドが終了した後の値がであることだけです。言い換えれば

、あなたはおそらく何かしたい:

void Update() 
{ 
    if (!moveBox) 
    { 
     return; 
    } 

    transform.Translate(Vector3.left * (objectSpeed * Time.deltaTime)); 
    if (transform.localPosition.x <= -10) 
    { 
     moveBox = false; 
    } 
} 

それとも単にを:

void Update() 
{ 
    if (transform.localPosition.x > -10) 
    { 
     transform.Translate(Vector3.left * (objectSpeed * Time.deltaTime)); 
    } 
} 
+1

私はコメントを追加したいと思っていますが、私はあなたに感謝するためにそれを使用すべきではないと言います。それ以外はどうすればいいですか?これは私にとって非常に役立ち、魅力のように機能します。今、コード間の流れを理解することができます。前にこれを知らなかった。ありがとうございました! – Tomas

関連する問題