所以我是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;
}
}
}
}
}
答案 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
将该脚本组件附加到需要它的精灵上。附着可能很重,但你不需要测试已经在目标中的精灵没有移动。