どもです、としです。
明日から忙しいのでそろそろ更新ペースが落ちるはずです。
(前回はコチラ)
昨日の段階でとりあえずゲームクリアまでは作れましたが、
敵がいないので面白くないです。
今日の行ったステップで敵を作るそうなので、ちょっとは面白くなるかと思います。
(今日やったステップ)
ジョンレモンくんを止まって探すガーゴイルくんを作るステップだそうです。
始めのステップはジョンレモンくんと一緒でキャラモデルをHierarchyに配置して、
PrefabにしてPrefabにColliderを設定してと前にやった内容です。
ここでもし、Collider無しならどうなるかを試してみました。
すり抜けます。オブジェクトの判定がないので当たり前です。
こう見るとColliderがその辺の役割を全部やっているのがわかります。
Colliderがあるとオブジェクト判定ができてそれを使って物理演算を行うんですね。
ただ、OnTriggerにチェックが入っているとオブジェクト判定はあるもののすり抜けます。
でも、何もなしとは違って入った、出たというフラグを立てる事ができるので判定に使う感じです。
このチュートリアルでも使っていますし、大体使うみたいなのでマスターはしないとなぁ。
という事でガーゴイルくんを仕上げていくのですが、ガーゴイルくんにはジョンレモンくんを見つけた判定用のColliderも作るみたいです。
ガーゴイルくん本体に通れないようにするためのCollider、
持っているライトのPointOfViewオブジェクトにトリガーのColliderが設定しました。
Colliderは同じオブジェクトのInspectorに複数設定できるみたいですが、
なんかエラーが出そうな気がするのでやってもいいかダメなのかはちゃんと調べてから結論を出したいです。
たぶんややこしくなるのでやらない方がよさそうですけど。
アニメーションも設定しましたが簡単だったので割愛します。
この後はガーゴイルくんとジョンレモンくんの判定を決めるスクリプトを書きました。
ガーゴイルくん用のスクリプトをPointOfViewに紐づけしてそれから作成し始めました。
OnTriggerEnther、OnTriggerExitで作ったブール変数に入った出たの判定を作り、
Update関数で判定処理を行う感じでした。
判定の時にRayやRayCastなるものが出てきましたがまったくやったことがなかったので調べると、
光線を出して当たったもののオブジェクト情報を取得する関数だそうです。
ロックオンとかそういうのに使えそうな気がしますが、ここでは光線をプレイヤーに当てて判定するので使っているみたいです。
光線がプレイヤーに当たった処理まで書いたあと、ゲームオーバー処理のために前のステップで書いたGameEndingスクリプトを書き直しました。
GameEndingの処理をそのまま使うみたいで、
新しくゲームオーバー用のフラグとCanvasGroupを作って
引数を使って処理を分けるようにしました。
またリスタートのためにSceneManagementの追加もしています。
ここで新しくゲームオーバーのフラグを立てるpublic関数のCaughtPlayerを作ったので、ガーゴイルくんの最後の処理部分で呼び出すように書きました。
ところがここで先ほど作ったCaughtPlayerが見つかりませんとエラーが出てきました。
しばらくオブジェクトの割り当てなどをして悩んだ結果、原因が構文ミスで初めのpublic変数gameEndingの型が間違っていました。
よく見ると型がGameObjectになっています。
これではCaughtPlayer関数は呼び出せないので、さっと修正しました。
で、スクリプトも直ったので早速テストプレイをやってみました。
直したはずなのに反応しません。
なんかエラーもいっぱい出ているよー。
ここでまたバグチェックですが、スクリプトは何度見ても問題はありませんでした。
エラーを見るとgameEndingがないよーないよーって出していたので、よく見直すとオブジェクトの引数設定ができていませんでした。
画像の右のGameEndingがnoneになっています。
ミスった原因はさっきの構文ミスを直している時に先にオブジェクト設定してし終わった気になっていて、
構文ミスを直した時にGameEndingが初期化されたのを見逃しただけでした。
という事で改めてGameEndingを設定して再度テストプレイを行いました。
無事このステップの作業は完了しました。
次のステップは動くゴーストくんの方の作成を行うみたいですが、
明日以降しばらく時間が限られそうなので次の更新はちょっと間が開くかもしれません。
早起きすれば何とかなるかもしれませんが、体力と相談します。
という事で今日はこれにて!
では!