Nanashi-softプログラマ専用Unityでゲーム開発


◇Unityでゲーム開発 -JavaScriptで当たり判定-

ゲームオブジェクト同士の衝突を検知する方法です

Planeの上空に Cubeを置いて,cubeのスクリプトに落下するようなコードを記述する
function Update () {
	transform.Translate(0, -1 * Time.deltaTime, 0);
}
そうすると,Cubeは Planeを突き抜けて移動していってしまう

これを,衝突するようにしたい場合は,
・Hierarchyで Cubeを選択
・メニューの Component→Physics→Rigidbodyを選択
そうすると,Inspectorに Rigidbodyが追加される


この Rigidbodyの1つのポイントが Use Gravityプロパティです
・Use Gravityにチェックを入れると自動的に落下するので,スクリプトでの移動記述が不要になる
・スクリプトでY軸移動させるなら,Use Gravityのチェックを外す
・スクリプトでの移動と,Use Gravityの落下計算はマージされる

例えば,Use Gravityにチェックを入れて,X軸方向に動かす記述をした場合,
横に移動しながら落下して,Plane上をそのまま這っていきます
function Update () {
	transform.Translate(-1 * Time.deltaTime, 0, 0);
}
もし Cubeと Planeとうまく衝突しなかった場合に見直す点
・Cubeの Inspector→Rigifbody→Is Kinematicがチェックされている
・Cubeの Inspector→Box Colider→Is Triggerがチェックされている
・Planeの Inspector→Mesh Colider→Is Triggerがチェックされている
・Planeの Inspector→Mesh Colider→Convexがチェックされている
デフォルトはきちんと設定されているので,わからないのに余計なとこ触るな! と言う話です('-'*)


もう1つの Rigidbodのポイントは,コールバックメソッドの追加です

・衝突した時にコールバックされる
衝突した時に1回だけ来ます(ここがポイント)
function OnCollisionEnter(col : Collision){
	//衝突判定用の処理をする
	if(col.gameObject.name == "「ゲームオブジェクト名」"){
		//それと衝突した
	}
}
これで,衝突したら○○する。という記述が可能になります


TOPプログラマ専用Unityでゲーム開発

Melonbooks DL