テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityで接触したブロック達を吹っ飛ばす

物理演算的には正しくなくとも、表現的に物体がぶつかった時にふっとばすのはよくある事だ。また爆弾等でふっ飛ばしたい場合もある。そんな時は「周囲のコライダーを全部持ってきて、その中でrigidbodyがあるオブジェクトに対してAddForceを実行」みたいな事をすると良さそうだ。

nomal crash
下はRigidbody2dを使った場合。


void OnCollisionEnter2D(Collision2D coll)
{
var colliders = Physics2D.CircleCastAll(transform.position, 1, Vector2.zero)

foreach( var col in colliders )
{
if( col.collider.rigidbody2D != null )
{
var diff = col.transform.position - transform.position;
col.collider.rigidbody2D.AddForce(diff * 0.06f, ForceMode2D.Impulse);
}
}
}