在屏幕中单击时识别许多游戏对象并与所选游戏对象进行交互

时间:2018-04-27 18:29:20

标签: c# unity3d

我在地图中有5个对象,当我在屏幕上点击其中任何一个时,会出现一条短信。当我有很多物体(超过500个)时,我怎么能更容易地做到这一点?最好的方法是什么?

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

public class SeleccionarTesoro_LIST : MonoBehaviour {


public List<GameObject> hitObject;


public void SetHitObjectToActive(GameObject hitObject)
{
    hitObject.transform.GetChild(0).GetChild(0).gameObject.SetActive (true);
    hitObject.transform.GetChild(0).GetChild(2).gameObject.SetActive (true);

}

void Update() {

    if (Input.GetMouseButtonDown (0)) 
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);


            if (Physics.Raycast (ray, out hit)) {
                SetHitObjectToActive (hit.collider.gameObject);
            }

        }
}
}

更新:使用列表

原始问题:[我在地图中有5个对象,当我在屏幕上点击其中任何一个时,会出现一条短信。当我有很多物体(超过500个)时,我怎么能更容易地做到这一点?最好的方法是什么?]

var original = {
  val: 4,
  right: {
    val: 7,
    right: { val: 9, right: null, left: null },
    left: { val: 6, right: null, left: null },
  },
  left: {
    val: 2,
    right: { val: 3, right: null, left: null },
    left: { val: 1, right: null, left: null },
  },
};

function swapLR(obj) {
    if (!obj || (obj.left == null && obj.right == null)) {
        return obj;
    }
    var tmp = swapLR(obj.left);
    obj.left = swapLR(obj.right);
    obj.right = tmp;
    return obj;
}

console.log(original);
console.log(swapLR(original));

1 个答案:

答案 0 :(得分:0)

你是否考虑过创建一个以命中游戏对象为参数的方法?

public void SetHitObjectToActive(GameObject hitObject)
{
    hitObject.SetActive(true);
}

然后你可以调用这样的方法

if (Physics.Raycast (ray, out hit)) 
{
    SetHitObjectToActive(hit.collider.gameObject);   
}

此外,您可能希望将所有这些对象存储在集合中。

public List<GameObject> yourObjects;