オブジェクトが吹っ飛ぶ処理の追加

さて、これでサーキットに配置するオブジェクトやゾンビの基本形ができたわけですが…テストプレイしてもらえば分かる通り、それらはこのままでは衝突してもあまり吹っ飛ばないので気持ちよくありません。そこで今回は車が何らかのオブジェクトに衝突したら、相手のオブジェクトが派手に吹っ飛ぶような処理を追加しましょう。

スポンサーリンク

オブジェクトを吹っ飛ばすプログラム

まずはCubeのように最初は静止しているオブジェクト用のプログラムです。新しいC#スクリプトを作成し、名前を「BlowOff」に変更して以下のプログラムを書いてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BlowOff : MonoBehaviour
{
	[SerializeField]
	float impulse = 300;

	bool isCollision = false;

	Rigidbody rigidBody;
	Rigidbody playerRigidBody;
	GameObject player;

	void Start()
    {
		rigidBody = GetComponent<Rigidbody>();

		//プレイヤーをタグで検索し、Rigidbodyを取得
		player = GameObject.FindGameObjectWithTag("Player");
		playerRigidBody = player.GetComponent<Rigidbody>();
	}

	//衝突判定
	void OnCollisionEnter(Collision collision)
	{
		if (collision.gameObject.tag == "Player" && isCollision == false)
		{
			//吹っ飛ばす
			Vector3 playerVelocity = playerRigidBody.velocity;
			rigidBody.AddForce(playerVelocity * impulse, ForceMode.Impulse);
			rigidBody.AddForce(Vector3.up * impulse, ForceMode.Impulse);

			isCollision = true;
		}
	}
}

衝突の瞬間、プレイヤーの進行方向と真上のそれぞれにAddForceのImpulseで瞬間的な力を加えているのがポイントです。なお変数Impluseは加える衝撃力に掛ける係数です。適当に調整してください。

ゾンビのプログラムの改良

次にゾンビのプログラムを改良します。前回のプログラムのコメントの112行目、コメント「吹っ飛ばす」と書いてある部分の下に以下のコードを追加してください。

//吹っ飛ばす
Vector3 playerVelocity = playerRigidBody.velocity;
rigidBody.AddForce(playerVelocity * impulse, ForceMode.Impulse);
rigidBody.AddForce(Vector3.up * impulse, ForceMode.Impulse);

こちらも先述のプログラムと処理は同じなので説明は省きます。

これでゾンビやCubeが派手に吹っ飛ぶようになりました。

衝突時に吹っ飛ぶ処理

次のページ→(準備中…)