facebook twitter hatena line email

Unity/3d/アニメーション/基本

提供: 初心者エンジニアの簡易メモ
2020年6月9日 (火) 03:14時点におけるAdmin (トーク | 投稿記録)による版 (人型アセットのDL)

移動: 案内検索

人型アセット動作

  1. AssetStoreからZonbie ( https://assetstore.unity.com/packages/3d/characters/humanoids/zombie-30232?locale=ja-JP ) をダウンロード
  2. それをimport
  3. PrefubからZonbie1をヒエラルキーにドラッグ
  4. Assetsの下にAnimetionsのdirを作成しCreate/AnimatorControllerを作成
  5. 例として、ZonbieAnimatorControllerとして作成
  6. Zonbie1のanimetorにPrefubのAnimattionsのZonbie~を全てZonbieAnimatorController上へドラッグして入れる
  7. defaultをZ_Idolを設定
  8. parameterにfloatのSpeedを設定する
  9. Z_IdolでMakeTransitionからZ_WalkへSpeed>0.1で設定する
  10. zonbieオブジェクトに以下csをアタッチする

ZonbieController.cs

using UnityEngine.AI;
[RequireComponent(typeof(Animator))]
public class EnemyController : MonoBehaviour
{
    Animator animator;
    void Start()
    {
        animator = GetComponent<Animator>();
    }
    void Update()
    {
        animator.SetFloat("Speed", 0.2f, 0.1f, Time.deltaTime);
    }
}


参考:https://unity.moon-bear.com/zombie-slayer/enemy-animation/

キーボード入力でアニメーションを追加

  1. 上で作った、ZonbieAnimatorControllerにZ_Attackを追加
  2. parameterにtriggerのAttackを設定する
  3. Z_IdolでMakeTransitionからZ_AttackへプロパティAttackを設定する
  4. 以下をcsへ追加
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            animator.SetTrigger("Attack");
        }
    }

スペースを押した時に攻撃モーションが表示される。

他キーボード

       if (Input.GetKey(KeyCode.UpArrow)) {
       } else if (Input.GetKey(KeyCode.UpArrow)) {
       } else if (Input.GetKey(KeyCode.LeftArrow)) {
       } else if (Input.GetKey(KeyCode.RightArrow)) {

動作を全体座標に適用

Apply Root Motionにチェックを入れる

アクション途中で遷移

Transition/InspectorのHas Exit Timeを外す

オブジェクト接触判定

  1. PlayerのGameObjectのInspectorのTagにPlayerを追加
  2. 敵オブジェクトにAddComponentでCapsuleColliderを追加
  3. 的オブジェクトにAddComponentでRigidbodyを追加
  4. csに以下のようにOnCollisionEnterを追加
public class EnemyController : MonoBehaviour
{
    Animator animator;
    CapsuleCollider collider;
    void Start()
    {
        animator = GetComponent<Animator>();
        collider = GetComponent<CapsuleCollider>();
    }
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            StartCoroutine(AttackTimer());
        }
    }
    IEnumerator AttackTimer()
    {
        animator.SetTrigger("Attack");
        yield return new WaitForSeconds(1);
    }
}

OnCollisionEnterは衝突時に実行される(オブジェクトが停止すると以降、実行されない)