|
|
(同じ利用者による、間の6版が非表示) |
行1: |
行1: |
− | ==人型アセットのDL==
| + | [[Unity/3d/アニメーション/基本]] |
− | #AssetStoreからZonbie ( https://assetstore.unity.com/packages/3d/characters/humanoids/zombie-30232?locale=ja-JP ) をダウンロード
| + | |
− | #それをimport
| + | |
− | #PrefubからZonbie1をヒエラルキーにドラッグ
| + | |
− | #Assetsの下にAnimetionsのdirを作成しCreate/AnimatorControllerを作成
| + | |
− | #例として、ZonbieAnimatorControllerとして作成
| + | |
− | #Zonbie1のanimetorにPrefubのAnimattionsのZonbie~を全てZonbieAnimatorController上へドラッグして入れる
| + | |
− | #defaultをZ_Idolを設定
| + | |
− | #parameterにfloatのSpeedを設定する
| + | |
− | #Z_IdolでMakeTransitionからZ_WalkへSpeed>0.1で設定する
| + | |
− | #zonbieオブジェクトに以下csをアタッチする
| + | |
| | | |
− | ZonbieController.cs
| + | [[Unity/3d/アニメーション/追跡]] |
− | <pre>
| + | |
− | 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);
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |
| | | |
− | | + | [[Unity/3d/アニメーション/ダメージ]] |
− | 参考:https://unity.moon-bear.com/zombie-slayer/enemy-animation/
| + | |
− | | + | |
− | ==キーボード入力でアニメーションを追加==
| + | |
− | #上で作った、ZonbieAnimatorControllerにZ_Attackを追加
| + | |
− | #parameterにtriggerのAttackを設定する
| + | |
− | #Z_IdolでMakeTransitionからZ_AttackへプロパティAttackを設定する
| + | |
− | #以下をcsへ追加
| + | |
− | | + | |
− | <pre>
| + | |
− | void Update()
| + | |
− | {
| + | |
− | if (Input.GetKey(KeyCode.Space))
| + | |
− | {
| + | |
− | animator.SetTrigger("Attack");
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |
− | スペースを押した時に攻撃モーションが表示される。
| + | |
− | | + | |
− | ===他キーボード===
| + | |
− | 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を外す
| + | |
− | | + | |
− | ==オブジェクト接触判定==
| + | |
− | #PlayerのGameObjectのInspectorのTagにPlayerを追加
| + | |
− | #敵オブジェクトにAddComponentでCupsuleColliderを追加
| + | |
− | #的オブジェクトにAddComponentでRigidbodyを追加(Rigidbodyは境目が動いた時にOnCollisionEnterが実行されるので追加)
| + | |
− | #csに以下のようにOnCollisionEnterを追加
| + | |
− | | + | |
− | <pre>
| + | |
− | public class EnemyController : MonoBehaviour
| + | |
− | {
| + | |
− | Animator animator;
| + | |
− | CupsuleCollider collider;
| + | |
− | void Start()
| + | |
− | {
| + | |
− | animator = GetComponent<Animator>();
| + | |
− | collider = GetComponent<CupsuleCollider>();
| + | |
− | }
| + | |
− | private void OnCollisionEnter(Collision collision)
| + | |
− | {
| + | |
− | if (collision.gameObject.tag == "Player")
| + | |
− | {
| + | |
− | StartCoroutine(AttackTimer());
| + | |
− | }
| + | |
− | }
| + | |
− | IEnumerator AttackTimer()
| + | |
− | {
| + | |
− | animator.SetTrigger("Attack");
| + | |
− | yield return new WaitForSeconds(1);
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |