Files
2024-11-20 15:21:28 +01:00

107 lines
3.0 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.GameObject)]
[ActionTarget(typeof(GameObject), "gameObject", true)]
[Tooltip("Creates a Game Object, usually using a Prefab.")]
public class CreateObject : FsmStateAction
{
[RequiredField]
[Tooltip("GameObject to create. Usually a Prefab.")]
public FsmGameObject gameObject;
[Tooltip("Optional Spawn Point.")]
public FsmGameObject spawnPoint;
[Tooltip("Position. If a Spawn Point is defined, this is used as a local offset from the Spawn Point position.")]
public FsmVector3 position;
[Tooltip("Rotation. NOTE: Overrides the rotation of the Spawn Point.")]
public FsmVector3 rotation;
[UIHint(UIHint.Variable)]
[Tooltip("Optionally store the created object.")]
public FsmGameObject storeObject;
#if PLAYMAKER_LEGACY_NETWORK
[Tooltip("Use Network.Instantiate to create a Game Object on all clients in a networked game.")]
public FsmBool networkInstantiate;
[Tooltip("Usually 0. The group number allows you to group together network messages which allows you to filter them if so desired.")]
public FsmInt networkGroup;
#endif
public override void Reset()
{
gameObject = null;
spawnPoint = null;
position = new FsmVector3 { UseVariable = true };
rotation = new FsmVector3 { UseVariable = true };
storeObject = null;
#if PLAYMAKER_LEGACY_NETWORK
networkInstantiate = false;
networkGroup = 0;
#endif
}
public override void OnEnter()
{
var go = gameObject.Value;
if (go != null)
{
var spawnPosition = Vector3.zero;
var spawnRotation = Vector3.zero;
if (spawnPoint.Value != null)
{
spawnPosition = spawnPoint.Value.transform.position;
if (!position.IsNone)
{
spawnPosition += position.Value;
}
spawnRotation = !rotation.IsNone ? rotation.Value : spawnPoint.Value.transform.eulerAngles;
}
else
{
if (!position.IsNone)
{
spawnPosition = position.Value;
}
if (!rotation.IsNone)
{
spawnRotation = rotation.Value;
}
}
#if PLAYMAKER_LEGACY_NETWORK && !(UNITY_FLASH || UNITY_NACL || UNITY_METRO || UNITY_WP8 || UNITY_WIIU || UNITY_PSM || UNITY_WEBGL || UNITY_PS3 || UNITY_PS4 || UNITY_XBOXONE)
GameObject newObject;
if (!networkInstantiate.Value)
{
newObject = (GameObject)Object.Instantiate(go, spawnPosition, Quaternion.Euler(spawnRotation));
}
else
{
newObject = (GameObject)Network.Instantiate(go, spawnPosition, Quaternion.Euler(spawnRotation), networkGroup.Value);
}
#else
var newObject = (GameObject)Object.Instantiate(go, spawnPosition, Quaternion.Euler(spawnRotation));
#endif
storeObject.Value = newObject;
//newObject.transform.position = spawnPosition;
//newObject.transform.eulerAngles = spawnRotation;
}
Finish();
}
}
}