71 lines
2.1 KiB
C#
71 lines
2.1 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
|
|
|
|
using UnityEngine;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.Physics)]
|
|
[Tooltip("Gets info on the last collision event and store in variables. See Unity Physics docs.")]
|
|
public class GetCollisionInfo : FsmStateAction
|
|
{
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Get the GameObject hit.")]
|
|
public FsmGameObject gameObjectHit;
|
|
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Get the relative velocity of the collision.")]
|
|
public FsmVector3 relativeVelocity;
|
|
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Get the relative speed of the collision. Useful for controlling reactions. E.g., selecting an appropriate sound fx.")]
|
|
public FsmFloat relativeSpeed;
|
|
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Get the world position of the collision contact. Useful for spawning effects etc.")]
|
|
public FsmVector3 contactPoint;
|
|
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Get the collision normal vector. Useful for aligning spawned effects etc.")]
|
|
public FsmVector3 contactNormal;
|
|
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Get the name of the physics material of the colliding GameObject. Useful for triggering different effects. Audio, particles...")]
|
|
public FsmString physicsMaterialName;
|
|
|
|
public override void Reset()
|
|
{
|
|
gameObjectHit = null;
|
|
relativeVelocity = null;
|
|
relativeSpeed = null;
|
|
contactPoint = null;
|
|
contactNormal = null;
|
|
physicsMaterialName = null;
|
|
}
|
|
|
|
void StoreCollisionInfo()
|
|
{
|
|
if (Fsm.CollisionInfo == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
gameObjectHit.Value = Fsm.CollisionInfo.gameObject;
|
|
relativeSpeed.Value = Fsm.CollisionInfo.relativeVelocity.magnitude;
|
|
relativeVelocity.Value = Fsm.CollisionInfo.relativeVelocity;
|
|
physicsMaterialName.Value = Fsm.CollisionInfo.collider.material.name;
|
|
|
|
if (Fsm.CollisionInfo.contacts != null && Fsm.CollisionInfo.contacts.Length > 0)
|
|
{
|
|
contactPoint.Value = Fsm.CollisionInfo.contacts[0].point;
|
|
contactNormal.Value = Fsm.CollisionInfo.contacts[0].normal;
|
|
}
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
StoreCollisionInfo();
|
|
|
|
Finish();
|
|
}
|
|
}
|
|
} |