トラブルシューティング

トラブルシューティング



unity-C#スクリプトの既知の問題


unityのC#はマイクロソフトがリリースする最新の.NET-C#でサポートされている全機能が使えるわけでは無い
その機能はunityのバージョン→monoのバージョンでサポートしている機能に縛られている
またコードを出力する機種、特にiOSに関して固有の問題も多くみられる

主にスクリプトコード作成の上で問題となりやすい部分は以下の二つ
  • リフレクションを使った機能
  • LINQの幾つかの機能

これは検索などで調べるとわかる(2014/10/07現在)
またインスペクタ周りの仕様により関数のデフォルト引数等もコンパイルエラーを起こすことが知られている

資料:


カスタムエディタの諸機能が目に見えて反映されない


カスタムエディタの諸機能が目に見えて反映されない時はunityエディタウインドウ右上にあるビューモードの変更トグルから「Default」を選択してみてください。これでコードに問題が無ければ表示される筈です。エディタの諸設定でこのようなトラブルが起きる人もいるようです


コードには問題ないのに特定のスクリプトを実行するとユニティがクラッシュする


原因:スクリプトファイル名の変更などによりゲームオブジェクトクラスとUnityゲームエンジンへの内部接続が外れている為クラッシュする

ユニティの新規作成時のスクリプトファイル名はゲームオブジェクトのクラス名と内部で不可視に接続されている(どこかでその情報は保存されているらしい)
ユニティ上でC#のスクリプトを新規作成した際、自動で生成されるコードはファイルネームとクラス名が必ず同一になっている

このことを忘れると例えばネットで拾ったコードをコピペする際、原因不明のエラーで悩んだりする
適当に決めた名前でスクリプトファイルを作成し、後でクラス(オブジェクト)の名前に合わせ変更等すると
内部で相互関係の接続が外れ、そのスクリプトを実行するとユニティごとクラッシュする事がある為だ
この場合コードが正しくてもクラッシュする

こういった状況を起こさない為に下記を徹底する
  • クラス名とスクリプトファイル名は同一にする事を意識する。途中で両者をリネームする事は避ける
  • ネットで拾ったオブジェクトのコードをコピペする際はクラス名と新規作成時のスクリプトファイルネームを同一にする


コンポーネント内の値が変化している筈なのに反映されていない


FindObjectOfTypeで値を取得している場合、シーン内に複数同名、同型のオブジェクトが無いか確認してみる
FindObjectOfTypeはシーン内で見つけた最初のオブジェクトを拾う もしふたつ同名のオブジェクトが
シーン内に配置されていて知らずに自分の想定していない片方側のオブジェクトを拾っていた場合
値の変化が正常に見えない事がよくある。その場合はタグやオブジェクトネームをうまく利用して拾うと解決できる


ギズモが表示されない


ユニティエディター上のGUI表示は少し特殊
アイコン表示されて欲しい画像素材は [PROJECT-­PATH]/Assets/Gizmos フォルダ内に配置されている必要がある
エディターのアセット素材として認識されていないので直接文字入力して選択させる

設定したテクスチャが外れる、アセットの詳細な設定が保存されていない


まず、そのプロジェクトがバージョンコントロールされているか確認します。他のPCから別のPCへデーターを移した際
同様の症状がみられる場合、バージョンコントロールの設定が正常に出来ていない場合があります
バージョンコントロールの設定はGitで説明しています


音が正常に聴こえない


<一つのシーンにオーディオリスナーはひとつにするべき>
Audio Listener componentは1シーンにひとつだけ対応するようにしましょう。
例えば

var mainCamera: GameObject;
mainCamera.GetComponent(AudioListener).enabled = false;

こうするとmainCameraオブジェクトの音声入力はオフになります
シーンに複数カメラがある場合、視聴地点は一つの方が自然なので適時、各カメラのオーディオリスナーをオンオフする

  • 最終更新:2014-10-07 18:42:36

このWIKIを編集するにはパスワード入力が必要です

認証パスワード