我在地图中有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));
答案 0 :(得分:0)
你是否考虑过创建一个以命中游戏对象为参数的方法?
public void SetHitObjectToActive(GameObject hitObject)
{
hitObject.SetActive(true);
}
然后你可以调用这样的方法
if (Physics.Raycast (ray, out hit))
{
SetHitObjectToActive(hit.collider.gameObject);
}
此外,您可能希望将所有这些对象存储在集合中。
public List<GameObject> yourObjects;