私はマウスカーソルで私の宇宙のゲームと宇宙船のオブジェクト(プレーヤー)の動きを書いています。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);
}
}
}
しかし、そこにポイントが(無限ループを持っている)プレイヤーに近すぎるとき、私は運動精度と回転に問題があります。
次の画像で説明した本移動システムの考え方:
(プレイヤアクターが緑色で、パスは灰色であり、宛先ポイントは赤色です)。
私は誰かがその/ wの私を助けることができることを願っています。
ありがとうございました!
正確性を意味するいくつかのコード例や説明を教えてください。 – featureoffuture
現在使用しているコードがすでに精度計算を試みているようです。 rotPrecision値とmovePrecision値を高い値に調整してください。 コード内ではなく、インスペクタで実行する必要があります。 – Doh09
私は何かを試しました...しかし、何も正しく動作しません... – featureoffuture