2018-4-16
【Unity】 倉庫番作成時に学んだこと
Unity の練習として倉庫番を作成した。
こんな単純なゲームでも、色々と学ぶことは多かったのでメモとして残しておく。
Find はアクティブな GameObject のみ返す
GameObject.Find - Unity スクリプトリファレンス
GameObject.FindGameObjectsWithTag - Unity スクリプトリファレンス
アクティブな GameObject のみしか返さないので、スクリプト側でGameObject.SetActive
でアクティブを変更したい場合は Start 時に非アクティブ化、変数に格納等の対応が必要
シーン切替時に暗くなる
Unity でシーン遷移するとライトが暗くなる問題 - 脳汁 portal
各シーンでこの対応をしないといけないので注意
Button が反応しないとき
Unity で Button を押しても反応がないとき - Qiita
Button の動作には EventSystem が必要
なんだこれ?って間違って消してしまって時間食ってしまった。
ゲームの終了方法
Unity でスタートボタン、ゲーム終了ボタンの UI を作成する | Unity を使った3 D ゲームの作り方(かめくめ)
Button の onClick に設定した関数に引数を渡したい場合
引数が必要な関数であれば、自動的にパラメータを入力するためのボックスが出てくる
Canvas の前後関係
sort order が大きいほうが手前
Unity ちゃんの表情変更
Animator にレイヤー機能があるので、これを利用することで1つの Animator に別カテゴリのアニメーションを割り当てることが出来る。
- Animator にレイヤー追加
- 追加したレイヤーの設定から、レイヤーを「faceOnly」、Weight を 1 に
- あとは通常と同じ
webgl がちゃんと描画されない
和文フォントの問題
Unity の WebGL で日本語を表示する - Qiita
デフォルトで適用されてるのが欧文フォントで、WebGL では和文フォントへのフォールバックがされないのが原因の模様。
とりあえず NotoJP 設定するようにしておけばいい
解像度の問題
実行ファイル起動時の画面解像度の強制変更スクリプト – Unity インターハイ公式ブログ
Build 設定の「Player Setting」から解像度等調整出来る。
似たようなシーンをプレハブを使って構築する場合の注意
シーン毎に変わらない物と、シーン毎に変わる(アタッチされたスクリプトに渡す値等)物は別のプレハブにしておいたほうが良い。
というのも、シーン毎に変わる物もごちゃまぜにしてしまうと、間違って Apply してしまって同一プレハブを使用しているシーンがめちゃくちゃになってしまうことが頻繁にあった。
基本、シーン毎に変わるものはプレハブにしないか、プレハブにするにしてもシーン毎に不変なものと別プレハブにしておいたほうが良い。
クラス、構造体を inspector で変更できるようにする方法
Unity の Inspector で変数を表示する方法まとめ - Qiita
クラス、構造体宣言の直前に[System.Serializable]
を記述すればいい。
[System.Serializable]
public class PositionClass {
public int x = 0;
public int y = 0;
}
private な変数を inspector で変更する
変数宣言の直前で[SerializeField]
を記述
[System.Serializable]
public class PositionClass {
[SerializeField]
private int x = 0;
[SerializeField]
private int y = 0;
}
アニメーションの管理に関して
例えば、enum を使用して以下のようにアニメーションの状態を定義しようとする。
enum AnimationState
{
idle,
walk,
run,
jump
}
そして、次のように UnityEditor へアニメーションの状態を引き渡す
GetComponent<Animator>().SetInteger("State", (int)currentAnimationState);
こうしてしまうと、UnityEdotor 上ではアニメーションの状態は単なる整数表現になってしまうので、非常に分かりづらくなってしまう。
なので、この手法はアウト。そもそも、UnityEditor 上で作成出来る状態遷移図の利点を生かせないので微妙。
アニメーションの遷移に関しては、UnityEditor 上で先に状態遷移図と必要なパラメータを定義し、スクリプトで随時必要なパラメータを投げる形で作成したほうが良さそう。