Определите множество игровых объектов при нажатии на экране и взаимодействуйте с выбранным игровым объектом - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть 5 объектов на карте, и когда я нажимаю на экран на любом из них, появляется текстовое сообщение. Как я могу сделать это легче, когда у меня будет много объектов (более 500)? Какой лучший способ сделать это?

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

public class SeleccionarTesoro : MonoBehaviour {


public GameObject infotesoro0001A;
public GameObject infotesoro0002A;
public GameObject infotesoro0003A;
public GameObject infotesoro0004A;
public GameObject infotesoro0005A;

void Update() {

    if (Input.GetMouseButtonDown (0)) 
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
        if (Physics.Raycast (ray, out hit)) 
        {
            if (hit.collider.gameObject.name == "tesoro_0001") {
                infotesoro0001A.SetActive (true);
            }
            if (hit.collider.gameObject.name == "tesoro_0002") {
                infotesoro0002A.SetActive (true);
            }
            if (hit.collider.gameObject.name == "tesoro_0003") {
                infotesoro0003A.SetActive (true);
            }
            if (hit.collider.gameObject.name == "tesoro_0004") {
                infotesoro0004A.SetActive (true);
            }
            if (hit.collider.gameObject.name == "tesoro_0005") {
                infotesoro0005A.SetActive (true);
            }
        }
    }
}   
}

ОБНОВЛЕНО: создание списка

Оригинальный вопрос: [У меня есть 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);
            }

        }
}
}

1 Ответ

0 голосов
/ 27 апреля 2018

Рассматривали ли вы создание метода, принимающего игровой объект-хит в качестве аргумента?

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

Тогда вы можете вызвать метод так:

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

Кроме того, вы, вероятно, захотите сохранить все эти объекты в коллекции.

public List<GameObject> yourObjects;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...