今回はUnityでビルドをして実行してみようと思ったら出来ないことがあったのでその時の対処の仕方を見ていきたいと思います。
Unityのバージョン違いを複数保存する方法
ビルドの話に行く前に・・・(-.-)
バージョンアップして問題なく元のプロジェクトが使えるかどうか試す時に現行バージョンを残したまま
新しいバージョンを使いたい事があります。
そんな時にバージョン違いを複数インストールして使い分け出来るようにしておくと便利です。
Unityのバージョンをアップデートしようと思った時はプロジェクトフォルダをコピーしておいたほうがいいです。
バージョンアップしてプロジェクトを開こうと思ったら開けなかったなんて事もありますから(T_T)
現在はUnityのHubを使ってUnityの個別のバージョンをインストール出来ます。
Unityのバージョンアップを通常どおり行うと前のバージョンが上書きされてしまいますが、Unityが保存されているフォルダの名前を変更してから
新しいバージョンのUnityをインストールする事でバージョン違いを使えるようになります。
Windows7ならばデフォルトだと
C:Program FilesUnity
にUnityが保存されるのでこのフォルダ名をバージョンが5.3.4f1ならば
Unity → Unity5.3.4f1
等とフォルダ名を変更します(フォルダ名は自由に付けてください)。
その後に新しいバージョンのUnityをデフォルトの場所にインストールし保存すれば
C:Program FilesUnity
に新しいバージョンのUnityが保存されます。
UnityEditorフォルダ内のUnity.exeファイルを実行する事でそのバージョンのUnity
のEditorでプロジェクトを開く事が出来ます。
ファイルがビルド出来ない!?
さて・・・だいぶ前置きが長くなりましたが、
Unityでゲームを作成し、スタンドアロン形式やAndroid形式、Web形式のファイルを作成する為にビルドを行う事は多々あると思います。
ただの自己満足でUnityをいじるだけで、ゲームファイルの出力はしないというなら別ですが・・・・。
プラットフォーム用モジュールをインストールしていないパターン
一生懸命ゲームを作り、いざファイルに出力してみようと思った時に下のような画面になる事があります。
上はパソコンにダウンロードしてプレイする形式のスタンドアロン形式でファイルを出力しようとした時の画像です。
No PC, Mac & Linux Standalone module loaded
と表示されbuildが出来ません。
画像を見るとOpen Download Pageというボタンがあるからその形式で出力する為のファイルをダウンロードする必要があると言う事がわかります。
じゃ、さっそくダウンロードしてみましょう!
((+_+))
404ページが表示されるじゃないですか!
せっかく作ったゲームが(作ってないけど・・・・)台無し・・・(__)
Unityのダウンロードページでモジュールファイル?がないかどうか探したけど見つからない・・・。
んー調べたけどわからないので、再インストールしてみる事に。
すると、
↑のようにUnityをインストールする時に出力形式のモジュールのインストールのチェック画面が現れました。
ここでチェックしておけばビルドも問題なく出来るようになるみたいですね。
UnityのHubを使えば後からモジュールファイルをインストールすることも出来ます。
UnityHubのインストールを押し、現在インストール済みのUnityのバージョンの右上の3つの〇部分を押すと、
追加したいモジュールをインストールする事が出来ます。
ビルドする時に必要になるファイルは
C:Program FilesUnityEditorDataPlaybackEngines
↑のフォルダの下に作られてるっぽいのでここに対応する形式に使うモジュールファイルをおくと出来そうな感じ?
Unity本体やMicrosoft visual studio等すでにインストール済みならば、ビルドしたいファイル形式の項目だけチェックをして、Nextボタンを押してインストールします。
これで追加インストールが出来ますね。(^^)/
UnityEditorが見つからないというエラーのパターン
Unityのエディター上ではスクリプトのエラー等は発生していないけど、いざビルドして確認してみようと思ったら以下のようなエラーが出てビルドエラーになる事があります。
Assets/Scripts/File/ErrorTest.cs(3,7): error CS0246: The type or namespace name `UnityEditor’ could not be found. Are you missing a using directive or an assembly reference?
UnityEditorという名前の名前属性を見つける事が出来ない、使っているアセンブリの参照をミスしていないか?
というエラーです(現在のUnity2019.1.8f1ではUnityEditorのusingディレクティブを書いただけだと出ないかも?)。
このUnityEditorという名前空間はエディターの拡張等をする時に必要なEditorフォルダ内のスクリプトで使う名前空間なので、他の通常のスクリプトでこのUnityEditorという名前空間をusingディレクティブで指定するとこのエラーが出ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using UnityEngine; using System.Collections; using UnityEditor; public class ErrorTest : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } |
例えば↑のようにUnityEditorをusingディレクティブで指定しています。
これはコンパイルエラーにはなりませんが、ビルドしようと思うと先ほどのエラーが発生します。
このエラーが発生するのは大体がスクリプトのタイプミスで自動でusingディレクティブが追加されてしまったケースです。
なのでこのusing UnityEditor;部分を削除すればビルドも可能となります。
他にもUnityEditorパッケージのクラスを使っている場合もエラーになってビルドに失敗します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEditor; public class ErrorTest : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } private void OnDrawGizmos() { Handles.DrawWireCube(Vector3.zero, Vector3.one * 3f); } } |
上の場合はUnityを実行していなくてもシーンビューでワイヤーのCubeが表示されますが、いざビルドしてみるとエラーが出て出来ません。
そんな時はプラットフォーム依存コンパイルを使用するとビルド出来ます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEditor; public class ErrorTest : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } #if UNITY_EDITOR private void OnDrawGizmos() { Handles.DrawWireCube(Vector3.zero, Vector3.one * 3f); } #endif } |
OnDrawGizmosメソッドはUnityエディターの時だけ実行されるようにします。
もしくはUnityEditorのクラスを使用しているスクリプトをEditorという名前のフォルダを作成し、その中に入れてもビルドが可能となります。