こんにちは、Unity勉強中のみやびのです。
Unity勉強中にいろいろトラブルに出くわしているのでこちらに問題と解決方法を記していきます。
まだ勉強を始めたばかりなので少ないですが、トラブルに出くわしたら順次追加予定。
未解決の問題も載っけています。
警告・エラーの解決
警告とエラーの解決方法についてまとめています。
警告は解決しなくても動くことがほとんどですが、たくさん出ると煩わしいので解決できるものは解決した方がよいです。
影響が少ないと思われるものはcsc.rspで非表示にしておきましょう。
[SerializeField] 定義行にCS0649という警告が発生
現象:コンソールに「CS0649」という警告が大量に表示される。動作上は問題なし
原因:[SerializeField]に値が設定されていないと出る模様
対策:csc.rspファイルを作成してCS0649を無効化するコードを記述
-nowarn:0649
応急処置ですが、警告の影響は少ないですし、数も多いのでエラーの非表示に留めました。ダウンロードしたAssetをいちいち直すのも手間ですし。
他にもいくつか解決方法があります。以下の記事を参考にしてください。
【Qiita】[SerializeField] 属性をつけていると、CS0649警告が出るようになった。消したい。
Application.loadlevelを使用行でCS0618という警告が発生
現象:コンソールに「CS0618」という警告が大量に表示される。動作上は問題なし
原因:Application.loadlevelの仕様が現在非推奨。
対策:Application.loadlevelの代わりにSceneManager.LoadSceneを使用
Unityゲーム制作中のトラブル
Prefabで複製すると敵が瞬間移動する
現象:複製後に既存の敵が瞬間移動する。
原因:RIGにパラメータを設定すべきところをオブジェクトの親ディレクトリ(Slime_blue)に設定していた
対策:RIGに設定したところ正しく動いた。
Slime_blueでもサイズが変更できるので間違えるとハマりやすいですね。
エラーも出ないので原因特定が困難。
関連記事>>【プログラミング】ミスを見逃さないパラメータチェック方法
複数NavMeshAgentがある場合に正しく動作しない
現象:複数のNavMeshAgentがある場合にAIがめちゃくちゃな動きになる
原因:「Prefabで複製すると敵が瞬間移動する」と同件。RIGにパラメータを設定すべきところをオブジェクトの親ディレクトリ(Slime_blue)に設定していた
対策:RIGに設定したところ正しく動いた。
理由はよくわからないですがオブジェクトのサイズを大きくするとNavMeshAgent同士で競合が起きる模様。
サイズを変えたいだけの場合はRIGを変更しましょう。
参考書の内容とパラメータが全然違う
現象:参考書の通りに書いても正しく動作しない。
原因:「Prefabで複製すると敵が瞬間移動する」と同件。RIGにパラメータを設定すべきところをオブジェクトの親ディレクトリ(Slime_blue)に設定していた
対策:RIGに設定したところ正しく動いた。
Slime_blueのパラメータをいじるとコライダーなどのパラメータも影響を受ける模様。
サイズを変えたいだけの場合はRIGで変更しないとだめなようです。
キャラクターがうまくいかないときに見直すこと
・ソースコードでエラーが出ていないか?
・キャラクターにアニメーションやソースコードをセットできているか?
・パラメータの設定漏れはないか?
・bakeはしたか?
Prefab化など、オブジェクトを移動や変更をするとパラメータが外れる場合があるので注意が必要です。
当たり判定がうまく動作しないときに見直すこと
・ソースコードでエラーが出ていないか?
・Sceneタブで確認できる当たり判定の範囲は正しいか?
・Rigid bodyが設定されているか?
・ColliderのIs TriggerはONになっているか?
・攻撃判定のColliderを非表示にしているか?(非表示にしないと誤作動する)
・パラメータの設定漏れはないか?
・bakeはしたか?
・layer Collision Matrixの設定は正しいか?
よくあるビルドエラー
メッセージ:「Build path contains project built with “Create Visual Studio Solution” option, which is incompatible with current build settings. Consider building your project into an empty directory.」
原因:現在の互換性がないビルド設定で作られたプロジェクトが含まれている
対策:
・違うディレクトリを指定してビルド
・.slnファイルを削除(バックアップはしてください)
参考:Unityがビルドできない
メッセージ:「can only be called on an active agent that has been placed on a NavMesh.」
原因:NavMesh設定前にNavMeshの処理が実行される場合がある
対策:NavMeshが設定される前に処理が来るケースを考慮。NavMeshが設定されていない場合は処理をスキップする処理を追加する。
具体的には以下の判定を追加します。
if(navMeshAgent.pathStatus != NavMeshPathStatus.PathInvalid) { // navMeshの処理 }
参考:【Qiita】Unityで *** can only be called on an active agent that has been placed on a NavMesh.とか言われる時の対処法
ガンガン追記予定です。
関連記事>>迷ったらビルドせよ~静的解析の限界~