Unity 3D 脚本移动多个对象

3

我有一个问题,我正在使用Unity 3D (c#)进行一个3D世界编辑器项目。我的问题是我想通过选择它们来移动多个物体。我已经成功地用鼠标光标移动了单个物体,但对于多个物体,我失败了:D。 这是我移动一个物体的代码:

public class ClickAndDrag : MonoBehaviour {
    private RaycastHit raycastHit;
    private GameObject Gobj;
    private float distance;
    private Vector3 ObjPosition;
    private bool Bobj;

    // Use this for initialization
    void Start() {
    }

    // Update is called once per frame
    void Update() {
        if (Input.GetMouseButton (0)) {
            var ray = GetComponent<Camera> ().ScreenPointToRay (Input.mousePosition);
            var hit = Physics.Raycast (ray.origin, ray.direction, out raycastHit);

            if (hit && !Bobj) {
                Gobj = raycastHit.collider.gameObject;
                distance = raycastHit.distance;
                Debug.Log (Gobj.name);
            }

            Bobj = true;
            ObjPosition = ray.origin + distance * ray.direction;
            Gobj.transform.position = new Vector3 (ObjPosition.x, ObjPosition.y, ObjPosition.z);
        } else {
            Bobj = false;
            Gobj = null;
        }       
    }
}

感谢您的帮助!

1
这只编码用于移动单个对象。您在移动多个对象时遇到了什么问题?您在问题中没有指定这一点。 - Atra Viator
我不知道该怎么做,因为当我移动一个对象时,我是用鼠标来操作的,但是对于多个对象我无法这样做。 - Sidy Ndaw
1个回答

2

private GameObject Gobj; 是一个单一 GameObject 的变量。将其重构为 private List<GameObject> objects;,并且不再使用 Gobj.transform.position = new Vector3(ObjPosition.x, ObjPosition.y, ObjPosition.z),而是改为:

foreach (GameObject item in objects)
{
    item.transform.position = new Vector3 (ObjPosition.x, ObjPosition.y, ObjPosition.z)
}

编辑:如果您不确定如何操作列表,List<T>有一组内置函数,使其非常容易。现在,您只需调用objects.Add(newObject);来添加一个对象,而objects.Remove(oldObject);则可删除一个对象。


1
部分回答:您没有解释如何获取这个对象列表。它不会自动填充。 - Kryptos
要使用 List<T>,您需要在脚本顶部添加 using System.Collections.Generic;,同时不要忘记。 - maraaaaaaaa
他并不是在问如何填充列表或选择要移动的内容...他只是在询问关于移动的问题,而且他似乎对答案感到满意。 - maraaaaaaaa
1
正确,但不要忘记StackOverflow的答案不仅仅是为了帮助提出问题的人,也是为了整个社区的利益。 - Kryptos
他提到他想通过选择它们来移动多个对象。因此,我认为OP正在构建类似实时战略游戏的东西,在其中您应该能够在运行时选择所有游戏对象。 - Jaanus Varus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接