
先日Unityで順番にアニメーションを再生するステージを作成していました。
その時、1つのアニメーションを再生すると、同じアニメーションを追加しているオブジェクトがすべて再生されてしまいました。
そこで今回は、同じアニメーションを別々のタイミングで再生する方法を紹介します。
はじめに
私ははじめ、以下のようなコードを使っていました。
using UnityEngine;
using System.Collections;
public class EnemyAnim : MonoBehaviour {
GameObject[] PinchObj;
public bool Late;
public string EnemyTrigger;
void Start(){
PinchObj = GameObject.FIndGameObjectsWithTag(“PinchEnemy”);
}
void Update(){
if (Late) {
if (EnemyTrigger == "Late") {
foreach(GameObject pinchObj in PinchObj){
pinchObj.GetComponent ().SetTrigger ("Pinch”);
}
}
}
}
}
ですが、これだとすべてのアニメーションが同じタイミングで再生されてしまいます。
そこでコードを書き換えてそれぞれのタイミングで、アニメーションが再生できるようにしてみようと思います。
ちなみに今回の方法をするだけで、以下のような動作を作成することができるようになります。
コードを編集
アニメーションを順番に再生する時に、私がとった方法は「オブジェクトにコライダーを追加し、プレイヤーが接触したらアニメーションを再生」するというものです。
コライダーに接触したら再生するようにしたので、先ほどのコードを以下のように変更してみました。
using UnityEngine;
using System.Collections;
public class EnemyAnim : MonoBehaviour {
bool Late;
public bool Pinch;
public string EnemyTrigger;
void Update(){
if (Late) {
if (EnemyTrigger == "Late") {
this.GetComponent ().SetTrigger ("Pinch");
}
}
}
void OnTriggerEnter2D(Collider2D col){
if(Pinch){
if(col.gameObject.name == “Player”){
Late = true;
col = null;
}
}
}
}
OnTriggerEnter2Dが増えていたり、GameObject[] がなくなっていたりと、多少変化がありますが、最も重要なのが以下の部分です。
this.GetComponent().SetTrigger(“Pinch”)
ここをthis.にすることでオブジェクトごとに、アニメーションの再生タイミングを変更することができるようになります。
まとめ
今回のようなコードを書くことで、プレイヤーが近づいたらアニメーションを再生するという処理ができました。
アクションゲームを作りたい時に、異なったタイミングで動作させることができると、作れるステージの幅が広がります。
今回の方法だけでなく、いろいろな使い方を試してみるのもいいと思います。
ぜひやってみてください。
【Unity】AutoSaveを使えば自動で保存できる!Unityが落ちても安心だった! - クリアメモリ
ではまた。