Unityでのシーン切り替えは重いという言葉をよく耳にします。 しかし、どこまで重いのかについては根拠となる情報が存在せず・・・ 今回はひとつのGameObjectのみが存在したシーンを再読み込みすることで切り替えにかかる時間を計測してみました。 以下計測用スクリプトです。 using UnityEngine; usi...
Unity( 5 )
Category
Unityではゲーム実行中にStatsからFPSを表示できます。 しかし、実際に表示してみると大きなばらつきがあることに気が付くと思います。 内部でどのように算出しているのかはよくわかりません・・・ そこで、よりばらつきの少ない方法で算出する方法をご紹介します。 基本的な考え方は1秒間にUpdateが何回走ったかをカウ...
Updateは可変フレームレートで呼び出されるメソッドです。 このメソッドの呼び出し頻度によりFPSが定まります。 一方でFixedUpdateは物理シミュレーション用にUpdateとは独立して呼び出されるメソッドです。 こちらは常に一定のフレームレートで呼び出されます。 デフォルトでは0.01秒ごとに呼び出されます。...
前回の続きです。 Rigidbodyがアタッチされたオブジェクトが風に煽られて動く動作を応用し、爆風で放射状にオブジェクトを吹っ飛ばす動作を実現したいと思います。 爆風はある点を基準に放射状に風が生じるものと仮定します。 すなわち、風を発生させるオブジェクトから吹っ飛ばされる対象のオブジェクトに向かうベクトルを取得し、...
前回の記事で空気抵抗を独自に実装する方法を紹介しました。 今回はこの応用として風に煽られてオブジェクトが移動する動作を実現する方法を紹介したいと思います。 ・風オブジェクトの実装 フィールド上に風を発生させるスクリプトを実装し、これをゲームオブジェクトにアタッチして風オブジェクトとします。 この時、局所的に風を発生させ...
スクリプト上から自分の子階層にあるゲームオブジェクトをFindで取得する場合、以下のようにスクリプトを記述します。 var obj = GameObject.Find("GameObject"); しかし、上記の検索で取得できるのはアクティブになっているゲームオブジェクトのみで、非アクティブなゲームオブジェクトは取得で...
Unityでは空気抵抗を受けるシミュレーションが可能です。 対象のゲームオブジェクトにRigidbodyをアタッチし、Dragの値を0以外に設定すれば実現できます。 しかし、この空気抵抗の動作には大きな問題があります。 通常、物体に及ぼす空気抵抗は力であるため、質量が異なる同じ形状・大きさの物体を落下するとき、質量の軽...
前回の記事で個別のゲームオブジェクトに対して重力加速度を与える方法について紹介しました。 今回はこの応用として引力の発生する小さな惑星に物体が落ちるような動きを実現してみたいと思います。 ・単純な方法 大きさが一定の加速度ベクトルを球体の中心に向かせれば惑星に物体が落下するようになります。 using UnityEng...
Unityでは、Rigidbodyをアタッチしたオブジェクトに対して剛体の物理演算が働きます。 物体が落下していく動きも物理演算です。 物体の落下動作は、物体に重力加速度g(=9.81)をy軸の負の方向に与えることによって実現しています。 重力加速度の設定はメニューの「Edit」→「Project Settings」→...
Unityではスクリプトで定義したクラスのフィールドをPublicにするか属性を頭に付けることでインスペクタから編集できるようになります。 しかし、自前で定義した構造体やクラスは上記のことをやってもインスペクタ上には表示されません。 たとえば以下のようなスクリプトをゲームオブジェクトにアタッチした場合、インスペクタ上で...