В моей программе я создаю экземпляры кнопок во время выполнения. Эти кнопки создаются на холсте. Они должны ссылаться на главный объект, автомобиль. Кнопки должны относиться ко всем частям автомобиля. Когда я нажимаю кнопку, я хочу, чтобы камера увеличивала масштаб нужной части автомобиля. Кнопки имеют тот же текст, что и детали автомобиля. Поскольку они создаются из префаба кнопки в активах во время выполнения, я не знаю, как его закодировать, где, если я нажимаю на него, он увеличивает масштаб нужной части.
Моя первая попытка заключалась в том, чтобы прикрепить скрипт к префабу кнопки, который при нажатии он читал бы свой собственный текст (потому что он захватывает текст от всех дочерних элементов в другом скрипте), затем он читал бы весь дочерний текст, сравнивал и находил, где текст кнопки был таким же, как текст дочерней части, затем он захватил этот дочерний GameObject, и он будет ссылаться на преобразование этого GameObject и преобразовать камеру в местоположение.
Я могу трансформировать камеру и все остальное, потому что я уже сделал это, используя raycast для щелчка по части автомобиля, но я просто не знаю, как назначить onClick кнопкам. Код должен быть многоразовым, поэтому я пытался создать его так, чтобы его можно было использовать для любого объекта ...
Изображение инспектора автомобиля и его частей Изображение инспектора и скрипта, создающего экземпляры кнопок
Ниже представлена моя попытка решить эту проблему. Этот скрипт прикреплен к префабу кнопки ...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ifClickedZoomy : MonoBehaviour
{
public GameObject objofparts;
public GameObject cm;
Button btn;
string nameofobj;
void start()
{
btn = this.GetComponent<Button>();
btn.onClick.AddListener(going);
btn.name = nameofobj;
var temp = objofparts.gameObject.transform.Find(nameofobj);
//btn.onClick.AddListener(delegate { Zoomy(temp); });
}
public void Zoomy(Transform target)
{
cm.transform.position = target.transform.position + Vector3.one * 0.5f;
cm.transform.LookAt(target);
}
void going()
{
/*
if(btn.GetComponentInChildren<Text>().text == "SkyCar")
{
GameObject target = GameObject.Find("SkyCar");
Vector2 targpos = target.transform.position;
cm.transform.position = targpos;
}
*/
}
}
Start
нужна заглавнаяS
, иначе она никогда не вызывается ... - person derHugo   schedule 04.03.2020