ObjectNode.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using UnityEditor.Graphing;
  2. using UnityEngine;
  3. namespace UnityEditor.ShaderGraph
  4. {
  5. [Title("Input", "Scene", "Object")]
  6. sealed class ObjectNode : AbstractMaterialNode
  7. {
  8. const string kOutputSlotName = "Position";
  9. const string kOutputSlot1Name = "Scale";
  10. public const int OutputSlotId = 0;
  11. public const int OutputSlot1Id = 1;
  12. public ObjectNode()
  13. {
  14. name = "Object";
  15. UpdateNodeAfterDeserialization();
  16. }
  17. public override void UpdateNodeAfterDeserialization()
  18. {
  19. AddSlot(new Vector3MaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, Vector3.zero));
  20. AddSlot(new Vector3MaterialSlot(OutputSlot1Id, kOutputSlot1Name, kOutputSlot1Name, SlotType.Output, Vector3.zero));
  21. RemoveSlotsNameNotMatching(new[] { OutputSlotId, OutputSlot1Id });
  22. }
  23. public override string GetVariableNameForSlot(int slotId)
  24. {
  25. switch (slotId)
  26. {
  27. case OutputSlot1Id:
  28. return @"$precision3(length($precision3(UNITY_MATRIX_M[0].x, UNITY_MATRIX_M[1].x, UNITY_MATRIX_M[2].x)),
  29. length($precision3(UNITY_MATRIX_M[0].y, UNITY_MATRIX_M[1].y, UNITY_MATRIX_M[2].y)),
  30. length($precision3(UNITY_MATRIX_M[0].z, UNITY_MATRIX_M[1].z, UNITY_MATRIX_M[2].z)))";
  31. default:
  32. return "SHADERGRAPH_OBJECT_POSITION";
  33. }
  34. }
  35. }
  36. }