【Unity】CharactorControllerで衝突判定
void OnControllerColliderHit(ControllerColliderHit hit)を使って、相手に力を加えることができます
using UnityEngine;
public class PushObject : MonoBehaviour
{
CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
public float pushPower = 2.0F;
void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
// リジッドボディなし
if (body == null || body.isKinematic)
return;
// 下のオブジェクトを押さないようにしたい
if (hit.moveDirection.y < -0.3f)
return;
// 移動方向から押す方向を計算する。
// オブジェクトを上下に押すのではなく、横にだけ押します。
Vector3 pushDir = new(hit.moveDirection.x, 0, hit.moveDirection.z);
// キャラクターが移動しようとする速度がわかっている場合。
// 押し出し速度にそれを乗じることができます。
// プッシュを適用する
body.velocity = pushDir * pushPower;
}
void Update()
{
/*
if (controller.collisionFlags == CollisionFlags.None)
{
print("Free floating!");
}
if ((controller.collisionFlags & CollisionFlags.Sides) != 0)
{
print("Touching sides!");
}
if (controller.collisionFlags == CollisionFlags.Sides)
{
print("Only touching sides, nothing else!");
}
if ((controller.collisionFlags & CollisionFlags.Above) != 0)
{
print("Touching Ceiling!");
}
if (controller.collisionFlags == CollisionFlags.Above)
{
print("Only touching Ceiling, nothing else!");
}
if ((controller.collisionFlags & CollisionFlags.Below) != 0)
{
print("Touching ground!");
}
if (controller.collisionFlags == CollisionFlags.Below)
{
print("Only touching ground, nothing else!");
}
*/
}
}
ディスカッション
コメント一覧
まだ、コメントがありません