2017-09-10 6 views
0

私はマウスカーソルで私の宇宙のゲームと宇宙船のオブジェクト(プレーヤー)の動きを書いています。Unity:ゲームのための特別な動き

は、現在のコードを次ています

using UnityEngine; 
using System.Collections; 
using UnityEngine.EventSystems; 

public class Move : MonoBehaviour { 

    public float speed = 1.5f; 
    public float rotationSpeed = 90f; 
    public float rotPrecision = 0.1f; 
    public float movePrecision = 0.1f; 
    private Vector3 pos; 
    private Quaternion qTo; 

    void Start() { 
     pos = transform.position; 
     qTo = transform.rotation; 
    } 

    void Update() { 
     if (!EventSystem.current.IsPointerOverGameObject()) 
     { 

      if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0)) 
      { 
       pos = Input.mousePosition; 
       pos.z = transform.position.z - Camera.main.transform.position.z; 
       pos = Camera.main.ScreenToWorldPoint(pos); 
      } 

      var dir = pos - transform.position; 
      qTo = Quaternion.LookRotation(Vector3.forward, pos - transform.position); 

      if (Quaternion.Angle(transform.rotation, qTo) >= rotPrecision) //just set your own precision 
       transform.rotation = Quaternion.RotateTowards(transform.rotation, qTo, Time.deltaTime * rotationSpeed); 

      if (Vector3.Distance(transform.position, pos) > movePrecision) // 0.1f 
       transform.Translate(Vector3.up * speed * Time.deltaTime); 
     } 
    }  

} 

しかし、そこにポイントが(無限ループを持っている)プレイヤーに近すぎるとき、私は運動精度と回転に問題があります。

次の画像で説明した本移動システムの考え方:

(プレイヤアクターが緑色で、パスは灰色であり、宛先ポイントは赤色です)。

movement plan

私は誰かがその/ wの私を助けることができることを願っています。

ありがとうございました!

答えて

1

私があなたの質問を正しく理解していれば、問題は、コードが終了点に到達できないため、プレーヤーの動きが決して止まらないということです。

これを解決するには、許容範囲の精度マージンを追加します。

あなたが望む回転とプレーヤーの実際の回転/位置との差が、所与の変数よりも小さい場合、例えば0.05%未満であるかどうかを計算します。

このようにして、0.05%精度内であれば、動きが止まっても問題ないことをプログラムに知らせることができます。

これ以外の場合、プログラムが完璧で完璧な回転と位置に到達しない場合、計算と動きパターンにわずかな数学的不正確さがあるため、プログラムは無限に調整され続けます。

+0

正確性を意味するいくつかのコード例や説明を教えてください。 – featureoffuture

+0

現在使用しているコードがすでに精度計算を試みているようです。 rotPrecision値とmovePrecision値を高い値に調整してください。 コード内ではなく、インスペクタで実行する必要があります。 – Doh09

+0

私は何かを試しました...しかし、何も正しく動作しません... – featureoffuture

関連する問題