2014-09-20 97 views
0

所以我是Unity的新手,但是創建了一個簡單的2D遊戲。我需要讓兩個精靈在點擊時互相移動。我想使用附加到主相機的腳本,但打開其他建議。謝謝朋友! 這裏是我的腳本:Unity C#使兩個Sprites彼此移動

public class MoveTo : MonoBehaviour { 
 
\t GameObject objectA = null; 
 
\t GameObject objectB = null; 
 

 
\t // Use this for initialization 
 
\t void Start() { 
 
\t \t 
 
\t } 
 
\t 
 
\t // Update is called once per frame 
 
\t void Update() { 
 
\t \t 
 
\t \t 
 
\t \t if(Input.GetMouseButtonDown(0)) 
 
\t \t { 
 
\t \t \t Ray rayOrigin = Camera.main.ScreenPointToRay(Input.mousePosition); 
 
\t \t \t RaycastHit hitInfo; 
 
\t \t \t 
 
\t \t \t if(Physics.Raycast(rayOrigin, out hitInfo)) 
 
\t \t \t { 
 
\t \t \t \t //Destroy (hitInfo.collider.gameObject); 
 
\t \t \t \t if(objectA == null) 
 
\t \t \t \t { 
 
\t \t \t \t \t objectA = hitInfo.collider.gameObject; 
 

 
\t \t \t \t } 
 
\t \t \t \t else{ 
 
\t \t \t \t \t objectB = hitInfo.collider.gameObject; 
 
\t \t \t \t } 
 
\t \t \t \t if(objectA != null && objectB != null) 
 
\t \t \t \t { 
 

 
\t \t \t \t \t //Need something to make them move towards each other here??? 
 

 
\t \t \t \t \t objectA = null; 
 
\t \t \t \t \t objectB = null; 
 
\t \t 
 
\t \t \t \t } 
 
\t \t \t \t 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 
}

回答

0

在我看來移動等gameObjects與安裝在相機上的腳本是打破在Unity組件的基本思路。如果您希望物體平滑移動並且能夠同時移動多個物體對,這也很難做到。您需要某種移動物體及其目的地列表。然後,您需要瀏覽相機腳本的更新功能列表並更新sprite gameObjects的所有位置。

我認爲最好是將簡單的介於下面的腳本(如下圖)附加到sprite的gameObjects上。

using UnityEngine; 
using System.Collections; 

public class Tweener : MonoBehaviour { 

    public float tweenStopDistance = 0.2f; 
    public float tweenSpeed = 2.0f; 
    public Vector3 targetPosition = new Vector3(); 

    void Start() { 
     targetPosition = transform.position; 
    } 

    void Update() { 
     if((transform.position - targetPosition).magnitude > tweenStopDistance){ 

     transform.position += tweenSpeed * (targetPosition - transform.position).normalized * Time.deltaTime; 
     } 
    } 
} 

在這種情況下,您只需計算相機腳本中的目標位置。

if(objectA != null && objectB != null) 
    { 

    // Calculate position in the middle 
    Vector3 target = 0.5f * (objectA.transform.position + objectB.transform.position); 

    // Set middle position as tween target 
    objectA.GetComponent<Tweener>().targetPosition = target; 
    objectB.GetComponent<Tweener>().targetPosition = target; 

    objectA = null; 
    objectB = null; 

} 

如果您的目標機器上有很多精靈和計算能力不足。您也可以在運行時將該腳本組件添加到gameObject.AddComponent,以供那些需要它的精靈使用。附加可能相當重,但你不需要測試已經在目標中的不在移動的精靈。

+0

感謝您的幫助,現在我正在努力的其他事情是讓它們在碰觸時被破壞。我已經使用Boxed collider 2D,但是如果我現在添加它,現在我的精靈不會移動,因爲一個腳本使用了矢量3.您對我有什麼建議嗎? – user2685757 2014-09-29 09:31:19

+0

碰撞組件處有「is trigger」複選框。如果你檢查一個,你可以編寫你自己的[衝突代碼](http://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html)。在你的情況下,它將只是'Destroy(gameObject);' – maZZZu 2014-09-29 10:37:22

+0

如果你因爲Vector3而遇到問題,你可以將它們全部更改爲vector2。 – maZZZu 2014-09-29 10:44:38