セーブしたい
Android,iOSは要Pref使用?(未実験)
http://www.trident-onlinegame.com/wordpress/?p=1033
Serializeしてファイルに保存する。
Androidでフォントサイズの変更が反映されない
ダイナミックフォントは使用不可。fontのCharacterをUnicodeやAsciiにして使う。別サイズのフォントを使う場合はサイズ別にフォントAssetを用意する。
http://answers.unity3d.com/questions/130486/help-androidiphone-text-size.html
解像度を固定したい
適当なスクリプトでScreen.SetResolutionを呼ぶ。
NGUIの使い方
以下のサイトにチュートリアルの日本語解説がある。
http://d.hatena.ne.jp/nakamura001/20120304/1330849793
NGUI用ツールのウィンドウが表示されない
Unity側バグにより当該ウィンドウが画面外に出現している?
レイアウトをリセットすると直る。
NGUIのパネルを消そうとするとエラーを吐かれてUIが画面に残ってしまう
衝突処理が動作しているタイミングで発生する問題?
消去処理をInvokeを通して処理すれば一応解決する筈
(2014/9/8)透明化しておいた方がマシかも。あるいは、Panelじゃなくてその子をdisableする。
ビルド順序
プロジェクト名がなんたら-firstpassとなっているのは、コレが先にビルドされますよという意味。Assets/Standard Assets内のScriptが自動的にこのプロジェクトでビルドされる。以下のスレッドにビルド順序が紹介されている。
http://forum.unity3d.com/threads/134097-Assembly-C-Sharp-Assembly-C-Sharp-firstpass-etc
CS0241が発生する
ビルド対象フレームワークを.NET4.0にすると直る。
http://answers.unity3d.com/questions/176305/default-parameter-specifiers-are-not-permitted.html
※Monodevelopを開く度にビルド対象フレームワークが.NET3.5に戻される模様。
これを理由にMonodevelop側でエラーが発生しても、文法的に問題無ければUnity側での実行は問題無く行える。
大体把握してる手法
1.RigidBody+AddForce
質量、抵抗といった要素を考慮した動きを実現しやすい。物体を吹き飛ばしたり投げたりする場合に使うといい具合になりそう。
物理演算が効いているのでとりあえず触れば動く、という分かりやすいインタラクティブ性がなんとなく楽しい。
2.CharacterController+CharacterMotor
サンプルで実装例が存在する為、利用しやすい。特にFPSスタイルでプレイヤーキャラクターを操作する場合には無難な選択肢と思われる。
サンプルのPrefabをそのまま使えるのもありがたい。
3.NavMeshAgent
予め生成しておいたNavMeshに従い動作する。対象の位置を与えると自動的に経路を計算して移動する。
対象への接近動作以外は前述の2種を併用して実現する。生成される経路情報だけ使わせてもらうという手もありか。
Pro版ではNavMesh間を接続するOffMeshLinkが使用できる。
4.Animation
アニメーションによる移動もできるらしい。
BGMの鳴らし方
インポートしたBGMファイルのInspectorで「3Dサウンド」のチェックを外しておく。
Blenderで作成したモデルをインポートすると向きがおかしくなる
諦めて向きが正しくなるよう回転させる。空のGameObject下に回転させたモデルを配置すると扱いが楽になる。
コリジョンを設定したオブジェクトの衝突判定が行われない
下記URLの最下部に記載されている表を参照。
http://docs.unity3d.com/Documentation/Components/class-BoxCollider.html
2014/6/21修正。
ざっくり解説すると、衝突する側された側の両オブジェクトの関係が関わってくる。
ObjectがStaticかどうか
Colliderの設定がIsTriggerかどうか
RigidBodyコンポーネントを持っているかどうか
RigidBodyコンポーネントの設定がIsKinematicかどうか
TranformのTranslateなど位置を直接変更するメソッドを使うと衝突判定が行われない。
Gravityを有効にした場合は重力による落下処理が衝突判定を伴う模様。
Physicsの設定でレイヤー間の衝突判定が無効化されてる?
AnimatorのApply Root Motion
モデルの位置・回転情報をモーションから適用するかどうか。
Falseの場合はモーション内でどれだけモデルが移動しようが回転しようが反映されず、モデル自体のポーズだけが反映される。
キャラクタの位置をモーション側で制御する場合はTrue、スクリプトで制御する場合はFalseにする。
Unity側
WWWクラスでGET/POST、WWWFormクラスのインスタンスでパラメータ格納
Google App Engine(GAE)
with Python
Eclipse + PyDevが簡単そう。
注意点
Unity Web PlayerからGAEのアプリケーションへ通信する場合はGAE側にcrossdomain.xmlが必要。これが無いと通信時にGAE側でcrossdomain.xmlが404ですというログが出力される。
http://docs-jp.unity3d.com/Documentation/Manual/SecuritySandbox.html
http://help.adobe.com/ja_JP/AS2LCR/Flash_10.0/help.html?content=00000474.html
node.js
Max Idle Instanceを少なくしておくとFrontend Instance Hoursが抑えられる
Photon Cloud
ネットゲーム用のインフラ。べんり。
位置同期させたオブジェクトがガタガタする
Positionの値をLerpで滑らかに同期させる。(こんな感じ)
Gravityが有効だと落下処理が行われるので無効化しておく。または、Gravityを考慮した位置同期処理を行う。
Private変数とか見たい
Inspectorウィンドウ右上の≡ボタン押下で表示されるドロップダウンリストからDebugを選択
http://answers.unity3d.com/questions/21198/viewing-private-variables-in-the-inspector.html
Unityがフリーズした
abd.exeを強制終了すると解消できる場合がある。Unity側のバグの模様http://forum.unity3d.com/threads/148176-Bug-Unity-runs-adb-exe-when-entering-play-mode-in-the-editor
GUI.RepeatButtonの動作がおかしい
OnGUIが1フレーム毎に何度も呼び出されることに起因する問題。
入力処理は基本的にRepaintイベント時に行うので、Event.current.typeがEventType.Repaintの場合にfalseを反映することで対応する。
http://answers.unity3d.com/questions/179042/gui-repeat-button-problem.html
使い方
アプリケーションが使用するリソースをまとめたもの。
WWW.LoadFromCacheOrDownloadを使用してのロードを推奨。
http://vimeopro.com/unity3djp/unite-japan-2013-for-the-public/video/64375290