環境
Unity 2019.1.1f1
目標
ある物体が床とか壁のオブジェクトに当たったら反射して進むようにする
前提条件
ただし、どの物体もisTriggerがOnである
ある物体にはRigidbodyがアタッチされている
ある物体はRigidbodyのvelocityで動いている(positionを毎フレーム動かす処理をしていない)
内容
様々な事情で物理挙動をoffにしている場合に
反射っぽい動きを実現する方法
以下の通り
Rigidbody rb; float speed; void OnTriggerEnter(Collider other){ //1.動いてる物体(this)と当たる物体(other)から反射ベクトルをとる Vector3 reflectVec = Vector3.Reflect(this.transform.forward, other.transform.up); //2.動いてる物体のrotationを変更する this.transform.rotation = Quaternion.LookRotation(reflectVec.normalized); //3.動いてる物体のrigidbodyのベロシティを変更する rb.velocity = speed * this.transform.forward; }
で、こんな感じのができるはずたぶん
(当たり判定が雑過ぎて当たる前に反射して見えるけど問題ない)
追記:
ちなみに大人しくisTriggerをoffにしてやった方が楽
衝突したcollisionのcontactsにnormalっていうのがあるから
それとthis.transform.forwardの反射ベクトルをとればいい