Unity 5 анимационные триггеры (Javascript) - PullRequest
0 голосов
/ 30 апреля 2018

Я работаю в «Единстве 5» и пытаюсь заставить анимацию работать правильно. Когда нажимается кнопка «Fire1», то есть левый щелчок, здоровье моих врагов уменьшается до тех пор, пока оно не достигнет нуля.

Когда здоровье достигает нуля, должна воспроизводиться анимация смерти.

Ни GetComponent<animation>("Dead"), ни play.animation("Dead") не работают.

Я тоже пробовал GetComponent.<animation>("Dead").

Первый фрагмент кода не работает из-за < и >. Второй фрагмент не работает, потому что . и play (хотя я сделал переменную для него). Спасибо за любую помощь, которую вы можете предоставить. Мой код

#pragma strict

var range: float = 1.8;
var attackInterval: float = 0.7;
var meleeDamage: float = 30;
var GetComponent.<animation>("Dead");
private var nextAttack: float = 0;

function MeleeAttack()
{
    if (Time.time > nextAttack)
    { // only repeat attack after attackInterval
        nextAttack = Time.time + attackInterval;
        // get all colliders whose bounds touch the sphere
        var colls: Collider[] = Physics.OverlapSphere(transform.position, 
    range);
        for (var hit : Collider in colls)
        {
            if (hit && hit.tag == "Enemy")
            { // if the object is an enemy...
              // check the actual distance to the melee center
                var dist = Vector3.Magnitude(hit.transform.position - 
    transform.position);
                if (dist <= range)
                { // if inside the range...
                  // apply damage to the hit object
                    hit.SendMessage("ApplyDamage", meleeDamage);
                }
            }
        }
    }
}

function Update()
{
    if (Input.GetButtonDown("Fire1"))
    {
        MeleeAttack();
    }
}

var health: float = 100;

function ApplyDamage(damage: float)
{
    if (health > 0)
    { // if enemy still alive (don't kick a dead dog!)
        health -= damage; // apply the damage...
                          // <- enemy can emit some sound here with audio.Play();
        if (health <= 0)
        GetComponent.<animation>("Dead");
        { // if health has gone...
          // enemy dead: destroy it, explode it etc.
        }
    }
}

1 Ответ

0 голосов
/ 02 мая 2018

Я могу только догадываться, так как я не совсем понимаю, как вы пытаетесь получить анимацию.

Я предполагаю, что вы хотите иметь возможность перетаскивать анимацию в редакторе / инспекторе.

И я должен признать, что обычно использую C # и не могу пообещать, что приведенный здесь код будет правильным для Unityscript. Я пометил строки, где я внес изменения (CHANGE) .. Я не трогал остальную часть вашего кода, поэтому нет гарантии, что он работает после копирования вставки.

Лучше взгляните на предоставленные мной ссылки

#pragma strict

var range: float = 1.8;
var attackInterval: float = 0.7;
var meleeDamage: float = 30;

/* 
 * CHANGE 1
 *
 * https://unity3d.com/de/learn/tutorials/s/animation
 * https://docs.unity3d.com/ScriptReference/Animation.html
 */
var deadAnimation : Animation; 

private var nextAttack: float = 0;

/* 
 * CHANGE 2
 * https://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html
 * https://unity3d.com/de/learn/tutorials/topics/scripting/getcomponent
 *
 * if you drag it in via the Inspector you don't need this
 * but if you want to make it private and not drag it in via inspector 
 * than you need to get the component here
 */
function Start(){
    if(!deadAnimation){
        deadAnimation = GetComponent<Animation>();
    }
}

function MeleeAttack()
{
  ...
}

function Update()
{
  ...
}

var health: float = 100;

function ApplyDamage(damage: float)
{
    if (health > 0)
    { // if enemy still alive (don't kick a dead dog!)
        health -= damage; // apply the damage...
                          // <- enemy can emit some sound here with audio.Play();
        if (health <= 0)
        { // if health has gone...
          // enemy dead: destroy it, explode it etc.

          /*
           * CHANGE 3
           * https://docs.unity3d.com/ScriptReference/Animation.Play.html
           *
           * I assume at some point you want to play the animtion here
           */
          deadAnimation.Play
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...