日々是unity#4

毎日大体1時間、おおくて2時間しかunityにさわれない。
どれだけ濃密にこなすかがカギになってくるのだ。


今回は投射物の作成方法からだ。
弾を打つことでRubyちゃんは敵兵を倒すことができる。

と思っていたのだが、弾を打ち込むことで敵兵を治すことができるらしい。治す?
なんてことだ。
いままで敵兵に追われてる立場だと思っていたのだが、Rubyちゃんは敵兵を治すために旅をしているのか!
知らなかった。どこか見落としたか。

弾を発射するscriptは、シューティングの練習の時に触ったが、例によって覚えてないので復習だ。
自分でもできそうな所は、少し考えて打ち込み、答えを見て修正する。
もちろん、Launchとかいう初見の関数については答えガン見で行く所存

void Launch() {
GameObject projectileObject = Instantiate(projectilePrefab, rigidbody2d.position + Vector2.up * 0.5f, Quaternion.identity);
Projectile projectile = projectileObject.GetComponent<Projectile>(); projectile.Launch(lookDirection, 300);
animator.SetTrigger("Launch");
}

projectileとProjectileとprojectileObjectとかprojectilePrefabとか、projectileがかぶりすぎて、こんがらがってしまった。
Rubyちゃんがキーを押したときに、projectileを読み込み、それを召喚してprojectileのscript内のLaunchを起動して、弾に力を込めて打ち出す!
みたいな感じのことが書かれている。多分。

そして敵兵に当たった場合、敵兵は動きを止めて当たり判定をなくす処理を書き、修理された敵兵のアニメーションを作成すればステップクリアである。
アニメーションの前に、本当に動くかどうかを確かめてみると。

弾が動かない?!敵兵がなぜか動かなくなっている?!

敵兵が動かなくなっていたのはかなり初歩的なミスで、クラス名をスペルミスしていた。
Enemyと書かなければいけないところEmemyと打っていた。
なぜ昨日は動いたんだ…?

そして弾である。
null参照元を見るとprojectileScriptのこの部分。

public void Launch(Vector2 direction, float force)
{
rigidbody2d.AddForce(direction * force);
}

この部分である。
弾は描写されたのでRubyController側には問題はないはずだ。
しかしここを参照されたということは、どういうことだ?
ちゃんと文章を読み、Start関数をAwake関数に書き換えているはずだが。

ここで30分ほど費やし、時間切れが来てしまった……
寝る時間が差し迫っているので仕方ない。noteを更新して終わろうとしていたところ。

おわかりいただけるだろうか?

これはnote編集中に何を間違っていたのか復習しながら撮影したスクショだ。
これを見ている先輩方はもうお分かりだろう。

私は"Awake"を"Awaket"と書いていたのだ!

最初は"t"が画面のごみにしか見えなかったが、よくみると"t"が入ってるではないか!
見つけたときはうれしかった半面、膝から崩れ落ちるかと思うほど落胆した。
な、なんて初歩的なミスを!!!!

明日は敵兵の被弾アニメーションから始めるとしよう


独り言
毎日unityのことを書いてるので、本来noteに書こうと思っていた筋トレ日記がおろそかになってしまった。
昨日、恒例のジムトレをおこなった。
ようやく胸への効かせ方を理解した気がする。
今日は、一日中いい感じに胸の疲労があった。非常に気分が良い。

この記事が気に入ったらサポートをしてみませんか?