2015-08-23 7 views
2

Я создаю систему Quest в своей RPG (Ролевая игра), и она может пройти через NPC (персонаж без игрока). Я прикрепляю сценарий к своему главному персонажу, который может проверить, есть ли у вас квест от NPC. Вот код:Доступ к GameObject в Unity с различными копиями

public class QuestTracker : MonoBehaviour 
{ 
    public QuestGiver questGiver; 
    public Button AcceptQuest; 
    public OpenQuestWindow questWindow; 

    public void acceptQuest() 
    { 
     questGiver.questAccepted = true; 
    } 
} 

Теперь я приложил к своему NPC скрипт, чтобы дать квест игроку. Вот код для NPC:

public class QuestGiver : MonoBehaviour 
{ 
    public bool questAccepted = false; 
} 

Когда игрок нажимает на NPC, появится окно, которое покажет игроку, что будет его/ее цель квеста. На данный момент я создал 2 NPC и прикрепил их как скрипт QuestGiver. Вот некоторые скриншот:

enter image description here enter image description here

кнопку Принять, я использовал функцию acceptQuest() на моем QuestTracker, который прилагается к игроку, но я не могу установить конкретное значение для QuestGiver потому что у меня есть несколько копий NPC, а не один.

enter image description here

То, что я хочу, чтобы установить QuestGiver на проигрывателе через время выполнения. Я знаю, что это может быть реализовано с помощью функции OnMouseOver() или Raycast. Я знаю логику, но я не знаю, как ее реализовать.

ответ

2

Я думаю, использование статической переменной может решить вашу проблему. Установите игрока questGiver как статичный.

public class QuestTracker : MonoBehaviour 
{ 
    public static QuestGiver questGiver; 
    public Button AcceptQuest; 
    public OpenQuestWindow questWindow; 

    public void acceptQuest() 
    { 
     questGiver.questAccepted = true; 
    } 
} 

И затем, когда Npc совершит квест, смените квест игрока с помощью скрипта Npc.

void OnMouseDown() 
{ 
    QuestTracker.questGiver = this; 
} 

Редактировать: Кстати, вы не увидите переменную questGiver в инспекторе, когда вы меняете ее как статическую. Проверьте его с помощью Debug.Log().

+1

Действительно приятное решение O.o Мне нравится, как вы использовали OnMouseDown() преимущество. +1 – TuukkaX

+0

У меня уже есть разный диалог для NPC, и это оказывается тем, что я хотел. –

+0

Вы можете видеть questGiver в инспекторе, имея еще одну общедоступную переменную, называемую questGiverInspector типа QuestGiver, а затем просто пишите в void Update questGiverInspector = questGiver; –

0

Вы должны сделать массив всех QuestGivers в игре и присвоить их значения функции Start() на любом скрипте. Добавьте глобальную переменную в класс QuestGiver, чтобы определить, кем является QuestGiver, например, целое число. Поместите этот код в acceptQuest()

QuestGiver giver = null; 
switch (questGiver.ID) 
{ 
    case 0: 
    giver = classThatHasTheArray.QuestGiverArray[0]; 
    break; 
} 

giver.questAccepted = true; 

С уважением, TuukkaX.

 Смежные вопросы

  • Нет связанных вопросов^_^