Как начать стрельбу пулями по сценарию после начала анимации стрельбы? - PullRequest
3 голосов
/ 18 апреля 2019

В редакторе аниматора у меня есть состояние с анимацией Aiming Sniper Rifle, которая анимирует стрельбу в цикле. Я не уверен, правильно ли это, но я добавил новое имя параметра Тип стрельбы bool. И добавил это как верный переход:

Animator and transition

К пуле я добавил Rigidbody и сценарий стрельбы:

Bullet

И сценарий:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooting : MonoBehaviour
{
    public GameObject projectile;

    private void Update()
    {
        GameObject bullet = Instantiate(projectile, transform.position, Quaternion.identity) as GameObject;
        bullet.GetComponent<Rigidbody>().AddForce(transform.forward * 10);
    }
}

Я хочу начать непрерывную стрельбу из пуль, как только начнется анимация стрельбы (Aiming Sniper Rifle).

Я думал, что для этого мне понадобится новый параметр съемки bool, но не знал, как использовать его со сценарием.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Как вы сказали, вы можете добавить другой параметр в аниматор, который имеет значение true, когда анимация начинается, и значение false, когда она заканчивается.Чтобы получить этот параметр в коде, вы можете использовать anim.GetBool("<name of the parameter>");, где anim - это переменная Animator, которая указывает на аниматора основного игрока.

Подробнее об этом можно прочитать здесь: https://docs.unity3d.com/ScriptReference/Animator.GetBool.html

1 голос
/ 18 апреля 2019

Это рабочее решение.

В редакторе в Animator при переходе я использую параметр съемки и установил его в false в Условиях:

Conditions

Затем в скрипте в меню «Пуск» я устанавливаю параметр в значение «true», а затем в проверке «Обновление», если это правда:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooting : MonoBehaviour
{
    public GameObject projectile;
    public Animator anim;

    private void Start()
    {
        anim.SetBool("Shooting", true);
    }

    private void Update()
    {
        if (anim.GetBool("Shooting") == true)
        {
            GameObject bullet = Instantiate(projectile, transform.position, Quaternion.identity) as GameObject;
            bullet.GetComponent<Rigidbody>().AddForce(transform.forward * 10, ForceMode.VelocityChange);
        }
    }
}

И он начинает снимать, как только начинается анимация съемки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...