Unity C#让两个精灵互相移动

时间:2014-09-20 06:34:32

标签: c# unity3d move

所以我是Unity的新手,但创造了一个简单的2D游戏。点击它们时,我需要让两个精灵互相移动。我想使用附加到主摄像头的脚本,但打开其他建议。谢谢朋友! 这是我的脚本:

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

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

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

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

					objectA = null;
					objectB = null;
		
				}
				
			}
		}
	}
}

1 个答案:

答案 0 :(得分:0)

在我看来,使用附加到相机的脚本移动其他游戏对象正在破坏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将该脚本组件附加到需要它的精灵上。附着可能很重,但你不需要测试已经在目标中的精灵没有移动。