【Unity2D 入門】横スクロールアクションゲームを作ってみたい -攻撃アクションを作る2回目
さてさて、長い道のりでかなり苦戦しましたが2回目です。
前回で別々の挙動として
・プレイヤーが口を開ける
・炎が横に飛ぶ
という所までできたのですが、これを連結したいのです。
処理フローは以下の通り
- 攻撃時口を開ける(これは前回までにつくりました)
- 口元に炎のオブジェクトを生成
- キャラクターの方向から飛ばす方向を決める
- 敵にぶつかったら炎は消えて、敵はダメージを受ける
というかんじです。
攻撃時口元に炎オブジェクトを生成する
playermove.cs
差分で+が付いている所が追加行何ですけどわかりにくかったらすいません
だんだんスクリプトが巨大になってきて全文貼付けるのが億劫になってきたのです!ww
public GameObject firePrefabにはまだ何もアタッチされていませんのでfirePrefabをアタッチしておきましょう
これで生成できるのですが、プレハブ側にsetDirectionメソッドが存在しないので、まだエラーになると思います。
moveattack.cs
なんかちょっとスマートじゃないスクリプトができあがりました。
updateに直接SendMessageができないのでsetDirection経由でupdateに渡しています。
これで大体いいでしょう、エミュレートしてみましょう
いいよいいよー!炎くちからでてるよー!
でもまだ敵に当たってもすり抜けると思います。
firePrefabにColliderが入ってないからですね。追加します。
さぁこれで敵にぶつかるようになりましたか?
# な ら な い !
しかも、、、
プレイヤーが攻撃した瞬間に飛びやがった!!まだジャンプは実装してないのにおかしいですね。
おそらく生成した瞬間にplayobjectとぶつかってplayrが移動してしまっている!?の?だれか偉い人教えてください。
ただこのままではいけないので炎オブジェクトはplayerとぶつかっても当たり判定を無視するようにしないと行けません。
色々調べたらなるほどisTriggerでなんとかできそうです。
playerオブジェクトとfireオブジェクトのCircleCollider 2DコンポーネントのisTriggerにチェックを入れます。
これで飛ばなくなったハズ!!!
よしよし、いいかんじです。ただまだmobにぶつからないですり抜けて行きますね。
mobにはRigidBodyが無いのでplayerとは反対に不本意にすり抜けている見たいです。
敵とぶつかったら炎を消す
fire.csにこれを追加します
これで敵にぶつかったらfireオブジェクトが消えるようになりました
敵とぶつかったら敵がダメージをくらいHPが0になったら敵が消える
mob_damage.csを作成して
(それにしてもPHPのネーミングルールとUnityのネーミングルールがごっちゃになってきた。。どこかで統一したい所ですね(汗))
playerとのダメージ処理を改造してmob用のダメージ処理をつくってみました。
これをmobプレハブにアタッチします。
さぁ!エミュレートだ!!
スクショをとるのが大変かんじですがとれました!
いいですね!とりあえず3発当たると敵が消えるようにしておきました。てきが点滅してるあいだ0.5秒は無敵にしています。
今回で攻撃アクションを作るという目的は果たされたと思います。ながかった。。
感想
ここまでつくって来て大分Unity2Dの作成になれてきました。
入門編が終わり、そろそろ初級編と行ったところでしょうか?
次回は鬼門!?ジャンプ処理を作りたいと思います。重力操作があるから前にやったときは挫折したんですよね(汗)
参考記事
http://www.geocities.jp/gamekaisetsu/unity/company4.html