スーパー空箱

ノンプログラマーの開発日誌や雑記

【Unity】モンストもどきをつくってみた その3

引き続きモンストもどき開発続行中

今回の実装

  • 矢印を引っ張った方向に伸ばす
  • 自ターン開始の条件をもう少し柔軟にする
  • 敵のダメージモーションを連続でさせるようにする
  • 雑魚敵追加
  • 発生したエフェクトを自滅させる

細かいとこ含めると色々やりました。

Web版はこちらっ

矢印を引っ張った方向に伸ばす

割と難産だったこちら、最終的には引っ張ったときのベクトルのmagnitudeと矢印のlocalscaleを同期させて実装しました

//shotVecがVector2
arrow.transform.localScale = new Vector2(0.5f,(shotVec.magnitude)/5);

最初はラジアン値から変換した角度のfloat値を使ってたけど、これだと360以上は1に戻っちゃったりしてうまくいかなくてヒィヒィいってたけど、magnitudeでやったら一瞬でした。

自ターン開始の条件をもう少し柔軟にする

ターン開始の条件は「プレイヤーのvelocityがX,Yともに0」にしていたけど、速度は動いていないようでも0.1とかで微妙に動いていたりして0になるまでの時間が長かったので、今回の実装では「X,Yともに速度が-0.05から0.05」にしました。
値の範囲をだすのはMath.Clampでだしました。これを使ってプレイヤーの速度も制限をかけてます。(早すぎるとコマ落ちみたくなって接触判定がとれなくて壁を突き抜けたりしてたので)
参考記事ojisan-puroguramu.seesaa.net

敵のダメージモーションを連続でさせるようにする

これは「ダメージモーション再生中にダメージモーション再生トリガーがオンになったとき、ダメージモーションを最初から再生しなおす」ということがやりたかったのです。
敵のモーションはmecanimでidle⇒damageのようにstateを組んであるんですが、この処理をしないと一度idleを経由しないともう一度damegeステートにいってくれないんで、連続ヒットしたときの挙動が気持ちよくないんですよね。
実装はGetCurrentAnimatorStateInfo()を使って自分のステートを取得⇒判定時にダメージモーションだったら再生時間を初期化って感じですが,,,以前友人に教わったのを参考にしたのでまだちゃんと理解はしてないですね。
コードはこんな感じ

void OnCollisionEnter2D(Collision2D col){
		AnimatorStateInfo asi = EnemyAnicon.GetCurrentAnimatorStateInfo (0);
		if (asi.nameHash == currentState) {
			EnemyAnicon.SetTrigger ("EN_damage");
		}else{
			EnemyAnicon.Play (asi.nameHash,0,0);

nameHashあたりがよくわかっていないので勉強必要。
参考記事qiita.com


いやしかしできることが日に日に増えていって脳汁でまくる!プログラムたのしぃ....