73 lines
2.8 KiB
C#
73 lines
2.8 KiB
C#
|
|
using XCEngine;
|
||
|
|
|
||
|
|
namespace Gameplay
|
||
|
|
{
|
||
|
|
public sealed class PhysicsApiProbe : MonoBehaviour
|
||
|
|
{
|
||
|
|
public bool InitialHasRigidbody;
|
||
|
|
public bool AddedRigidbody;
|
||
|
|
public bool HasRigidbodyAfterAdd;
|
||
|
|
public bool RigidbodyLookupSucceeded;
|
||
|
|
public int ObservedBodyType;
|
||
|
|
public float ObservedMass;
|
||
|
|
public float ObservedLinearDamping;
|
||
|
|
public float ObservedAngularDamping;
|
||
|
|
public bool ObservedUseGravity;
|
||
|
|
public bool ObservedEnableCCD;
|
||
|
|
public Vector3 ObservedLinearVelocity;
|
||
|
|
public Vector3 ObservedAngularVelocity;
|
||
|
|
public bool RaycastHitDetected;
|
||
|
|
public string RaycastHitName = string.Empty;
|
||
|
|
public float RaycastHitDistance;
|
||
|
|
public bool RaycastHitWasTrigger;
|
||
|
|
public Vector3 RaycastHitPoint;
|
||
|
|
public Vector3 RaycastHitNormal;
|
||
|
|
|
||
|
|
public void Start()
|
||
|
|
{
|
||
|
|
InitialHasRigidbody = HasComponent<Rigidbody>();
|
||
|
|
AddedRigidbody = AddComponent<Rigidbody>() != null;
|
||
|
|
HasRigidbodyAfterAdd = HasComponent<Rigidbody>();
|
||
|
|
RigidbodyLookupSucceeded = TryGetComponent(out Rigidbody rigidbody);
|
||
|
|
|
||
|
|
if (rigidbody != null)
|
||
|
|
{
|
||
|
|
rigidbody.bodyType = PhysicsBodyType.Dynamic;
|
||
|
|
rigidbody.mass = 2.5f;
|
||
|
|
rigidbody.linearDamping = 0.25f;
|
||
|
|
rigidbody.angularDamping = 0.5f;
|
||
|
|
rigidbody.useGravity = false;
|
||
|
|
rigidbody.enableCCD = true;
|
||
|
|
rigidbody.linearVelocity = new Vector3(0.0f, 0.0f, 0.0f);
|
||
|
|
rigidbody.angularVelocity = new Vector3(0.0f, 1.0f, 0.0f);
|
||
|
|
|
||
|
|
ObservedBodyType = (int)rigidbody.bodyType;
|
||
|
|
ObservedMass = rigidbody.mass;
|
||
|
|
ObservedLinearDamping = rigidbody.linearDamping;
|
||
|
|
ObservedAngularDamping = rigidbody.angularDamping;
|
||
|
|
ObservedUseGravity = rigidbody.useGravity;
|
||
|
|
ObservedEnableCCD = rigidbody.enableCCD;
|
||
|
|
ObservedLinearVelocity = rigidbody.linearVelocity;
|
||
|
|
ObservedAngularVelocity = rigidbody.angularVelocity;
|
||
|
|
|
||
|
|
rigidbody.AddForce(new Vector3(10.0f, 0.0f, 0.0f), ForceMode.Impulse);
|
||
|
|
}
|
||
|
|
|
||
|
|
RaycastHitDetected = Physics.Raycast(
|
||
|
|
new Vector3(0.0f, 3.0f, 0.0f),
|
||
|
|
new Vector3(0.0f, 0.0f, -1.0f),
|
||
|
|
out RaycastHit hit,
|
||
|
|
10.0f);
|
||
|
|
|
||
|
|
if (RaycastHitDetected)
|
||
|
|
{
|
||
|
|
RaycastHitName = hit.gameObject != null ? hit.gameObject.name : string.Empty;
|
||
|
|
RaycastHitDistance = hit.distance;
|
||
|
|
RaycastHitWasTrigger = hit.isTrigger;
|
||
|
|
RaycastHitPoint = hit.point;
|
||
|
|
RaycastHitNormal = hit.normal;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|