From 21e186f75b504d832d9c7bef0456edd7d5d3155e Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 8 Sep 2021 10:52:35 +0800 Subject: +behavior design --- .../Runtime/Actions/Reflection/GetPropertyValue.cs | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Assets/ThirdParty/Behavior Designer/Runtime/Actions/Reflection/GetPropertyValue.cs (limited to 'Assets/ThirdParty/Behavior Designer/Runtime/Actions/Reflection/GetPropertyValue.cs') diff --git a/Assets/ThirdParty/Behavior Designer/Runtime/Actions/Reflection/GetPropertyValue.cs b/Assets/ThirdParty/Behavior Designer/Runtime/Actions/Reflection/GetPropertyValue.cs new file mode 100644 index 00000000..be81eee4 --- /dev/null +++ b/Assets/ThirdParty/Behavior Designer/Runtime/Actions/Reflection/GetPropertyValue.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using System; +using System.Reflection; + +namespace BehaviorDesigner.Runtime.Tasks +{ + [TaskDescription("Gets the value from the property specified. Returns success if the property was retrieved.")] + [HelpURL("http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=148")] + [TaskCategory("Reflection")] + [TaskIcon("{SkinColor}ReflectionIcon.png")] + public class GetPropertyValue : Action + { + [Tooltip("The GameObject to get the property of")] + public SharedGameObject targetGameObject; + [Tooltip("The component to get the property of")] + public SharedString componentName; + [Tooltip("The name of the property")] + public SharedString propertyName; + [Tooltip("The value of the property")] + [RequiredField] + public SharedVariable propertyValue; + + public override TaskStatus OnUpdate() + { + if (propertyValue == null) { + Debug.LogWarning("Unable to get property - property value is null"); + return TaskStatus.Failure; + } + + var type = TaskUtility.GetTypeWithinAssembly(componentName.Value); + if (type == null) { + Debug.LogWarning("Unable to get property - type is null"); + return TaskStatus.Failure; + } + + var component = GetDefaultGameObject(targetGameObject.Value).GetComponent(type); + if (component == null) { + Debug.LogWarning("Unable to get the property with component " + componentName.Value); + return TaskStatus.Failure; + } + + // If you are receiving a compiler error on the Windows Store platform see this topic: + // http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=46 + var property = component.GetType().GetProperty(propertyName.Value); + propertyValue.SetValue(property.GetValue(component, null)); + + return TaskStatus.Success; + } + + public override void OnReset() + { + targetGameObject = null; + componentName = null; + propertyName = null; + propertyValue = null; + } + } +} \ No newline at end of file -- cgit v1.1-26-g67d0