Я новичок в Unity и начинающий программист. Я экспериментировал с графическим интерфейсом Unity (холст, кнопка, ярлык и т. Д.).Как воздерживаться от ввода кнопки до тех пор, пока анимация не закончит игру в единстве 5?
Для кнопки я создал класс ButtonClickScript, так что, когда я постучал по кнопке, переменная waterBucketAmnt увеличилась бы до достижения 3. Затем я решил немного поэкспериментировать, поэтому я создал очень простой анимация парня, сбрасывающего ведро с водой. Я хотел ограничить количество раз, когда парень мог сбросить воду с помощью waterBucketAmnt.
Я могу нажать кнопку GUI 3 раза, и все работает нормально. int waterBucketAmnt = 3. Затем я запускаю игру и нажимаю настроенное действие «Fire3» на клавиатуре, и оно выполняется точно так, как ожидалось. Проблема в том, что я могу нажимать действие «Fire3» последовательно менее чем за секунду, поэтому waterBucketAmnt = 0 и анимация воспроизводится только один раз. Как я могу отложить ввод до завершения анимации?
using UnityEngine;
using System.Collections;
public class waterBucketAction : MonoBehavior {
Animator waterAnim;
// a simple player controller using unity's RigidBody2D feature. I added PlayerControllerScript so that I could make sure the player had to remain on the ground in order to dump the bucket of water. checkGround is so that I could inherit the grounded gameObject I created.
PlayerControllerScript checkGround;
public ButtonClickScript checkWaterAmnt;
void Start() {
checkGround = FindObjectOfType <playerControllerScript>();
waterAnim = GetComponent<Animator>();
}
void FixedUpdate() {
waterAnim.SetBool ("isPlaying", false);
if (checkWaterAmnt.waterBucketAmnt > 0 && !waterAnim.GetCurrentAnimatorStateInfo(0).IsName("waterBucketAnimation")) {
if (checkGround.grounded == true && Input.GetButtonDown ("Fire3")) {
waterAnim.SetBool("isPlaying", true);
//I need to wait for the animation to complete or delay the input. I searched multiple places and the best answer I could find was Animation.IsAnimating, but that seems to be deprecated? The API says that Animator replaced Animation, but I couldn't find an equivalent method.
if(waterAnim.GetCurrentAnimatorStateInfo(0).IsName("waterBucketAnimation"))
checkWaterAmnt.waterBucketAmnt -=1;
}
}
yes stateinfo - правильный путь – LumbusterTick
Поэтому я отложил его с помощью StateInfo; однако я понятия не имею, почему это работает. Мой код должен быть обновлен до того, что у меня есть сейчас. По какой-то причине мне пришлось использовать StateInfo дважды. Я не понимаю, почему это так, но я попытался удалить один, и я все еще мог бы отвлечь waterAmnt, щелкнув мышью 3 раза, пока анимация воспроизводилась один раз. Я чувствую, что моя программа очень неэффективна, но на данный момент это не имеет большого значения. Есть идеи о том, почему работает мой код? – QuirkyCoder
Что вы подразумеваете под «использованием StateInfo дважды»? Не могли бы вы показать обновленный код? Также, если это решит вашу проблему, пожалуйста, пометьте ответ как правильный. Благодарю. – Agustin0987