2016-09-21 5 views
0

私の2Dゲームプロジェクトでキャラクターの前方回転をシミュレートする必要があります。キャラクターの回転とマウスクリックポイントへの移動

私は移動スクリプトを作成しようとしましたが、完全には動作しません。理由は私の2Dアクターは宇宙船であり、彼の軸の周りに回転をさせることはできませんが、私はそれのために正回転をする必要があります。ここ

enter image description here

この移動の2つの部分です。

  • アクタは、前に戻って元の位置に戻る必要があります(半径は最適または事前定義されている必要があります)。
  • アクタは、マウスのクリック位置を使用して直線で移動する必要があります。

So。私はUnityエンジンを使用します。それを解放するためにいくつかの説明が必要です。

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

UPD:私の現在のソースコード:

using UnityEngine; 
 
using System.Collections; 
 

 
public class Move : MonoBehaviour { 
 

 
\t public float speed = 1.5f; 
 
\t public float rotationSpeed = 90f; 
 
\t private Vector3 pos; 
 
\t private Quaternion qTo; 
 

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

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

 
\t \t var dir = pos - transform.position; 
 

 
\t \t if (dir != Vector3.zero) { 
 
\t \t \t qTo = Quaternion.LookRotation(Vector3.forward, pos - transform.position); 
 
\t \t \t transform.rotation = Quaternion.RotateTowards (transform.rotation, qTo, Time.deltaTime * rotationSpeed); 
 
\t \t } 
 

 
\t \t transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * speed); 
 
\t }  
 

 
}

enter image description here

+0

があなたの船がambiturnerありませんか?反時計回りではなく、時計回りに回転しないのはなぜですか?いずれにしても、ゲームを書くには数学の理解が必要です。これのどの部分に悩まされていますか? 2つのベクトルを加えることができれば、これは簡単なはずです。 –

+0

** "C#またはJavascriptでコードを提供してください" **本当に?あなたは400以上の評判を持っていますが、このサイトの仕組みはまだ分かりません...あなたはコードを提供していません。さて、努力をしてもコードが機能しないとすれば、私たちはあなたを助けることができます。 – Programmer

+0

@Programmer申し訳ありませんが私は間違って言った。修正されました。 – xercool

答えて

1

はこれを試してみてください:

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); 
+0

正常に動作していません。精度が小さい場合は変更はありません。精度= 30(たとえば)の場合、動きが少なくなっただけです。 – xercool

+0

あなたはその赤い矢印の始まりを説明できますか? (私はちょうど今見た) – Krajca

+0

オブジェクトは、ちょうど彼の中心点の周りを回転している – xercool

関連する問題