サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
posposi.blog.fc2.com
当たり判定ネタ。 Unityの当たり判定の検出において、静止した物体同士の当たり判定については注意が必要だ。 まず、UnityでのColliderの当たり判定検出の基本的なルール。 (このケースはMonoBehaviourのOnTriggerEnterメソッドで検出したい場合) ・どちらかにRigidbodyが必ず付いていること ・RigidbodyのIs Kinematic(物理挙動をさせない)にチェックが入っていること ・ColliderのIs Triggerにチェックが入っていること また、さらに以下の様な条件がある。 ・Rigidbodyが付いている方のオブジェクトが移動もしくは回転している(静止しているとダメ) ・(ただし、起動直後のフレームだけは静止していても検出可能) つまりUnityの当たり判定(OnTrigger???やOnCollision???)はRigidbodyが
AllocationStatsをカスタマイズしてみた。 メモリプロファイラで見るのもいいが、手っ取り早く確認するならこっちの方が早い。 注目すべき値は ・Used Mem ・Max Used Mem の2つでほぼ十分。 C#ではガベージコレクションの走るタイミングがこちらでは分からないが、 明示的にガベージコレクションさせる事が出来る。 System.GC.Collect(); バッファの解放が上手く行っているかどうかをすぐに確かめたいなら、 その直後にこれを読んでメモリ使用量がそのサイズ分減っているかを確認すると良い。 ※ Gistへアップロードする時にTAB文字を空白に変換したので、表示時にインデントが崩れてました。 そもそもTABやら空白やらに影響されないように近いうちに修正します。
NGUIをとにかく扱ってみましょうな記事その③、他解像度対応編。 NGUIのScaling Styleの高さを調整する 前回の記事で、UIRootのScaling StyleをFixedSizeにし、Manual HeightをiPhone4のタテを想定して 960に設定した状態でiPhone4→iPhone5にアスペクト比を変更した時に、横のサイズが変わるところまで紹介した。 スマホ向けのアプリやゲームを作る場合には、こういった他解像度になった時の事を考えておかないと 後々苦労するので、最初から方針を決めて何かしらの策を取る必要がある。 対応策としては、主に ・ある特定の端末の解像度をアプリ内で(仮想的に)設定し、どの端末でも同じような見栄えになるようにする ・UIの配置や大きさを解像度に合わせて変更する(端末ごとに見栄えが変わるのを許容した作りにする) がある。 今回は前者の「どの端末
NGUIをとにかく扱ってみましょうな記事その②、表示の基本編。 スプライトを表示する 前回の記事ではNGUI(v3.0.8)をインポートして、テクスチャからアトラスを作成した。 そのアトラスを使って何かUIを表示するには、NGUIでは一番スタンダードなものとしてSpriteがある。 とりあえず表示してみよう。 まずAtlasMakerからTrumpアトラスを選択した状態で、 その中にある c01 という名前のスプライトを選択。 その状態で、NGUI→Create→Spriteを選択すると、 画面にトランプのスプライトが表示される。 これだけで表示は完了だ。 アトラスさえ作ってしまえば、こうしてアトラスから表示したいスプライトを選択し NGUI→Create→Spriteを選択するだけで表示出来る。 ピクセル等倍にする ひとまず表示だけについてはここで置いておいて、 このNGUIのスプライト
Unityでスレッドを使ってみるテスト。 アプリやゲームを作っているとほぼ100%ぶつかる問題、重たい同期処理(ブロッキング処理)。 1フレームに掛かる処理が重たいと画面が引きつったように見えたり、入力の反応が無くなったりと 何かとデメリットばかりである。 世に出ている軽快なアプリはそれらを無くすためにおそらく様々な努力がなされている。 その1つとして、同期処理の非同期化はまず欠かせない。 というわけでUnityで非同期処理をしたくなったら、まず2つの手段がある。 コルーチンとスレッドだ。 この2つは同じようで実は全然違う。 各々の特徴を簡潔にまとめてみた。 コルーチン ・メインスレッドで処理される →なのでyieldで分けて処理を分散しても、その1つ1つの処理自体が重いと全体に影響する ・IEnumerator型の戻り値のメソッドである必要がある ・UnityのAPIが使える スレッド
ScriptableObjectの基本的な使い方について。 ScriptableObjectは、これまたあまり深く理解はしていないので的外れかもしれないが、 使ってみた感じ「全シーンで共通のリソースデータ」の作成に向いているクラス、のような気がしている。 全てのアセットファイルはこのクラスが元になっているっぽく、それをこっちでも使えるようになっている。 テラシュールさんのこのスクリプトが凄く便利で仕事でも良く使わせていただいている。 ScriptableObjectをプレハブとして出力する汎用スクリプト https://gist.github.com/tsubaki/5149402 ScriptableObjectを継承して作成したクラスを、そのままScriptableObjectのプレハブとして 出力してくれるものだが、例えばプレイヤーのデータを作る場合にこんなクラスを作ったとする。 u
Shurikenのエフェクトのスケーリングについて。 ShurikenのパーティクルはオブジェクトのTransformのスケール値の影響を受けない。 (実は最近始めて知ったw 昔は違ったのかも?) じゃあエフェクトのスケーリングはどうすればいいんだよ、ということで 色々漁ってみたけどそれっぽい情報がGoogle経由では捕まえられなかった。 でInspectorのParticle Systemをいじっていたけど、どうもStart Sizeというのが実際のスケール値のようで。 Particle Systemはコンポーネントで、動的にスクリプトで取得可能。 startSizeというプロパティがあってsetも出来るので、下記のようなコードでスケーリング出来た。 これをShurikenのプレハブの一番頭のオブジェクトにアタッチしてやればOK。 そのオブジェクト以下の子Particle System全
小ネタ。 MonoBehaviourを継承したスクリプトは、Unityのシステムの根幹部分から AwakeやStart、Updateといったメソッドが呼ばれるようになっているが、 その処理順番がどうなっているかはこちらでは分からない。 だがこちらでその順番を設定することは出来る。 Project SettingsのScript Execution Orderがそれだ。 +ボタンでスクリプトを追加して、ドラッグ&ドロップか実際に数値を設定するかで 処理順番を設定出来る。 ここで設定されていないものは、まとめてDefault TimeというUnity内部で設定された順番で 処理される。 上の例で行くと、例えばMySample1のAwakeやStart、Updateが他のどのスクリプトよりも 先に実行され、MySample2は最後に実行される。 例えばプレイヤーを入力によって動かしたい場合、一般
Mecanimのアニメーションイベントの使い方。 Unity4.3から、Mecanimに待望のアニメーションイベント機能が追加された。 この機能は簡単に言うと、モーションの特定のタイミングにトリガーを付けられる。 「このタイミングでエフェクトを出したい!」 「足が地面につくタイミングでSEを鳴らしたい!」 といったよくやることは大体これで片付けられる、便利機能だ。 大体のゲームエンジンにはこの機能が付いている。 説明の多さの割にやることは大して多くないので、ちょっとはしょりながら 基本の使い方を説明する。 今回は公式のフリーのアセット、Mecanim Example Sceneを使った。 Mecanim自体についての話は書くのがめんどくさいので省く。 このアセットのFollow Exampleシーンを開く。 「U_Character_REF」オブジェクトのキャラクターのIdle時のモーショ
Unityでツイートするサンプルを作ってみた。 →GitHub : Suzeep/UnityTwiTestGit 興味本位でUnityでTwitter連携の事をネットであれやこれやと調べていたら、 既にフリーのアセットがあった。 Let's Tweet In Unity by YoungWook Yang -- Unity Asset Store が、動かしてみると肝心のツイートが出来ない。410 Goneと出る。 ググってみると、どうやらTwitter APIのバージョンが1.1になった事で アクセストークンの取得までは上手くいっているが、ツイート部分が動作しなくなっているようで。 POST statuses/update | Twitter Developers この辺を見て、何だURIが変わっただけじゃないか、とソースコードを書き換えて実行。 が、今度は401 Unauthorize
コルーチンを自分で回す方法。 コルーチンは実はStartCoroutineで呼び出す以外にも走らせる方法がある。 このお題もUnityというよりはC#なのだが、 大体UnityでコルーチンというとStartCoroutineで呼ぶものという感じで定着している気がするので もっと原始的な方法を紹介したい。 方法は簡単で、 ①IEnumerator型を戻り値に持つメソッドを書く(コルーチン部分) ②IEnumerator型の変数Aに①のメソッドを代入(?)する ③AのMoveNextメソッドを呼ぶ だけでいい。 コードで書くと下記のようになる。 // Start void Start() { m_Enumerator = coOutputGaisenmon(); } // Update void Update() { if( m_Enumerator != null ) { bool ret
このページを最初にブックマークしてみませんか?
『posposi.blog.fc2.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く