前回の続きです。 Rigidbodyがアタッチされたオブジェクトが風に煽られて動く動作を応用し、爆風で放射状にオブジェクトを吹っ飛ばす動作を実現したいと思います。 爆風はある点を基準に放射状に風が生じるものと仮定します。 すなわち、風を発生させるオブジェクトから吹っ飛ばされる対象のオブジェクトに向かうベクトルを取得し、...
August 2014
Month
前回の記事で空気抵抗を独自に実装する方法を紹介しました。 今回はこの応用として風に煽られてオブジェクトが移動する動作を実現する方法を紹介したいと思います。 ・風オブジェクトの実装 フィールド上に風を発生させるスクリプトを実装し、これをゲームオブジェクトにアタッチして風オブジェクトとします。 この時、局所的に風を発生させ...
スクリプト上から自分の子階層にあるゲームオブジェクトをFindで取得する場合、以下のようにスクリプトを記述します。 var obj = GameObject.Find("GameObject"); しかし、上記の検索で取得できるのはアクティブになっているゲームオブジェクトのみで、非アクティブなゲームオブジェクトは取得で...
Unityでは空気抵抗を受けるシミュレーションが可能です。 対象のゲームオブジェクトにRigidbodyをアタッチし、Dragの値を0以外に設定すれば実現できます。 しかし、この空気抵抗の動作には大きな問題があります。 通常、物体に及ぼす空気抵抗は力であるため、質量が異なる同じ形状・大きさの物体を落下するとき、質量の軽...
前回の記事で個別のゲームオブジェクトに対して重力加速度を与える方法について紹介しました。 今回はこの応用として引力の発生する小さな惑星に物体が落ちるような動きを実現してみたいと思います。 ・単純な方法 大きさが一定の加速度ベクトルを球体の中心に向かせれば惑星に物体が落下するようになります。 using UnityEng...
Unityでは、Rigidbodyをアタッチしたオブジェクトに対して剛体の物理演算が働きます。 物体が落下していく動きも物理演算です。 物体の落下動作は、物体に重力加速度g(=9.81)をy軸の負の方向に与えることによって実現しています。 重力加速度の設定はメニューの「Edit」→「Project Settings」→...
Unityではスクリプトで定義したクラスのフィールドをPublicにするか属性を頭に付けることでインスペクタから編集できるようになります。 しかし、自前で定義した構造体やクラスは上記のことをやってもインスペクタ上には表示されません。 たとえば以下のようなスクリプトをゲームオブジェクトにアタッチした場合、インスペクタ上で...
2ヶ月くらい前のゲームジャムで嵌っていた問題のメモ書きです。 玉転がしゲームで以下のように水平面に球体を落として平面を回転させたとき、ボールがその場で止まってしまいます。 分かり易くするため、ボールがスリープ状態のときは赤色に、そうでないときは緑色に表示しています。 ボールが平面に完全に静止したあとにスリープし、その後...
Unityを扱っているときに嵌ったことのメモです。 Rigidbodyを使ったGameObjectに対してRigidbody.AddForce()メソッドで力や加速度を加えたい場合、以下のようにして毎フレーム呼び出されるコールバックの中で処理を行うとします。 void Update() { var body = Get...
8月より制作を開始したゲーム「風使い(仮)」の進捗状況です。 ボールが風に煽られて空を飛ぶようになりました。 ボールが風に煽られて飛ぶ動作は簡単な物理演算で実現しています。 操作はマウスで行うようにしています。 まだ静止画のみしかお見せ出来ない状態です… 左クリックでカメラ前方に、右クリック+ドラッグでカメラ横方向にド...