UnityFAQ

2015年10月25日 (日) 04時31分50秒
このエントリーをはてなブックマークに追加

Unityでゲームを作るにあたり実際につまづいた点などをまとめてみました。
同様の疑問を持つ人もいるかと思うので、それぞれの疑問をFAQとして共有できればと思いページを作成してみました。

Unity4とUnity5の重大な違い

Unity4での書き方

rigidbody.transform;
renderer.material;

Unity5での書き方

GetComponent<Rigidbody>().transform;
GetComponent<Renderer>().material;

ネットで資料を検索するとunity4の記事が出てきて、その通りに書くとunity5では動かないです。

GetKeyUp,GetKeyDownがたまに動かない

→その処理をFixedUpdateに書いている可能性。
GetKeyDown,UpはUpdateでしか使用できません。FixedUpdateには物理演算関連の処理を書きますが、GetKey系と混在する場合、Update内でFlagを立てる、FixedUpdate内で物理演算するという解決策があります。

参考
http://stackoverflow.com/questions/19259097/is-it-really-wrong-to-use-input-getkey-on-fixedupdate

MonoDevelop Ctrl Z できるけど Ctrl Y できない?

→Shift + Ctrl Z が ReDo機能

UIが動かない時の対処

→EventSystemが存在しているか?
→2つ以上のUIが重なっていないか?

UIをタッチした場合手前のものしかタッチされないという仕様。
その為ボタンが入り乱れる場合

Button.GetComponent<Button> ().interactable = true;

でボタン機能そのものをONOFFするよりも

Button.gameObject.SetActive(true);

のようにボタン自体ONOFFした方が良いと思われる。

と思ったが今度はsetActiveがfalseの時Find系に発見されなくなるなど使い分けが必要な模様。

他のシーンで作ったUIのPanelが動かない

→Canvasのサイズが一致していない可能性
CanvasScalerの値を一致させると治ることがある。

シーン再生中に動的にUIやらゲームオブジェクトを生成する場合

inspector上でアタッチする方法は使えない。(はずである)
→Find系を使用する。

RectTransformについて

RectTransformはTransformと違い、PresetAnchorによって構成要素の名前がたびたび変わる。

たとえばPosYとTopの指定の違いやWidthとXdeltaの指定の違いなど、一見するとどうしてこれが違ってるのだろうということが起こりうる。

unityのCreateでuGUIのテキストやパネルは初期設定で異なるPresetAnchorが指定されていることもあり、知らないと混乱を招く。

uGUIにおいてCanvasScalerの値を間違えた状態でUIを配置してしまった

→一つ一つ手直ししました。

事の顛末は9:16の想定でCanvasScalerの値を設定したつもりが16:9の数値を入れてしまっていたことが始まり。

AspectRatioFitterなどいろいろ試してみたのですが、うまくいかずただただ時間が過ぎていってしまったので手直しという選択をしました。
手直しはscaleに9/16をひたすらかけるという方法をとりました。

配置し始める前であれば以下のようにアスペクト比を固定することができるようです。

http://tsubakit1.hateblo.jp/entry/2014/12/11/223427

animationを座標変更に使用したい

→Unityにおいてanimationは便利な機能の1つであり、座標の変更行うことが出来る。
animationを加えたいGameObjectを選択してからAnimationWindowを開き設定を行うわけだが、
AddCurveから座標を設定してanimationを再生してみると、初期設定では座標変更に慣性がかかり補正がかかった移動がされる。

この補正が自分はおせっかいに感じたので変更方法をここに記す。

変更方向としては、キーを右クリック→BothTangents→Linearとすることで前後の移動慣性を無視するようになる。

また、animationWindowの左下の所のDopeSheetとCurvesというところを、Curveに切り替えると詳細な移動の様子を見ることが出来る。
実際に変更を適用するとCurveが変わっていることが確認できる。

参考 Unity Manual
http://docs.unity3d.com/ja/current/Manual/EditingCurves.html

Unity 2DのZ座標

→初期設定では手前がマイナス。座標軸は奥に向いている。

2Dオブジェクトの幅を取得

gameObject.GetComponent<SpriteRenderer>().bounds.size.x;

でスプライトの幅を取得できます。

Unity.Random(min,max)について

→Int型で運用する場合返り値はmin<=x<=max -1。
よってUnity.Random(0,a.Length)やUnity.Random(0,a.Count)といった使い方ができる。