#c# #unity3d
#c# #unity3d
Вопрос:
Я хочу, чтобы мой игрок (персонаж) нашел узел, на котором он стоит.
FindingNode.cs
using System;
использование UnityEngine;
общедоступный класс FindingNode : MonoBehaviour {
void OnTriggerStay(Collider other)
{
Action action = () =>
{
Debug.Log("vikas");
};
Action action1 = () =>
{
Debug.Log("Singh");
};
if (other.gameObject.name == "node(1)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(2)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(3)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(4)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(5)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(6)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(7)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(8)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(9)")
{
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
}
else if (other.gameObject.name == "node(10)")
else
Debug.Log("not working");
}
}
он показывает только «нерабочий» вывод в консоли. К узлам добавляется жесткое тело; это интерфейс игры «Монополия». если игрок может найти узел, то всплывающее окно отображается в соответствии с узлом.
Комментарии:
1. Во-первых, в именах ваших узлов, похоже, есть пробелы между node и скобкой. Во-вторых, вы могли бы отладить имя juat. Далее все действия узла тура кажутся одинаковыми. Последние. Изучите операторы переключения
2. У вас, очевидно, проблема с именованием. Но все вызовы одинаковы, поэтому, на чем бы вы ни стояли, он будет делать то же самое. Стоит упомянуть, что ваш метод collision может вызываться несколько раз и вызывать разные узлы при перекрытии двух или более. Это потому, что физика нуждается в проникновении, и это означает много точек попадания. Наконец, забудьте о совете switch, в вашем случае это не будет иметь никакого значения, кроме более длинного кода.
3. Пожалуйста, используйте правильные теги.
[unityscript]
есть или лучше был вариант JavaScript, подобный пользовательскому языку, который использовался в предыдущих версиях Unity и давно устарел ! Ваш код явноc#
включен. Также это вообще не связано с VisualStudio
Ответ №1:
Я думаю, в этом случае вам следует использовать варианты переключения.
Код должен выглядеть примерно так:
switch(other.gameObject.name) {
case "node(1)":
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
break;
case "node(2)":
Popup popup = UIController.Instance.CreatePopup();
popup.Init(UIController.Instance.MainCanvas, action, action1);
break;
default:
break;
}
…и так далее…
Я надеюсь, что это сработает для вас, удачи.
Комментарии:
1. Как переключатель имеет какое-либо значение? Почему тогда не словарь <строка, действие>?
2. Это не так, но, возможно, это сработало бы со случаями. Или вы можете попробовать с
OnTriggerEnter
помощью и установлен ли флажок триггера на узлах?