Net.Like.Xue.Tokyo/Assets/Plugins/Character Controller Pro/Utilities/Scripts/HitInfo.cs

101 lines
2.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Lightbug.Utilities
{
public readonly struct HitInfo
{
public readonly Vector3 normal;
public readonly Vector3 point;
public readonly Vector3 direction;
public readonly float distance;
public readonly bool hit;
public readonly Transform transform;
public readonly Collider2D collider2D;
public readonly Collider collider3D;
public readonly Rigidbody2D rigidbody2D;
public readonly Rigidbody rigidbody3D;
public readonly int layer;
public HitInfo(ref RaycastHit raycastHit, Vector3 castDirection) : this()
{
if (raycastHit.collider == null)
return;
hit = true;
point = raycastHit.point;
normal = raycastHit.normal;
distance = raycastHit.distance;
direction = castDirection;
collider3D = raycastHit.collider;
rigidbody3D = collider3D.attachedRigidbody;
transform = collider3D.transform;
layer = transform.gameObject.layer;
}
public HitInfo(ref RaycastHit2D raycastHit, Vector3 castDirection) : this()
{
if (raycastHit.collider == null)
return;
hit = true;
point = raycastHit.point;
normal = raycastHit.normal;
distance = raycastHit.distance;
direction = castDirection;
collider2D = raycastHit.collider;
rigidbody2D = collider2D.attachedRigidbody;
transform = collider2D.transform;
layer = transform.gameObject.layer;
}
public bool Is2D => collider2D != null;
public bool IsRigidbody => rigidbody2D != null || rigidbody3D != null;
public bool IsKinematicRigidbody
{
get
{
if (rigidbody2D != null)
return rigidbody2D.isKinematic;
else if (rigidbody3D != null)
return rigidbody3D.isKinematic;
return false;
}
}
public bool IsDynamicRigidbody
{
get
{
if (rigidbody2D != null)
return rigidbody2D.bodyType == RigidbodyType2D.Dynamic;
else if (rigidbody3D != null)
return !rigidbody3D.isKinematic;
return false;
}
}
}
}