Как получить конкретный игровой объект из многих, использующих этот скрипт в Unit2d C#?
У меня есть куча игровых объектов со следующим скриптом. Я пытаюсь нажать на конкретный игровой объект, чтобы я мог его переместить. Отладочный фонд работает нормально, но я не могу получить доступ к объекту, чтобы переместить его.
public void OnMouseDown()
{
Debug.Log(senatorName + " is in chamber " + inChamber);
GameObject disSenator = GameObject.Find(senatorName);
newPos = new Vector3(0, 0, -2);
disSenator.MoveSenator(newPos);
}
public void MoveSenator(Vector3 newPos)
{
senator.transform.position = newPos;
}
Сценарий возражает на линииdisSenator.MoveSenator(newPos);
Я пробовал кучу других методов, и ничего не работает, даже когда я не получаю ошибок.
Заранее спасибо за ответ на вопрос новичка.
3 ответа
Предполагая, что вы наследуете от MonoBehavior, это должно работать, для каждого объекта, на который щелкает мышь, который имеет этот скрипт:
public void OnMouseDown()
{
Debug.Log(senatorName + " is in chamber " + inChamber);
newPos = new Vector3(0, 0, -2);
transform.position = newPos;
}
Используйте MonoBehavior's gameObject
свойство для доступа к объекту, к которому прикреплен скрипт: https://docs.unity3d.com/ScriptReference/Component-gameObject.html
HORRAY!!! Я наткнулся на решение, тщетно трясясь. Хитрость заключается в том, чтобы получить Rigidbody, а не GameObject. Вот код, который работает:
public void OnMouseDown()
{
Debug.Log(senatorName + " is in chamber " + inChamber);
rbSenator = GetComponent<Rigidbody2D>();
string newChamber = chooseMove(inChamber);
newPos = actMove(newChamber);
inChamber = newChamber;
rbSenator.transform.position = newPos;
Debug.Log(senatorName + " is in chamber " + inChamber);
}