2017-10-23 18 views
0

質問する前に、私は初心者であると宣言します。Unityで特定のオブジェクトの中心座標を2Dでポイントする方法は?

説明が不足している可能性があることをご理解ください。

写真とコードで実装したいことについて説明します。

以下は画像です。上記画像のよう

enter image description here

、Iは5と7のランダムな位置との間で発生する本ミサイル(プレハブ)を実装しています。

は、ここでそのためのコードです:

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

class MissileAnimation : WordGameSingleton<MissileAnimation> 
{ 
    private int missile_num = 0; 
    public List<GameObject> missile_list = new List<GameObject>(); 
    float fixedPosition_z = 1f; 
    public GameObject missile_parent_area = null; 

    protected override void Start() 
    { 
     StartCoroutine(fireMissiles()); 

     missile_parent_area = new GameObject(); 
     missile_parent_area.name = "MissileAnimation"; 
    } 

    protected override void Update() 
    { 
    } 

    private IEnumerator fireMissiles() 
    { 
     yield return new WaitForSeconds(0.3f); 


     missile_parent_area.transform.SetParent(this.gameObject.transform); 
     missile_parent_area.transform.localScale = new Vector3(1f, 1f, 1f); 
     missile_parent_area.transform.localPosition = new Vector3(this.gameObject.transform.position.x, this.gameObject.transform.position.y, fixedPosition_z); 
     //GameObject planet_position = GameObject.Find("Center_Planet") as GameObject;position.x 
     //float planet_position_x = planet_position.transform.position.x; 
     //float planet_position_y = planet_position.transform.position.y; 

     missile_num = UnityEngine.Random.Range(5, 7); // Generate between 5 and 7EA missiles 
     int origin_width = 50; 
     int origin_height = 100; 

     for (int i = 0; i < missile_num; ++i) 
     { 
      // Generate missile position random position 
      float angle = Mathf.Round(UnityEngine.Random.Range(90f, 180f) + 45f); 
      float randomPosition_x = Mathf.Cos(angle) * (Screen.width - origin_width)/2; 
      float randomPosition_y = Mathf.Sin(angle) * (Screen.height - origin_height)/2; 

      // Center view of the Planet 
      // How do I implement this part? 

      // Create a missile prefab 
      GameObject missile_prefab_load = Resources.Load("Prefabs/Object/Missile") as GameObject; 
      GameObject missile_prefab_instantiate = Instantiate(missile_prefab_load, this.gameObject.transform.position, Quaternion.identity) as GameObject; 
      // MonoBehaviour.Instantiate(Resources.Load("Prefabs/Object/Missile"), new Vector3(0f, 0f, 0f), Quaternion.identity) as GameObject; 
      missile_prefab_instantiate.name = "missile_" + i; 
      missile_prefab_instantiate.transform.SetParent(missile_parent_area.transform); 
      missile_prefab_instantiate.transform.localPosition = new Vector3(randomPosition_x, randomPosition_y, 0f); 
      missile_prefab_instantiate.transform.localScale = new Vector3(2.0f , 2.0f, 2.0f); 
      missile_list.Add(missile_prefab_instantiate); 


      // Speed ​​of missile flight 
      float speed = UnityEngine.Random.Range(1.0f, 1.4f); 

      // Go Missile 
      LeanTween.moveLocal(missile_prefab_instantiate, new Vector3(0f, 0f, 0f), speed).setEase(LeanTweenType.easeInCubic).setOnUpdate(crashPlanet).setOnUpdateParam(missile_prefab_instantiate); 
      // LeanTween.moveLocal(GameObject , Vector , time:float) 
      // setOnUpdate : <float,Object> 

      // Reduced size as the rocket fires. 
      LeanTween.scale(missile_prefab_instantiate, new Vector3(1.0f, 1.0f, 1.0f), speed).setEase(LeanTweenType.easeInCubic); 
     } 
     yield return new WaitForSeconds(0.9f); 

     Vector3 position = this.gameObject.transform.localPosition; 
     this.transform.position = new Vector3(position.x, 0f, position.z); 
    } 

    private void crashPlanet(float obj, object missile) 
    { 

    } 
} 

私の質問はここから始まります。

ランダム座標で作成されたミサイルオブジェクトのZ軸の値はゼロです。 (回転Z)

私は、ミサイル(プレハブ)がCenter_Planetの中心座標を指し示すようにします。

たとえば、次の図のようになります。 enter image description here

これを実装するには、Quaternion.rotation関数を使って試したLookAT関数を使用しました。

しかし、実装は失敗しました。

SO ..上記を実装するには、Mathf関数を使用して計算を試みますが、私はそれをどのように定式化するのか分かりません。

上記を実装するには、数式の設定方法に関するアドバイスをいただきたいと思います。

初心者としてアドバイスをいただければ本当にありがたいです。

+0

可能な複製を使用して、2D要素の "前方" ベクトルを割り当てる可能性を持っている[ゲームオブジェクトtransform.Rotate()](https://stackoverflow.com/questions/45841591/gameobject-transform-rotate) – ryeMoss

+1

私は確認します。どうもありがとうございました! –

答えて

2

あなたがのtransform.right = ....

Transform target = GameObject.Find("Center_Planet").transform ; 

// ... 

for (int i = 0; i < missile_num; ++i) 
{ 
    // ...  
    missile_prefab_instantiate.transform.right = target.position - missile_prefab_instantiate.transform.position ; 
} 
yield return new WaitForSeconds(0.9f); 

// ... 
+0

@最善원:それはあなたのために働いたのですか? – Hellium

+1

番号は動作しません@Hellium –

+1

しかし、私はMathfs関数を使用することを解決します。それはとてもうまくいっていました –

関連する問題