暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. namespace Unity.VisualScripting
  2. {
  3. /// <summary>
  4. /// Gets the value of a field or property via reflection.
  5. /// </summary>
  6. public sealed class GetMember : MemberUnit
  7. {
  8. public GetMember() { }
  9. public GetMember(Member member) : base(member) { }
  10. [DoNotSerialize]
  11. [MemberFilter(Fields = true, Properties = true, WriteOnly = false)]
  12. public Member getter
  13. {
  14. get
  15. {
  16. return member;
  17. }
  18. set
  19. {
  20. member = value;
  21. }
  22. }
  23. [DoNotSerialize]
  24. [PortLabelHidden]
  25. public ValueOutput value { get; private set; }
  26. protected override void Definition()
  27. {
  28. base.Definition();
  29. value = ValueOutput(member.type, nameof(value), Value);
  30. if (member.isPredictable)
  31. {
  32. value.Predictable();
  33. }
  34. if (member.requiresTarget)
  35. {
  36. Requirement(target, value);
  37. }
  38. }
  39. protected override bool IsMemberValid(Member member)
  40. {
  41. return member.isAccessor && member.isGettable;
  42. }
  43. private object Value(Flow flow)
  44. {
  45. var target = member.requiresTarget ? flow.GetValue(this.target, member.targetType) : null;
  46. return member.Get(target);
  47. }
  48. #region Analytics
  49. public override AnalyticsIdentifier GetAnalyticsIdentifier()
  50. {
  51. var aid = new AnalyticsIdentifier
  52. {
  53. Identifier = $"{member.targetType.FullName}.{member.name}(Get)",
  54. Namespace = member.targetType.Namespace
  55. };
  56. aid.Hashcode = aid.Identifier.GetHashCode();
  57. return aid;
  58. }
  59. #endregion
  60. }
  61. }