週報 12/24 Unityとの格闘記録 (Pixiv Fanbox)
Videos
-
無題の動画 ‐ Clipchampで作成.mp4
Downloads
Content
この週報はゲーム制作素人がUnityで同人エロゲ🔞を作ろうとするさまの記録です。
初心者の方の励ましに、暇な方の暇つぶしになれば幸いです。
目次
今週の進捗
覚え書き
雑記
今週の進捗
今週もプログラミングでバトルパートを作成しておりました。
見栄え的にはあまり変わりませんが。
で、今回はちょっとUnityのことでがっつり書きますので興味ない方には読み飛ばしてください。
その前に、先週、プログラミングのメモ書きはちゃんと書こうって記事を書きましたね。
せめて考えてから書け。
覚え書き
さて、今回こっちがメインです。
※注意 あくまで仕事でプログラミング経験のない半年さわっただけの素人の解釈です。間違い等あると思いますので、もしありましたらご指摘よろしくお願いします。
・Unityで加算したシーンのオブジェクト座標を取得しようとした話。
現在、HA〇ESのようなローグライトアクションを作ろうと奮闘しているんですが、その時のステージの読み込みを加算シーンで行おうとしてみました。
加算シーンについては下の記事など参照↓
ステージの遷移であればシーンをまたぐオブジェクト(マネージャー系のものとか)をシングルトンにしてする方法などがあるのですが、考えている仕様ではアドベンチャーパートとバトルパートで仕様を分けているため使わないものも多く、シングルトンやstaticはちょっと都合が悪いと思いました。
DontDestroyOnloadが非推奨なのもそうですが、一度生成されるとメモリを確保し続けてしまう上に動的にメモリを開放する方法も調べた限りなさそうだったので違う方法として加算シーンをとることにしました。
ベースとして使うマネージャーやプレイヤーが置かれた共通シーンに、それぞれステージとなるシーンを配置する方法です。
そのステージをクリアしたらクリアしたステージを破棄、そして新しいステージを読み込むといった感じです。
これ自体はそんなに難しくなく、Unity側でメソッドが用意されているため、それを導入すればよかったんですが……
プレイヤーの位置を読み込んだシーンのスタート位置にワープさせられない
イメージとしてはRPGゲームで家の扉を開けたら暗転して、部屋の中に場面が移ってキャラクターが家の玄関内にいる感じですね。
それをやろうとして
シーン読み込み
↓
読み込んだシーンのスタートポイントのオブジェクト座標を取得
↓
その座標をプレイヤー座標に代入
という方法でプレイヤー座標をワープさせようとしたんですが、なぜかこれがうまくいきませんでした。
理由なんですがシーン読み込みが完了の判定が出ていても、オブジェクトがそれより後に生成されていることでオブジェクト座標がnullになってしまっていることでした(どういうことなの…)。
なので今これを読んでいて、シーンロード完了のデリゲート使えばいいんじゃ?と思った方、今回はその方法ではうまくいきませんでした。
オブジェクトがデリゲートのコールバックより後に生成されているという事は、メソッドの実行順序を1つのマネージャーのAwakeでまとめてやらせたとしてもシーン読み込みが入ることで実行順が安定しないため、メソッド実行順がばらばらになるという事態が発生します。
まとめるとシーンロード時に読み込みラグが発生するためメソッドが設定順で実行されないせいでうまく動作しないとなりました。
解決方法としては処理に遅れが発生している箇所を特定して、その処理が完了してから次のメソッドが実行されるようにコルーチンなどで処理を遅らせるという方法を取りました。
まあもちろん、いきなりその答えにはたどり着かなかったので相当悩みましたが。
こんな感じでエラー箇所特定してた。
結果的には、Invokeメソッドを使ってスタート座標のオブジェクトの検索を0.1秒遅らせることでこれに対応することが出来ました
ちゃんとステージ切り替わりってからプレイヤーが指定位置に飛ぶようになりました。
もし同じようなことしようとしている方がいればぜひ参考までに。
雑記
Twitterのフォロワーが7000人を突破しました。
年内はいかないだろうと思っていたので非常にうれしいです。
これもひとえにみなさんの応援のおかげです。ありがとうございます。
これからもケモおねショタをガンガン皆様にぶつけていくのでよろしくお願いいたします。