踊るプログラマースマートフォン用の表示で見る踊るプログラマー2016-08-18ちょこっとベターなSingletonMonoBehaviourUnitytsubakit1.hateblo.jpこちらの記事を参考にしたSingletonMonoBehaviourを利用していたのですが、SingletonMonoBehaviourの絡むバグが発生し、それを発生しにくくできないかと思って、ちょこっと変えてみました。この時に、そのオブジェクトのactiveがfalseだと見つからなくてエラーになるという問題がありました。}}という感じで死んでしまったことがありました。それでも、普通はAwakeが呼ばれたさいにinstanceに値が入るのでだいじょうぶなんですけど、往々にして継承先でAwakeを書きたくなるんで、継承元のAwakeを隠しちゃっていました。隠しちゃってるよっていう、warning出ていたんですけどね。継承先でAwakeを書きたくなることは結構あるので、継承元のAwakeをvirtualにしました。...//継承先独自の処理}としています。これでもAwake内でSetActive(false)されて、Instanceにアクセスされたり、そもそもEditor上でactiveをfalseにされていたら、同様にエラーになっちゃいますけど。SingletonMonoBehaviourにしてたりと、ちょこっと安全にしました。18:28ちょこっとベターなSingletonMonoBehaviourTweetもっと読むコメントを書く2016-08-17以前作ったSoundManagerの改良Unity効果音を鳴らした後にスクリプトからFadeOutしたり、FadeInとかしたくなったので、以前作ったSoundManagerを改良しました。FadeOutができるようにそれにともない。Remoteの話を書こうと思ったのですが、ちょっと後日に回します。Unityのグリッドサイズとか、Cubeのサイズとか、ちょいちょい忘れるのでメモ。1.0kgこれらを考慮してオブジェクトのサイズを設計しないと物理挙動がおかしくなります。5.4.0f3Unityで開発していると、どうしても実機でテストしなくちゃならないことがあります。加速度センサを使ったゲームとかはPC上ではテストできません。そこでiOS用にビルドしなくちゃいけないんですが、これがめちゃくちゃ遅い。Unityクラウドビルドを利用したり、自分でCI導入したりすべしという話もあるのですが、知ってる人には当たり前なビルド時間を短縮する方法があります。SettingsのConfiguration部分の設定を変えることです。デフォルトでは、以下のようになっていると思います。実機でテストする分には、この辺りの設定を変えてしまっても、ほとんど問題ありません。Device、Architectureの設定を変えて、空のシーンをビルドした時にビルド時間を比べてみました。0:36一番おそいのと、一番はやいのとだと約4倍の差が!UniversalからARMv7にするだけでコンパイルするファイル数が160ファイルから80ファイルに、さらにMono2xにすると49ファイルに減りました。そりゃぁ早くなるわけだ。only」にしとくのが良さそうです。Connectへのアップロードができないので注意してください。Remoteの使ってみた感想を書こうと思います。UnityBlenderで作ったモデルをFBXに出力する際のスケールや回転が、出力設定によって色々変わって混乱したのでメモ。されて、スケールに100倍掛けられて出力される。座標系の違いは、オブジェクトのRotationとして入ってくる画で説明すると、Blenderで、こういうモデルをこういう出力で出すと、Unityで読み込むとこんな感じになる。Scaleに100、Rotationに90度が入っている。頂点座標は、そのまま。スケールもそのまま出てくる。座標系の違いは、頂点座標が変換されて出力される。画で説明すると、Blenderで、さっきと同じモデルをこういう出力で出すと、Unityで読み込むとこんな感じになる。Scaleも1だし、Rotationも特に入っていない(頂点座標として吸収されている)。Transformした場合でも、オブジェクトに設定しておいたSRTはそのまま出てくる(頂点座標として吸収されない)。BlenderWiki結論。できるだけBlender上でのSRT変換は頂点座標に適用させて出力するのがUnity上での取り扱いが楽だと思う。その他Blenderの1GridはUnityの1Grid、つまり1メートルであるtextureを元のテクスチャ位置と同じ相対パスに、あらかじめ置いておかないとUnity上のマテリアルにはちゃんと適用されない。11:45BlenderからUnityへ出力する際のメモTweetもっと読むコメントを書く2016-08-13transformは遅い説の検証Unityqiita.comこちらの記事によるとtransformは内部でGetComponentをしているので遅いらしいです。気になったので自分でも試してみました。seまずは以下の様なコードで。msecざっくり2倍〜3倍ほどキャッシングしてあげたほうが早そうです。上記のコードだとメモリキャッシュが効いてまうので、あまり差が出にくいです。そこで以下の様なコードでも試します。1フレーム経つ間にキャッシュが汚れることが期待し、コルーチン使って毎フレーム少しづつtransformに触る感じにしております。msec先程より差がでました。PCだと8倍ぐらい差がでます?なんとなくiPhoneでも、もうちょいちゃんとキャッシュを汚せれば優位な差が出る気がします。transformを使う際は一度キャッシュしてから利用したほうが良さそうですね。objectというエラーが出ていて、編集中に?何故?Editor拡張周りに何かバグが?って思っていたのですが、違いました。理由は、Reset関数のせいでした。ボタンやコンポーネントを初めて追加するときに呼び出されます。この関数はエディターモードのみで呼び出されます。インスペクターでデフォルト値を設定するときにもっともよく使用されます。そんな特別な関数になるとはつゆ知らず。普通にResetという名前の関数を作っていました。startPosition;}cachedTransformは以下のようにStart関数で与えるようにしていたので問題が。transform;}当然、Editorで編集中はStart関数が呼ばれていないのでcachedTransformはnullなわけです。妥協してResetParamsという関数名に変更して対処しました。それにしても、今回のResetもそうだけど、Unityの、StartとかUpdateとかAwakeとか、仮想関数でも無いのに勝手に呼ばれるのが怖い。処理高速化のためとはいえ、なんとかならんものか。命名規則とかでそれっぽくしておいて欲しい。全部頭にOnをつけて、OnStartOnUpdateOnAwakeOnResetってするとか。はてなブログPro岩手生まれの歌って踊れるプログラマーです。“android.support.v4.content.FileProvider”というエラーがでてハングしたビッグローブ光にて、何故かMacでだけIPv6接続できなかった。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。