【Unity】移動&衝突判定するキリンと崩れる箱をさくっと作ってみる
今回はキリンの衝突判定を行いたいと思います。
技術書の序盤に載ってるような超基礎なのですがあんまし参考ブログ見なかったので備忘録までに。ちなみに前回作ったARとは似ているようで実は全然違うものです。あしからず。
さて、Unityでは面倒な物理計算は全てAPIがこなしてくれちゃったりします。なのでキリンが箱にぶつかって箱が倒れるのも以外にサクッと出来てしまうものです。
では、レッツトライ。
1.下準備
まずは動くキリンを作りましょう。新規プロジェクトでCharactorContorollerを選んでください。
Sceneに必要なのはキリンのオブジェクトとぶつかる対象となる箱の山です。Capsuleを配置して[Hierarchy]から"CharactorContoroller"を追加して上げましょう。
これでキー操作でCapsuleが動くようになりました。スピードとかは[Inspector]の値設定で適当にいじってください。
このままだとキリンの見た目にならないのでCapsuleとキリンのモデリングをくっつけて上げます。
くっつけるのは簡単でScene上でCapsuleにキリンのオブジェクトを融合させて、HierarchyでキリンをCapsureの小要素にした上げるだけです。
2.cubeを配置して物理的に存在させる
では倒すためのブロックを配意していきましょう。
まずは1つ、cubeオブジェクトをSceneに追加します。このまま動かすと物理的にはcubeも存在するのでその上にキリンを乗せたりする事は出来ますが相互の物理は干渉されません。cubeは今はただ存在しているだけなので、3Dの世界の重力も何も影響を受けません。
ちゃんと物質として存在させる為に"Rigidbody"というコンポーネントを足してあげましょう。コンポーネントはオブジェクトを選択した状態でメニューのCompornentから追加出来ます。[Compornent]➡[Physics]➡[Rigidbody]で追加してください。
これでこのcubeはこの世界の物理的干渉を受ける事になりました。
ちなみにこのcube、一個一個に設定しないとそれぞれ物理干渉しないのですが、command+Dでコピーすれば設定もそのまま量産出来るので沢山同じオブジェクトを作りたいときは便利す。
3.キリンパワー注入
さて、ここでキリンにcubeを押す物理パワーを与えましょう。
[project]の[Assets]➡[Source]➡[Scripts]に新規JavaScriptファイルを作ってください。このJSにキャラクターのシナリオってやつを書いていきます。今回は押すためのファイルなので[pusher]というファイル名にしました。で、Rigidbodyを押すための関数「OnControllerColliderHit」を追加します。
JSファイルをエディタで開いて下記をペーストしてください。
var pushPower = 2.0;
function OnControllerColliderHit (hit : ControllerColliderHit)
{
var body : Rigidbody = hit.collider.attachedRigidbody;
// no rigidbody
if (body == null || body.isKinematic)
return;
// We dont want to push objects below us
if (hit.moveDirection.y < -0.3)
return;
// Calculate push direction from move direction,
// we only push objects to the sides never up and down
var pushDir = Vector3 (hit.moveDirection.x, 0, hit.moveDirection.z);
// If you know how fast your character is trying to move,
// then you can also multiply the push velocity by that.
// Apply the push
body.velocity = pushDir * pushPower;
}
ちなみにデフォルトでstart()とかの関数がJSファイルに書かれてますが、これは無視して消してしまいましょう
エディタを修正したら保存して、projectからsceneのキリンにドラッグ&ドロップします。この時、コンポーネントを追加するのは小要素のキリンじゃなくて親要素のcapsuleの方って事に気をつけてください。これでコンポーネントが自動で追加(便利!)されてinspectorでも見れるようになります。
で、実行すると
無事cubeを押せるキリンが誕生しました。
次回こそはコイツに炎を吐かせて箱を倒したいと思います。