Unity1week(お題:つながる)に参加しつつあります、三日目
S~A~K~E~~~♪
兼業ソロモン王(新米)のneoacoです。
マイクラで彷徨いまくってようやく見つけたジャングルバイオーム、ベッドを壊した後に水中で溺死ゾンビにボコボコにされ、すべてを失った上にはるか遠い初期リスポン地に帰ってきたという悲しみを背負いつつ今日もUnity1weekの作業をしました。
1.敵にアニメーションを付ける
アニメーションのことはよくわかってないのですが、いつもなんか雰囲気でどうにかしています。
敵がじっとしていると面白くないですよね。
まず敵にColliderをつけて、プレイヤーとぶつかってもいいようにTriggerにします。
"enemy"のタグをつけるのも忘れずに。
作るアニメーションは
- 持ち場でウロウロしている状態
- 爆発前の点滅している状態
- 爆発と昇天
- 何かの時のための待機状態
爆発はまだ絵が足りないので、残りの三つをまず作ります。
すでにプレハブ化していたので、プレハブを開いた状態でアニメーションを付けます。
これ便利だな……ほかのオブジェクトに邪魔されずにアニメーションだけ付けられるじゃん……
左右にウロウロするのと点滅しているのを作って、ウロウロしている状態のアニメーションをデフォルトにセット。
そこから点滅への矢印を付けて、そこにboolをセット。
この遷移の時はバッと変わってほしいのでExit timeのチェックを外しておくといいらしいとの噂です。まちがってたらごめんぬ。
ぜんぶやると、画像のような感じになります。
2.ゴーストキャッチ
さて、敵の実装ができたので、次はプレイヤーが「つかまえる」行動を作りますよ。
いろいろ考えたけど、「つかまえる」「なげる」の二段階で、「つかまえる」は体当たりのみでできるようにすることにします。
敵はTriggerにしたので、プレイヤーのスクリプトに追記をするのはこんな感じ。
(PlayerCtrlに追記) void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.tag == "enemy") { // 捕まえたことを相手に送信 collision.gameObject.SendMessage("GetSet"); } }
メッセージを送られたからには敵側で受け取らねばならぬ。
(enemyCtrlを作って追記) // Start is called before the first frame update void Start(){ enemyAnim = GetComponent<Animator>(); } void GetSet() { // 点滅アニメーションを始める enemyAnim.SetBool("beSet",true); }
これを敵のプレハブへ追加すれば、プレイヤーが触ると点滅するようになる。
3.ついでにカメラを制御する
カメラがプレイヤーについて回ってほしいので、
(PlayerCtrlに追記) using UnityEngine.UI; [SerializeField] Camera MainCamera; Vector3 CameraPosition; void Start(){ // 追記 CameraPosition = new Vector3(0,0,-10); } void Update(){ // 追記 // カメラを追従させる if (this.gameObject.transform.localPosition.x > 0f) { CameraPosition.x = this.gameObject.transform.localPosition.x; MainCamera.gameObject.transform.localPosition = CameraPosition; } }
これで、スタート地点よりは左に行かないけど、右にはずんずん行けるというカメラワークになります。よしよし。
どう考えても間に合うペースじゃないんですが、なぁに、大丈夫、こっちにはまだ土曜日がある(油断)
明日こそ頑張ります。