前回 はとにかくBlockを消して出現するようにしてみましたが、
今回は少しアニメーションするようにしてみます。
ポイント
- Animationを作成する
- AnimatorでBlockのAnimationを管理する
- Scriptで穴あけビームが当たったらAnimatorの状態を遷移させる
Animationを作成する
まず Hierarchy の BlockPrefab -> Cube を選択しておきます。
次に Window → Animation として、Animation編集画面を表示します。
そのAnimation Windowで 「Add Curve」を押すとファイル名を決めるダイアログが表示されるので
BlockAnimationとでもしておきます。
ここで保存すると先ほど選んだ Cubeに対して、Animator Componentと今保存した BlockAnimationがStateと共に関連付けられるようです(後で少しいじります)。
もう一度、[Add Curve] を押して、 Transform -> Scale (の右側の+)を選びます。
ここで時間毎の形状についてのいろいろな値の変化を指定することができます。
下の方の Curvesをクリックして、 1秒後にScaleが x,y,z全て0になるようにしてみます。
また、4秒後と10秒後にKeyFrameを追加して、4秒後から10秒後にかけてゆっくりScaleを戻すようにしてみます。
AnimationのWindowの操作は私はよくわかってないので見よう見まねです。。。(いずれはUnityちゃんの動作もここで頑張って作るのだろうか。AssetStore探索の旅はまだ成果ないですし。。)
とりあえず Scaleについて x,y,z ともに下記のような変化をするように設定してみます。
AnimatorでBlockのAnimationを管理する
次に、Animatorタブを開くと以下のようになっています。
一つ「Normal」というStateを作成し、そのNormalを右クリックして「Set As Default(初期状態)」しておきます。
また、BlockAnimationからNormalに対してTransitionを作ります。
そのTransitionを選択して、 Transition Duration や Exit Time を 0 に設定します。
こうしておくと、BlockAnimationに遷移したら1度Animationが再生され、
その後またNormalに戻るようになります。
Scriptで穴あけビームが当たったらAnimatorの状態を遷移させる
BlockControl.csのHitGun
メソッドを以下の1行に置き換えます。
using UnityEngine;
using System.Collections;
public class BlockControl : MonoBehaviour {
private Animator animator;
// Use this for initialization
void Start () {
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
}
void HitGun() {
animator.Play("BlockAnimation");
}
}
これで実行すると、穴を開けたら小さくなって消滅し、しばらくしたら復元するようになります。
さいごに
無いよりはマシ程度のアニメーションがつくようになりました。