devlog [naru design]

プログラミングやテクニカルな内容の覚え書き。

5次元配列をクラス変数として作成した所、Unity上では問題なく動くのにiPhone実機でエラーが発生。

クラス変数として5次元配列のデータを初期化した。

Unity上では問題なく動作したが、iOS向けにビルドしてXcodeから実機で動かすとエラーが発生。

ExecutionEngineException: Attempting to JIT compile method …

5次元配列の値を参照しているところで上記のようなエラーが発生し動作が停止した。

Googleで検索したところ、UnityAnswersに気になる投稿を2つ発見。

“ExecutionEngineException: Attempting to JIT compile method” when Marshal.PtrToStructure function operating on iphone

http://answers.unity3d.com/questions/250803/executionengineexception-attempting-to-jit-compile.html

Why doesn’t Unity iPhone support 4D arrays?

http://answers.unity3d.com/questions/297051/why-doesnt-unity-iphone-support-4d-arrays.html

多次元配列を使うことに問題がありそうなので、配列のインデックスをフラット化して2次元配列に変換。

iPhone実機でも問題なく動作すするようになりました。

根本的な原因は分かりませんが、多次元配列は3次元程度までにしておいたほうが良いのかも…

簡単なキーフレームアニメーションを作成し、スクリプトからそれらを再生する方法。

操作動画

続きを読む

LightwaveからエクスポートしたfbxをUnityで読み込んだ時、テクスチャの色が正しく反映されなかった。

wrong_texture

続きを読む

画面に3つのキューブを配置し、それぞれをコルーチンとUpdate()で左右に動かしてみた。

coroutine_update

続きを読む

ゲームオブジェクトの子オブジェクトを取得するにはforeach()でtransformのそれぞれの要素を参照すれば良い。

以下のようにオブジェクトを階層化して

スクリーンショット 2014-05-13 11.07.13

それぞれのオブジェクト(ObjXXX)は以下のように位置を設定しました。
– ObjRootは(0, 0, 0)
– ObjChildAは(1, 0, 0)
– ObjChildBは(2, 0, 0)
– ObjChildCは(3, 0, 0)
※その他は(0, 0, 0)

ObjRootに以下のスクリプトを追加

シーンをプレビューすると、Consoleには以下のように表示されます。

スクリーンショット 2014-05-13 11.27.55

transform自体は自分自身、foreach()でtransformをスキャンすると子オブジェクトを取得することが出来ます。

ObjRootの子オブジェクト(ObjChildA, ObjChildB, ObjChildC)のみが表示され、孫オブジェクト(ObjChildB-A, ObjChildB-B)は表示されていません。

Asset StoreからダウンロードしたアセットはローカルHDDに保存されています。自分で別のフォルダにアセットをバックアップしておけば、新しいバージョンで不具合が起きた時に対処しやすいかと思います。

Macの場合は

~/Library/Unity/Asset Store/

Windowsの場合は

C:/ユーザー/(AccountName)/AppData/Roaming/Unity/Asset Store/

上記のフォルダ内にアセット毎のユニークなフォルダが作られ.unitypackageファイルが保存されています。ユニークなフォルダは「デベロッパ名/アセット名/」になっていると思います。

NGUIはバージョンアップが早く、機能改善やバグフィックスも頻繁に行われてます。ただ、プロジェクト仕掛中にNGUIバージョンを上げて挙動が変わってしまうのは問題です。色々な都合で旧バージョンを使い続けないといけないけど、思ったように動いてくれないのも困ります。

苦肉の策で思ったように動かない時はソースに手を入れてます。NGUIのどのバージョンで、どんな問題にぶつかって、どう対処したか、メモを残しておきます。

都度追加していきます。

続きを読む

eventキーワードを付けると、そのクラス内でのみデリゲート型の変数(EventHandler)を関数として呼び出すことができる。サブクラスからスーパークラスのEventHandlerを呼びだそうとするとエラーが表示される。

コンソールに以下の様なエラーが表示される。

Assets/EventSub.cs(9,21): error CS0079: The event EventSuper.EventMouseDown' can only appear on the left hand side of +=’ or -=' operator
Assets/EventSub.cs(9,21): error CS0070: The event
EventSuper.EventMouseDown’ can only appear on the left hand side of += or -= when used outside of the type EventSuper'
Assets/EventSub.cs(11,25): error CS0079: The event
EventSuper.EventMouseDown’ can only appear on the left hand side of +=' or -=’ operator
Assets/EventSub.cs(11,25): error CS0070: The event EventSuper.EventMouseDown' can only appear on the left hand side of += or -= when used outside of the type EventSuper’

続きを読む