「Unity/3d/アニメーション」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→キーボード入力でアニメーションを追加) |
(→途中で遷移) |
||
| 行58: | 行58: | ||
Apply Root Motionにチェックを入れる | Apply Root Motionにチェックを入れる | ||
| − | == | + | ==アクション途中で遷移== |
Transition/InspectorのHas Exit Timeを外す | Transition/InspectorのHas Exit Timeを外す | ||
| + | |||
| + | ==オブジェクト接触判定== | ||
| + | #PlayerのGameObjectのInspectorのTagにPlayerを追加 | ||
| + | #敵オブジェクトにAddComponentでBoxColliderを追加 | ||
| + | #的オブジェクトにAddComponentでRigidbodyを追加(Rigidbodyは境目が動いた時にOnCollisionEnterが実行されるので追加) | ||
| + | #csに以下のようにOnCollisionEnterを追加 | ||
| + | |||
| + | <pre> | ||
| + | public class EnemyController : MonoBehaviour | ||
| + | { | ||
| + | Animator animator; | ||
| + | BoxCollider boxCollider; | ||
| + | void Start() | ||
| + | { | ||
| + | animator = GetComponent<Animator>(); | ||
| + | boxCollider = GetComponent<BoxCollider>(); | ||
| + | } | ||
| + | private void OnCollisionEnter(Collision collision) | ||
| + | { | ||
| + | if (collision.gameObject.tag == "Player") | ||
| + | { | ||
| + | StartCoroutine(AttackTimer()); | ||
| + | } | ||
| + | } | ||
| + | IEnumerator AttackTimer() | ||
| + | { | ||
| + | animator.SetTrigger("Attack"); | ||
| + | yield return new WaitForSeconds(1); | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
2020年6月8日 (月) 16:18時点における版
人型アセットのDL
- 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
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/
キーボード入力でアニメーションを追加
- 上で作った、ZonbieAnimatorControllerにZ_Attackを追加
- parameterにtriggerのAttackを設定する
- Z_IdolでMakeTransitionからZ_AttackへプロパティAttackを設定する
- 以下を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を外す
オブジェクト接触判定
- PlayerのGameObjectのInspectorのTagにPlayerを追加
- 敵オブジェクトにAddComponentでBoxColliderを追加
- 的オブジェクトにAddComponentでRigidbodyを追加(Rigidbodyは境目が動いた時にOnCollisionEnterが実行されるので追加)
- csに以下のようにOnCollisionEnterを追加
public class EnemyController : MonoBehaviour
{
Animator animator;
BoxCollider boxCollider;
void Start()
{
animator = GetComponent<Animator>();
boxCollider = GetComponent<BoxCollider>();
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Player")
{
StartCoroutine(AttackTimer());
}
}
IEnumerator AttackTimer()
{
animator.SetTrigger("Attack");
yield return new WaitForSeconds(1);
}
}
