[Unity] オブジェクトを爆風で吹っ飛ばす

前回の続きです。
Rigidbodyがアタッチされたオブジェクトが風に煽られて動く動作を応用し、爆風で放射状にオブジェクトを吹っ飛ばす動作を実現したいと思います。

爆風はある点を基準に放射状に風が生じるものと仮定します。
すなわち、風を発生させるオブジェクトから吹っ飛ばされる対象のオブジェクトに向かうベクトルを取得し、このベクトルの向きに風速を発生させればよいです。
スクリプトは以下のようになります。

using UnityEngine;
using System.Collections;

public class Explosion : MonoBehaviour {
    public float coefficient;   // 空気抵抗係数
    public float speed;         // 爆風の速さ

	void OnTriggerStay(Collider col) {
        if ( col.rigidbody == null ) {
            return;
        }

        // 風速計算
        var velocity = (col.transform.position - transform.position).normalized * speed;

	    // 風力与える
        col.rigidbody.AddForce(coefficient * velocity);
	}
}

上記スクリプトを以下の要領でアタッチします。

 1.新規ゲームオブジェクト作成

 2.Rigidbodyをアタッチ・設定

 3.ShpereColliderをアタッチ・設定、Is Triggerにチェックを入れる

 4.スクリプトをアタッチ

 5.空気抵抗係数(Coefficient)、爆風の速さ(Speed)の設定

これで放射状の風が発生し、オブジェクトが四方八方に飛ばされるようになります。

explosion-demo

今回は厳密な風速計算は行っていないですが、それらしく見せることが目的なら十分ではないかと思います。