2016-05-25 1 views
0

Недавно я подумал о добавлении кнопки InGame в свою игру. Это не GUI или UI Button, это блок, добавленный к стене, например.Нажмите a в игре Кнопка для воспроизведения анимации

пустышки Код:

OnTriggerEnter(c:Collider) { 
    if(c.gameObject.tag =="Player") 
    { 
     //Text = "E to interact!" 

     if(key.pressed("e") 
     { 
     //Connect the Button to a specific Block,  play a Animation 
     } 
    } 
} 

Так как подключить определенный блок к кнопке, и если я нажимаю е, играть анимацию только на конкретном блоке? Пожалуйста, имейте в виду, что я новичок в Unity. Спасибо за помощь!

+0

пожалуйста, вы можете разработать более! –

ответ

3

Я не знаю, удалось ли вам создать анимацию, поэтому я объясню с нуля. Когда в редакторе выберите свою дверь и нажмите ctrl + 6, чтобы открыть окно анимации. Отсюда вы можете анимировать свой блок. Когда вы закончите создание анимации , у вашего объекта блока будет добавлен новый скрипт: аниматор. Вы можете увидеть аниматор государственную машину в окне аниматора

Это две разные вещи:

  • Анимация: Определяет один анимации (перемещение, вращение, изменение цвета, ...)

  • Аниматор: определяет, когда происходит анимация для соответствующего игрового объекта. Аниматор может иметь переменные (например, BOOL), которые определяют, который является следующей анимации для воспроизведения

Любой объект может иметь аниматора (ваша кнопка может иметь один, чтобы двигаться, когда она нажата. You дверь может быть другой, чтобы открыть/закрыть)

Например, в вашем аниматоре кнопок у вас должно быть три состояния: Idle, Press, UnPress. Государственная пресса будет содержать анимацию «нажмите» со скоростью 1. Состояние UnPress будет содержать анимацию «пресс со скоростью -1

Затем, все еще в окне аниматора, вы создадите связи между Idle и двумя другими состояния и добавить условие запуска под названием «OnPress» (к примеру)

вы можете сделать то же самое, чтобы оживить вашу дверь

в коде кнопки, вы затем написать

public Animator Door; // In the editor, give a reference to your door. It must have an Animator script for this to work 

OnTriggerEnter(c:Collider) { 
    if(c.gameObject.tag =="Player") 
    { 
     //Text = "E to interact!" 

     if(key.pressed("e") 
     { 
      GetComponent<Animator>().SetTrigger("OnPress"); // The button's animator goes to "pressed" state 
      Door.SetTrigger("Open"); // The door's animator goes to "open" state 
     } 
    } 
} 

Тогда вы могли бы объявление d другого триггер unpress кнопки

еще одно: Когда вы говорите «Подключение кнопки к блоку», я чувствую, что вы поняли что-то: Ваша кнопка сценарий должен быть уже добавлен в блок в редакторе

Посмотрите на эти две ссылки для получения дополнительной информации по анимации:

http://docs.unity3d.com/Manual/animeditor-UsingAnimationEditor.html http://docs.unity3d.com/Manual/AnimatorWindow.html

+0

Ничего себе! Это очень длинный и приятный ответ! Спасибо! Я еще не дома, буду проверять его и отвечать, если он работает, или если у меня возникнут проблемы, спасибо! –

+0

Итак, мой скрипт Button должен быть на кнопке и блоке, который я хочу переместить (Дверь)? Потому что я хочу нажать мою кнопку InGame и хочу переместить Дверь, но Писание содержит функцию ButtonBlock. Я бы предположил, что мне нужно прикрепить сценарий к обоим из них или создать публичный игровой объект и ссылаться на него? –

+0

Я, хотя то, что вы назвали «блок», было визуальным представлением кнопки игры. Просто, чтобы быть уверенным, что я понял. У вас есть один игровой объект с 3D-сеткой, который выглядит как кнопка, и игрок может нажать на него, и у вас есть еще один игровой объект с 3D-сеткой, которая выглядит как дверь. Когда игрок нажимает «e» перед кнопкой, дверь оживляет. Это верно? –

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