feat(scripting): expose PhysX rigidbody and raycast APIs
This commit is contained in:
72
managed/GameScripts/PhysicsApiProbe.cs
Normal file
72
managed/GameScripts/PhysicsApiProbe.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user