11 Commits

27 changed files with 949 additions and 68 deletions

View File

@@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7a686a47eee2fa44cb0a34b5d86e4d5e, type: 3} m_Script: {fileID: 11500000, guid: 7a686a47eee2fa44cb0a34b5d86e4d5e, type: 3}
m_Name: GroundedCheckBT m_Name: GroundedCheckBT
m_EditorClassIdentifier: m_EditorClassIdentifier:
_serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":476.0,"y":327.0},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"0"},{"_position":{"x":550.0,"y":433.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"1"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":458.0,"y":522.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"2"},{"_action":{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"inputVector3":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"$type":"NodeCanvas.Tasks.Actions.SetAirMovement"},"_position":{"x":396.0,"y":655.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"3"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":715.0,"y":523.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"4"}],"connections":[{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}' _serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":476.0,"y":327.0},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"0"},{"_position":{"x":550.0,"y":433.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"1"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":458.0,"y":522.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"2"},{"_position":{"x":522.0,"y":632.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"3"},{"_action":{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"inputVector3":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"$type":"NodeCanvas.Tasks.Actions.SetAirMovement"},"_position":{"x":399.0,"y":775.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"4"},{"_action":{"airMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"inputVector3":{},"$type":"NodeCanvas.Tasks.Actions.SetAirMovement"},"_position":{"x":576.0,"y":776.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"5"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":715.0,"y":523.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"6"}],"connections":[{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"6"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"5"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}'
_objectReferences: [] _objectReferences: []
_graphSource: _graphSource:
_version: 3.31 _version: 3.31

View File

@@ -12,16 +12,19 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f945e777233a59f4aba40aeca29093a6, type: 3} m_Script: {fileID: 11500000, guid: f945e777233a59f4aba40aeca29093a6, type: 3}
m_Name: PlayerLocomotionFSM m_Name: PlayerLocomotionFSM
m_EditorClassIdentifier: m_EditorClassIdentifier:
_serializedGraph: '{"type":"NodeCanvas.StateMachines.FSM","nodes":[{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":10.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":0.3},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":559.9924,"y":711.7622},"$type":"NodeCanvas.StateMachines.ActionState","$id":"0"},{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":15.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":0.2},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":1161.288,"y":522.152},"$type":"NodeCanvas.StateMachines.ActionState","$id":"1"},{"_position":{"x":430.6569,"y":381.1322},"$type":"NodeCanvas.StateMachines.AnyState","$id":"2"},{"_position":{"x":465.0,"y":561.0},"$type":"NodeCanvas.StateMachines.EmptyState","$id":"3"}],"connections":[{"_condition":{"actionName":{"_value":"Sprint"},"actionValue":{"_value":""},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"desiredVector3":{"_value":{"z":1.0}},"tolerance":{"_value":0.5},"negate":{},"$type":"NodeCanvas.Tasks.Conditions.GetMovementInputDotProduct"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{"isGrounded":{"_propertyPath":"UnityEngine.CharacterController.isGrounded","_name":"isGrounded","_id":"321e55c7-f93e-4667-a0dc-559eb61c6898","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean, _serializedGraph: '{"type":"NodeCanvas.StateMachines.FSM","nodes":[{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":12.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":10.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"facingDirection","_targetVariableID":"c713d622-aafb-43e7-ae0e-ac0b86a85a37"},"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection,
Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":559.9924,"y":711.7622},"$type":"NodeCanvas.StateMachines.ActionState","$id":"0"},{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":30.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"facingDirection","_targetVariableID":"c713d622-aafb-43e7-ae0e-ac0b86a85a37"},"valueB":{"_value":2},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection,
Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":916.0607,"y":852.7302},"$type":"NodeCanvas.StateMachines.ActionState","$id":"1"},{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":20.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":2.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":1161.288,"y":522.152},"$type":"NodeCanvas.StateMachines.ActionState","$id":"2"},{"_position":{"x":430.6569,"y":381.1322},"$type":"NodeCanvas.StateMachines.AnyState","$id":"3"},{"_position":{"x":465.0,"y":561.0},"$type":"NodeCanvas.StateMachines.EmptyState","$id":"4"}],"connections":[{"_condition":{"actionName":{"_value":"Sprint"},"actionValue":{"_value":""},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"timeout":{"_value":0.1},"$type":"NodeCanvas.Tasks.Conditions.Timeout"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"desiredVector3":{"_value":{"z":1.0}},"tolerance":{"_value":0.5},"negate":{},"$type":"NodeCanvas.Tasks.Conditions.GetMovementInputDotProduct"},"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"4"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{"isGrounded":{"_propertyPath":"UnityEngine.CharacterController.isGrounded","_name":"isGrounded","_id":"321e55c7-f93e-4667-a0dc-559eb61c6898","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean,
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"groundMoveDirection":{"_name":"groundMoveDirection","_id":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Vector3, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"groundMoveDirection":{"_name":"groundMoveDirection","_id":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Vector3,
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"rotationSpeed":{"_name":"rotationSpeed","_id":"d888730f-97df-4288-bb99-1f6c8a34a7c5","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[System.Single, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"rotationSpeed":{"_name":"rotationSpeed","_id":"d888730f-97df-4288-bb99-1f6c8a34a7c5","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[System.Single,
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}}' mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"facingDirection":{"_name":"facingDirection","_id":"c713d622-aafb-43e7-ae0e-ac0b86a85a37","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[Reset.Player.Movement.PlayerFacingDirection,
Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}}}}'
_objectReferences: [] _objectReferences: []
_graphSource: _graphSource:
_version: 3.31 _version: 3.31
_category: _category:
_comments: _comments:
_translation: {x: 1, y: -175} _translation: {x: -337, y: -84}
_zoomFactor: 0.9967056 _zoomFactor: 1
_haltSerialization: 0 _haltSerialization: 0
_externalSerializationFile: {fileID: 0} _externalSerializationFile: {fileID: 0}

View File

@@ -0,0 +1,19 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1726182683, guid: a4865f1ab4504ed8a368670db22f409c, type: 3}
m_Name: AOTGenerationConfig
m_EditorClassIdentifier:
automateBeforeBuilds: 0
deleteDllAfterBuilds: 1
AutomateForAllAOTPlatforms: 1
automateForPlatforms: 0900000014000000
supportSerializedTypes: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 516c69467762d38429c69cc7107c0555
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,136 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 772478971, guid: a4865f1ab4504ed8a368670db22f409c, type: 3}
m_Name: ColorPaletteManager
m_EditorClassIdentifier:
colorPalettes:
- name: Country
showAlpha: 0
colors:
- {r: 0.776, g: 0.651, b: 0.349, a: 1}
- {r: 0.863, g: 0.761, b: 0.631, a: 1}
- {r: 0.91, g: 0.831, b: 0.686, a: 1}
- {r: 0.961, g: 0.902, b: 0.788, a: 1}
- {r: 0.753, g: 0.714, b: 0.667, a: 1}
- {r: 0.478, g: 0.573, b: 0.431, a: 1}
- {r: 0.314, g: 0.427, b: 0.31, a: 1}
- {r: 0.596, g: 0.345, b: 0.235, a: 1}
- {r: 0.545, g: 0.329, b: 0.318, a: 1}
- {r: 0.647, g: 0.204, b: 0.227, a: 1}
- {r: 0.435, g: 0.161, b: 0.063, a: 1}
- {r: 0.357, g: 0.333, b: 0.278, a: 1}
- {r: 0.976, g: 0.98, b: 0.961, a: 1}
- {r: 0.165, g: 0.271, b: 0.11, a: 1}
- name: Beach
showAlpha: 0
colors:
- {r: 0.996, g: 0.906, b: 0.459, a: 1}
- {r: 0.314, g: 0.592, b: 0.035, a: 1}
- {r: 0.486, g: 0.953, b: 0.875, a: 1}
- {r: 0.996, g: 0.82, b: 0.212, a: 1}
- {r: 1, g: 0.769, b: 0.165, a: 1}
- {r: 0.804, g: 0.835, b: 0.753, a: 1}
- {r: 1, g: 0.769, b: 0.165, a: 1}
- {r: 1, g: 0.702, b: 0.063, a: 1}
- {r: 1, g: 0.898, b: 0.569, a: 1}
- name: Fall
showAlpha: 0
colors:
- {r: 0.82, g: 0.722, b: 0.318, a: 1}
- {r: 0.537, g: 0.192, b: 0.153, a: 1}
- {r: 0.996, g: 0.812, b: 0.012, a: 1}
- {r: 1, g: 0.431, b: 0.02, a: 1}
- {r: 0.937, g: 0.267, b: 0.094, a: 1}
- {r: 0.42, g: 0.212, b: 0.18, a: 1}
- {r: 0.992, g: 0.651, b: 0.004, a: 1}
- {r: 0.89, g: 0.353, b: 0.086, a: 1}
- {r: 1, g: 0.443, b: 0.004, a: 1}
- {r: 0.682, g: 0.275, b: 0.137, a: 1}
- {r: 0.306, g: 0.231, b: 0.114, a: 1}
- {r: 0.384, g: 0.416, b: 0.082, a: 1}
- {r: 0.165, g: 0.157, b: 0.008, a: 1}
- {r: 0.906, g: 0.635, b: 0.227, a: 1}
- {r: 0.82, g: 0.722, b: 0.318, a: 1}
- {r: 0.745, g: 0.435, b: 0.031, a: 1}
- {r: 0.765, g: 0.682, b: 0.569, a: 1}
- {r: 0.18, g: 0.149, b: 0.075, a: 1}
- {r: 0.702, g: 0.451, b: 0.059, a: 1}
- name: Passion
showAlpha: 0
colors:
- {r: 0.925, g: 0.682, b: 0.624, a: 1}
- {r: 0.188, g: 0.114, b: 0.224, a: 1}
- {r: 0.349, g: 0.11, b: 0.231, a: 1}
- {r: 0.435, g: 0.267, b: 0.357, a: 1}
- name: Sepia
showAlpha: 0
colors:
- {r: 0.353, g: 0.098, b: 0.02, a: 1}
- {r: 0.663, g: 0.188, b: 0.114, a: 1}
- {r: 0.906, g: 0.643, b: 0.082, a: 1}
- {r: 0.996, g: 0.839, b: 0.322, a: 1}
- {r: 0.486, g: 0.392, b: 0.02, a: 1}
- {r: 0.294, g: 0.235, b: 0.012, a: 1}
- name: Floral
showAlpha: 0
colors:
- {r: 0.855, g: 0.518, b: 0.412, a: 1}
- {r: 0.827, g: 0.294, b: 0.333, a: 1}
- {r: 0.737, g: 0.118, b: 0.208, a: 1}
- {r: 0.549, g: 0.149, b: 0.235, a: 1}
- {r: 0.949, g: 0.925, b: 0.784, a: 1}
- {r: 0.945, g: 0.882, b: 0.69, a: 1}
- {r: 0.871, g: 0.812, b: 0.698, a: 1}
- {r: 0.4, g: 0.196, b: 0.243, a: 1}
- {r: 0.271, g: 0.157, b: 0.227, a: 1}
- name: Underwater
showAlpha: 0
colors:
- {r: 0.663, g: 0.416, b: 0.733, a: 1}
- {r: 0.2, g: 0.6, b: 0.698, a: 1}
- {r: 0.11, g: 0.49, b: 0.698, a: 1}
- {r: 0.439, g: 0.627, b: 0.227, a: 1}
- {r: 0, g: 0.357, b: 0.604, a: 1}
- {r: 0.067, g: 0.271, b: 0.353, a: 1}
- name: Breeze
showAlpha: 0
colors:
- {r: 0.706, g: 1, b: 0, a: 1}
- {r: 0.651, g: 1, b: 0.404, a: 1}
- {r: 0.122, g: 1, b: 0.514, a: 1}
- {r: 0.216, g: 0.894, b: 0.961, a: 1}
- {r: 0.4, g: 1, b: 0.882, a: 1}
- {r: 0.027, g: 0.792, b: 0.8, a: 1}
- name: Clovers
showAlpha: 0
colors:
- {r: 0.431, g: 0.549, b: 0.102, a: 1}
- {r: 0.671, g: 0.714, b: 0.071, a: 1}
- {r: 0.969, g: 0.949, b: 0.831, a: 1}
- {r: 0.886, g: 0.902, b: 0.702, a: 1}
- {r: 0.753, g: 0.824, b: 0.627, a: 1}
- {r: 0.404, g: 0.6, b: 0.4, a: 1}
- name: Tropical
showAlpha: 0
colors:
- {r: 0.953, g: 0.647, b: 0.804, a: 1}
- {r: 0.965, g: 0.741, b: 0.871, a: 1}
- {r: 0.949, g: 0.549, b: 0.643, a: 1}
- {r: 0.992, g: 0.659, b: 0.498, a: 1}
- {r: 0.976, g: 0.792, b: 0.729, a: 1}
- {r: 0.984, g: 0.855, b: 0.725, a: 1}
- {r: 0.259, g: 0.882, b: 0.663, a: 1}
- {r: 0.349, g: 0.753, b: 0.78, a: 1}
- {r: 0.725, g: 0.976, b: 0.91, a: 1}
- {r: 0.647, g: 0.745, b: 0.957, a: 1}
- {r: 0.725, g: 0.863, b: 0.973, a: 1}
- {r: 0.89, g: 0.945, b: 0.996, a: 1}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d6a3216c4fd1c1a499b50f354c57f048
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 188390376, guid: a4865f1ab4504ed8a368670db22f409c, type: 3}
m_Name: ImportSettingsConfig
m_EditorClassIdentifier:
automateBeforeBuild: 1

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f6e0f897646bbb54b8306b7d6c6d955d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because one or more lines are too long

View File

@@ -10,19 +10,21 @@ using Reset.Player.Movement;
namespace NodeCanvas.Tasks.Actions { namespace NodeCanvas.Tasks.Actions {
[Category("Reset/Movement")] [Category("Reset/Movement")]
public class AddJump : ActionTask<CharacterController> { public class AddJump : ActionTask<CharacterController> {
public BBParameter<float> jumpStrength;
public BBParameter<Vector3> airMoveDirection; public BBParameter<Vector3> airMoveDirection;
public BBParameter<float> jumpPower;
public BBParameter<PlayerFacingDirection> playerFacingDirection; [Space(5)]
public BBParameter<float> jumpStrength;
[Range(0f, 1f)] [SliderField(0, 1)]
public BBParameter<float> standStillJumpStrength; public BBParameter<float> standStillJumpStrength;
public BBParameter<float> jumpPower;
[Tooltip("Determines how much current movement vectors into jump direction")] [Tooltip("Determines how much current movement vectors into jump direction")]
[SliderField(0, 1)]
public BBParameter<float> currentVelocityInheritence; public BBParameter<float> currentVelocityInheritence;
public BBParameter<Vector3> directionalForce; public BBParameter<Vector3> directionalForce;
[SliderField(0, 1)]
public BBParameter<float> directionalForceStrength; public BBParameter<float> directionalForceStrength;
protected override string info { protected override string info {
@@ -72,9 +74,12 @@ namespace NodeCanvas.Tasks.Actions {
// Check threshold of current XZ velocity- if it's too close to zero, use the jumpStrength for jumping velocity. If it's not, use the current velocity // Check threshold of current XZ velocity- if it's too close to zero, use the jumpStrength for jumping velocity. If it's not, use the current velocity
float velocityThreshold = 4f; float velocityThreshold = 4f;
float magnitudeZeroDifference = Mathf.Clamp(currentVelocityVector3.magnitude - velocityThreshold, 0f, Mathf.Infinity) / velocityThreshold; // Divided by maximum to return a 0-1 value. Clamping not required. float magnitudeZeroDifference = Mathf.Clamp(currentVelocityVector3.magnitude - velocityThreshold, 0f, Mathf.Infinity) / velocityThreshold; // Divided by maximum to return a 0-1 value. Clamping not required.
float outputVelocity = Mathf.Lerp(jumpStrength.value, currentVelocityVector3.magnitude, Math.Clamp(magnitudeZeroDifference, 0f, 1f)); float outputHoritontalVelocity = Mathf.Lerp(jumpStrength.value, currentVelocityVector3.magnitude, Math.Clamp(magnitudeZeroDifference, 0f, 1f));
outputVelocity = Mathf.Min(outputVelocity, Mathf.Lerp(standStillJumpStrength.value * jumpStrength.value, jumpStrength.value * .4f, magnitudeZeroDifference)); outputHoritontalVelocity = Mathf.Min(outputHoritontalVelocity, Mathf.Lerp(standStillJumpStrength.value * jumpStrength.value, jumpStrength.value * .4f, magnitudeZeroDifference));
// Do the same for directional jump strength
outputHoritontalVelocity = Mathf.Lerp(outputHoritontalVelocity, jumpStrength.value, directionalForceStrength.value);
// Remap the dot to set -1 (opposing direction) to -.5f, and 1 (same direciton) to 1.2f // Remap the dot to set -1 (opposing direction) to -.5f, and 1 (same direciton) to 1.2f
// This is done to allow some sideways jumping direction change, but none backwards, and all forwards // This is done to allow some sideways jumping direction change, but none backwards, and all forwards
@@ -94,7 +99,7 @@ namespace NodeCanvas.Tasks.Actions {
outputDirection = Camera.main.transform.rotation.Flatten(0, null, 0) * outputDirection; outputDirection = Camera.main.transform.rotation.Flatten(0, null, 0) * outputDirection;
// Set air move direction // Set air move direction
airMoveDirection.value += outputDirection * outputVelocity; airMoveDirection.value += outputDirection * outputHoritontalVelocity;
} }
EndAction(true); EndAction(true);
} }

View File

@@ -3,15 +3,12 @@ using ParadoxNotion.Design;
using UnityEngine; using UnityEngine;
using Reset.Player.Movement; using Reset.Player.Movement;
namespace NodeCanvas.Tasks.Actions { namespace NodeCanvas.Tasks.Actions {
[Category("Reset/Movement")] [Category("Reset/Movement")]
public class CalculateAirMovement : ActionTask<Transform>{ public class CalculateAirMovement : ActionTask<Transform>{
public BBParameter<Vector3> airMoveDirection; public BBParameter<Vector3> airMoveDirection;
public BBParameter<Vector3> groundMoveDirection; public BBParameter<Vector3> groundMoveDirection; // Unused on 7/29/25, delete if still unusued later
public BBParameter<PlayerFacingDirection> playerFacingDirection;
private float airControlPower = 1f; private float airControlPower = 1f;
@@ -25,7 +22,7 @@ namespace NodeCanvas.Tasks.Actions {
//Call EndAction() to mark the action as finished, either in success or failure. //Call EndAction() to mark the action as finished, either in success or failure.
//EndAction can be called from anywhere. //EndAction can be called from anywhere.
protected override void OnExecute(){ protected override void OnExecute(){
airControlPower = 1f;
} }
//Called once per frame while the action is active. //Called once per frame while the action is active.
@@ -34,7 +31,7 @@ namespace NodeCanvas.Tasks.Actions {
airMoveDirection.value = Vector3.Lerp(airMoveDirection.value, Vector3.zero, .7f * Time.deltaTime); airMoveDirection.value = Vector3.Lerp(airMoveDirection.value, Vector3.zero, .7f * Time.deltaTime);
// Decay Air Control power // Decay Air Control power
airControlPower = Mathf.Lerp(airControlPower, 0f, 3f * Time.deltaTime); airControlPower = Mathf.Lerp(airControlPower, 0f, 2f * Time.deltaTime);
// Add air control // Add air control
Vector3 inputVector3 = new(agent.GetComponent<PlayerControls>().rawMoveInput.x, 0f, agent.GetComponent<PlayerControls>().rawMoveInput.y); Vector3 inputVector3 = new(agent.GetComponent<PlayerControls>().rawMoveInput.x, 0f, agent.GetComponent<PlayerControls>().rawMoveInput.y);
@@ -47,7 +44,7 @@ namespace NodeCanvas.Tasks.Actions {
//Called when the task is disabled. //Called when the task is disabled.
protected override void OnStop() { protected override void OnStop() {
groundMoveDirection.value = agent.GetComponent<CharacterController>().velocity; // groundMoveDirection.value = agent.GetComponent<CharacterController>().velocity;
EndAction(true); EndAction(true);
} }

View File

@@ -0,0 +1,121 @@
using System;
using NodeCanvas.Framework;
using ParadoxNotion.Design;
using ParadoxNotion.Serialization.FullSerializer;
using Sirenix.OdinInspector;
using UnityEngine;
namespace NodeCanvas.Tasks.Actions {
[Category("Reset")]
[Description("Update the agent's position and rotation (scale too, sure whynot) either instantly or over time.")]
public class ChangeAgentTransform : ActionTask<CharacterController>{
public enum TransformProperty{
Position,
Rotation,
Scale
}
protected override string info {
get{
string basicText = string.Format($"Player {targetProperty.ToString()} to {(targetValue.isPresumedDynamic ? targetValue.name : targetValue.value)}");
basicText += relativeToSelf.value ? ", relative to Self" : "";
return basicText;
}
}
public TransformProperty targetProperty;
[ParadoxNotion.Design.ShowIf("targetProperty", 0), Space(5)]
public BBParameter<bool> forcePositionChange;
public BBParameter<Vector3> targetValue;
public BBParameter<bool> relativeToSelf;
[Tooltip("Set this to the current position if you're trying to rotate by 'this much'. Keep it zero for world space values.")]
public BBParameter<Vector3> relativeValue;
public BBParameter<bool> changeInstantly;
public BBParameter<float> smoothing;
private Vector3 currentVel;
//Use for initialization. This is called only once in the lifetime of the task.
//Return null if init was successfull. Return an error string otherwise
protected override string OnInit() {
return null;
}
//This is called once each time the task is enabled.
//Call EndAction() to mark the action as finished, either in success or failure.
//EndAction can be called from anywhere.
protected override void OnExecute() {
switch (targetProperty) {
case TransformProperty.Position:
Vector3 relativeUseValue = relativeValue.value;
if (relativeToSelf.value) {
relativeUseValue = agent.transform.position;
}
if (changeInstantly.value) {
agent.Move(agent.transform.position.DirectionTo(relativeUseValue + targetValue.value));
}
break;
case TransformProperty.Rotation:
agent.transform.rotation = Quaternion.LookRotation(relativeValue.value) * Quaternion.Euler(targetValue.value);
break;
case TransformProperty.Scale:
break;
default:
throw new ArgumentOutOfRangeException();
}
if (changeInstantly.value) {
EndAction(true);
}
}
//Called once per frame while the action is active.
protected override void OnUpdate() {
switch (targetProperty) {
case TransformProperty.Position:
Vector3 relativeUseValue = relativeValue.value;
if (relativeToSelf.value) {
relativeUseValue = agent.transform.position;
}
if (!changeInstantly.value) {
Vector3 targetPosition = relativeUseValue + targetValue.value;
// agent.transform.position = Vector3.SmoothDamp(agent.transform.position, targetPosition,
// ref currentVel, smoothing.value * Time.deltaTime);
agent.Move((agent.transform.position.DirectionTo(targetPosition)).normalized * .5f * Mathf.Lerp(0, 1, Vector3.Distance(agent.transform.position, targetPosition)) * smoothing.value * Time.deltaTime);
EndAction();
}
break;
case TransformProperty.Rotation:
agent.transform.rotation = Quaternion.Euler(relativeValue.value) * Quaternion.Euler(targetValue.value);
break;
case TransformProperty.Scale:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
//Called when the task is disabled.
protected override void OnStop() {
}
//Called when the task is paused.
protected override void OnPause() {
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b77e2b9ac9aad644480508d5a86f4006

View File

@@ -0,0 +1,55 @@
using NodeCanvas.Framework;
using ParadoxNotion.Design;
using UnityEngine;
namespace NodeCanvas.Tasks.Conditions {
[Category("Reset")]
public class CheckEnvironmentObserver : ConditionTask<PlayerEnvironmentManager>{
public BBParameter<string> observerLabel;
public BBParameter<RaycastHit> outputHitTo;
//Use for initialization. This is called only once in the lifetime of the task.
//Return null if init was successfull. Return an error string otherwise
protected override string OnInit(){
var observer = agent.FindObserverFromString(observerLabel.value);
if (observer == null) {
return $"An environment observer couldn't be found under the name {observerLabel.value}. Check your spelling and if it exists??";
}
return null;
}
//Called whenever the condition gets enabled.
protected override void OnEnable() {
agent.FindObserverFromString(observerLabel.value).active = true;
}
//Called whenever the condition gets disabled.
protected override void OnDisable() {
agent.FindObserverFromString(observerLabel.value).active = false;
}
//Called once per frame while the condition is active.
//Return whether the condition is success or failure.
protected override bool OnCheck(){
if (agent.EvaluateFromString(observerLabel.value) == true) {
if (outputHitTo.isDefined) {
EnvironmentObserver hitObserver = agent.FindObserverFromString(observerLabel.value, agent.observers);
if (hitObserver.hit.Equals(default(RaycastHit))) {
Debug.LogError("You just tried to pull a RaycastHit for later use from an environment observer, but no RaycastHit is available. Don't forget that CastType.Box and CastType.Sphere CANNOT spit one out!");
} else {
outputHitTo.value = hitObserver.hit;
return true;
}
}
return true;
}
return false;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 95ad4bd047d9654478597c68a81b01a0

View File

@@ -0,0 +1,55 @@
using NodeCanvas.Framework;
using ParadoxNotion.Design;
using UnityEngine;
namespace NodeCanvas.Tasks.Actions {
[Category("Reset")]
[Description("Breaks down an incoming RaycastHit into it's constituent parts for later use.")]
public class DecomposeRaycastHit : ActionTask{
public BBParameter<RaycastHit> raycastHit;
public BBParameter<Transform> transform;
public BBParameter<Collider> collider;
public BBParameter<GameObject> gameObject;
public BBParameter<float> distance;
public BBParameter<Vector3> normal;
public BBParameter<Vector3> point;
//Use for initialization. This is called only once in the lifetime of the task.
//Return null if init was successfull. Return an error string otherwise
protected override string OnInit() {
return null;
}
//This is called once each time the task is enabled.
//Call EndAction() to mark the action as finished, either in success or failure.
//EndAction can be called from anywhere.
protected override void OnExecute(){
if (transform.isDefined){ transform.value = raycastHit.value.transform; }
if (collider.isDefined){ collider.value = raycastHit.value.collider; }
if (gameObject.isDefined){ gameObject.value = raycastHit.value.transform.gameObject; }
if (distance.isDefined){ distance.value = raycastHit.value.distance; }
if (normal.isDefined){ normal.value = raycastHit.value.normal; }
if (point.isDefined){ point.value = raycastHit.value.point; }
EndAction(true);
}
//Called once per frame while the action is active.
protected override void OnUpdate() {
}
//Called when the task is disabled.
protected override void OnStop() {
}
//Called when the task is paused.
protected override void OnPause() {
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 79f7cbb75d876f84b8edfae676ba324c

View File

@@ -12,7 +12,8 @@ namespace Reset.Player.Movement{
public enum PlayerFacingDirection{ public enum PlayerFacingDirection{
Target = 0, Target = 0,
Movement, Movement,
MatchCamera MatchCamera,
Static
} }
} }
@@ -43,6 +44,7 @@ namespace NodeCanvas.Tasks.Actions {
private float currentRotSpeed; private float currentRotSpeed;
private float lastLookMagnitude; private float lastLookMagnitude;
private Quaternion targetRotation; private Quaternion targetRotation;
private Vector3 currentMoveDir;
// References // References
private PlayerControls controls; private PlayerControls controls;
@@ -55,7 +57,7 @@ namespace NodeCanvas.Tasks.Actions {
// Append the late update method to actually happen on late update // Append the late update method to actually happen on late update
MonoManager.current.onLateUpdate += LateUpdate; MonoManager.current.onLateUpdate += LateUpdate;
// What // Set ingitial rotation power
currentRotSpeed = rotationSpeed.value; currentRotSpeed = rotationSpeed.value;
// Reference to controls // Reference to controls
@@ -68,7 +70,7 @@ namespace NodeCanvas.Tasks.Actions {
//Call EndAction() to mark the action as finished, either in success or failure. //Call EndAction() to mark the action as finished, either in success or failure.
//EndAction can be called from anywhere. //EndAction can be called from anywhere.
protected override void OnExecute(){ protected override void OnExecute(){
currentMoveDir = groundMoveDirection.value;
} }
//Called once per frame while the action is active. //Called once per frame while the action is active.
@@ -91,23 +93,33 @@ namespace NodeCanvas.Tasks.Actions {
if (controls.rawMoveInput.magnitude == 0) { break; } if (controls.rawMoveInput.magnitude == 0) { break; }
// Set desired rotation to input direction, with respect to camera rotation // Set desired rotation to input direction, with respect to camera rotation
targetRotation = Quaternion.LookRotation(new Vector3(controls.rawMoveInput.x, 0, controls.rawMoveInput.y)) * if (agent.isGrounded){
targetRotation = Quaternion.LookRotation(currentMoveDir) *
Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0f, null, 0f)); Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0f, null, 0f));
} else {
targetRotation = Quaternion.LookRotation(airMoveDirection.value);
}
break; break;
case PlayerFacingDirection.MatchCamera: case PlayerFacingDirection.MatchCamera:
// Craft a new rotation that flattens the camera's rotation to the ground // Craft a new rotation that flattens the camera's rotation to the ground
// Needed to keep the character from inheriting the camera's height-rotation // Needed to keep the character from inheriting the camera's height-rotation
targetRotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0, null, 0)); targetRotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0, null, 0));
break; break;
case PlayerFacingDirection.Static:
targetRotation = agent.transform.rotation;
break;
} }
// Construct move direction // Construct move direction
Vector3 finalMoveDir = Vector3.zero; Vector3 finalMoveDir = Vector3.zero;
Vector3 gravityMoveDirection; Vector3 gravityMoveDirection;
// Change how input is managed based on facing state
currentMoveDir = Vector3.Slerp(currentMoveDir, groundMoveDirection.value, currentRotSpeed * Time.deltaTime);
// Add input movement // Add input movement
if (agent.isGrounded){ if (agent.isGrounded){
finalMoveDir += groundMoveDirection.value + Vector3.down * .03f; finalMoveDir += currentMoveDir + Vector3.down * .03f;
gravityMoveDirection = new(0f, jumpPower.value + (Physics.gravity.y *.3f), 0f); gravityMoveDirection = new(0f, jumpPower.value + (Physics.gravity.y *.3f), 0f);
} else { } else {
finalMoveDir += airMoveDirection.value; finalMoveDir += airMoveDirection.value;
@@ -127,7 +139,7 @@ namespace NodeCanvas.Tasks.Actions {
} }
// Set final rotation // Set final rotation
agent.transform.rotation = Quaternion.Lerp(agent.transform.rotation, targetRotation, 10f * Time.deltaTime); agent.transform.rotation = Quaternion.Lerp(agent.transform.rotation, targetRotation, 10f * Time.deltaTime).Flatten(0, null, 0);
// ???? Moved this above but don't remember if this needs to be here still // ???? Moved this above but don't remember if this needs to be here still
if (agent.isGrounded) { if (agent.isGrounded) {

View File

@@ -13,4 +13,7 @@ public static class MathExtensions{
return (to - origin).normalized; return (to - origin).normalized;
} }
public static Color Alpha(this Color input, float newAlpha){
return new Color(input.r, input.g, input.b, newAlpha);
}
} }

View File

@@ -113,6 +113,8 @@ public class CameraSettingsProcessor : MonoBehaviour{
values.orbitFollowCenterHeight.targetValue, ref values.orbitFollowCenterHeight.velocityRef, values.orbitFollowCenterHeight.targetValue, ref values.orbitFollowCenterHeight.velocityRef,
values.orbitFollowCenterHeight.smoothing); values.orbitFollowCenterHeight.smoothing);
orbit.Orbits.Center.Radius = Mathf.SmoothDamp(orbit.Orbits.Center.Radius, orbit.Orbits.Center.Radius = Mathf.SmoothDamp(orbit.Orbits.Center.Radius,
values.orbitFollowCenterRadius.targetValue, ref values.orbitFollowCenterRadius.velocityRef, values.orbitFollowCenterRadius.targetValue, ref values.orbitFollowCenterRadius.velocityRef,
values.orbitFollowCenterRadius.smoothing); values.orbitFollowCenterRadius.smoothing);

View File

@@ -0,0 +1,349 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using Drawing;
using Sirenix.OdinInspector;
using Sirenix.Serialization;
using Unity.Mathematics;
using UnityEngine.Serialization;
[Serializable]
public class EnvironmentObserver{
enum LabelDrawingLocation{
PlayerOffset,
HitLocation,
IntersectingLength,
}
public enum CastType{
Ray,
BoxOverlap,
SphereOverlap,
BoxCast,
SphereCast
}
[PropertySpace(0, 5), LabelWidth(60)]
public string label;
[PropertySpace(0, 10), LabelWidth(60)]
public CastType castType;
[Button(ButtonSizes.Large), GUIColor("@GetObserverStatusColorStatic(active, hit)"), PropertyOrder(-1), PropertySpace(5, 5)]
public void Active(){
active = !active;
}
[HideInInspector]
public bool active;
// Parameters for Cast cast types
[FoldoutGroup("Settings")] public float length;
[FoldoutGroup("Settings")] public Vector3 direction;
[FoldoutGroup("Settings")] public Vector3 offset;
[PropertySpace(0, 5), FoldoutGroup("Settings")] public LayerMask ignoreLayers = ~0;
[ShowIfGroup("Settings/CastsOnly", VisibleIf = "@castType == CastType.SphereCast || castType == CastType.SphereOverlap")]
[FoldoutGroup("Settings")] public float width;
// Parameters for Overlap cast types
[ShowIfGroup("Settings/3DOnly", VisibleIf = "@castType == CastType.BoxCast && castType != CastType.BoxOverlap")] [FoldoutGroup("Settings")]
public Vector3 size;
[ShowIfGroup("Settings/3DOnly")]
public Vector3 rotation;
[HideInInspector]
public RaycastHit hit;
[HideInInspector]
public Collider[] overlapHits;
[FoldoutGroup("Text")]
[BoxGroup("Text/Label")] public bool drawLabel;
[ShowInInspector, SerializeField] [BoxGroup("Text/Label")] LabelDrawingLocation labelTextLocation;
[BoxGroup("Text/Label")] public float labelSize;
[BoxGroup("Text/Label")] public Vector3 labelLocationOffset;
[BoxGroup("Text/Label")] public Vector3 labelRotationOffset;
[BoxGroup("Text/Hit")] public bool drawHitName;
[ShowInInspector, SerializeField] [BoxGroup("Text/Hit")] LabelDrawingLocation hitTextLocation;
[BoxGroup("Text/Hit")] public float hitTextSize;
[BoxGroup("Text/Hit")] public Vector3 hitLocationOffset;
[BoxGroup("Text/Hit")] public Vector3 hitRotationOffset;
[SerializeReference, PropertySpace(5, 5)]
public List<EnvironmentObserver> children;
// NOTE: I had a ref for a RaycastHit here that would correspond to hit but idk if it's needed.
public bool Evaluate(GameObject player){
if (active) {
// Remove player's layer from LayerMask.
ignoreLayers -= player.layer;
// Set some of the variables used later during casting
Vector3 relativeStart = player.transform.position + offset;
Vector3 relativeStartWithRotation = player.transform.position + player.transform.rotation * offset ;
switch (castType) {
case CastType.Ray:
Physics.Raycast(relativeStart, player.transform.rotation * direction, out hit, length, ignoreLayers);
break;
case CastType.BoxOverlap:
overlapHits = Physics.OverlapBox(relativeStartWithRotation, size / 2f,
player.transform.rotation * Quaternion.Euler(rotation), ignoreLayers);
if (overlapHits.Length > 0) {
return true;
};
break;
case CastType.SphereOverlap:
break;
case CastType.BoxCast:
// TODO: Make this not an if statement. Check that it works with NodeCanvas first
if (Physics.BoxCast(relativeStartWithRotation, size / 2f,
player.transform.rotation * Quaternion.Euler(rotation) * direction,
out hit, player.transform.rotation * Quaternion.Euler(rotation), length,
ignoreLayers)
) {
};
break;
case CastType.SphereCast:
// TODO: Make this not an if statement. Check that it works with NodeCanvas first
if (Physics.SphereCast(relativeStartWithRotation, width / 2f,
player.transform.rotation * Quaternion.Euler(rotation) * direction,
out hit, length,
ignoreLayers)
) {
};
break;
}
if (hit.transform != null) {
return true;
}
}
return false;
}
public void DrawObserverGizmo(GameObject player){
Vector3 relativeStart = player.transform.position + offset;
Vector3 relativeStartWithRotation = player.transform.position + player.transform.rotation * (offset);
// Setup the variables for boxcast, spherecast, etc
// Create an offset start point for the center of the wirebox, since gizmos are drawn with their pivot in the center.
Vector3 offsetWithRotationAndLength = (Quaternion.LookRotation(direction) * Quaternion.Euler(rotation)) * (Vector3.forward * (length / 2));
Vector3 offsetFromCenter = relativeStartWithRotation + player.transform.rotation * offsetWithRotationAndLength;
// Also create a rotation for use with the gizmos. Mainly just to shorten the lines
Quaternion gizmosRotation = player.transform.rotation * Quaternion.LookRotation(direction) * Quaternion.Euler(rotation);
Vector3 firstBoxOffset = gizmosRotation * (Vector3.forward * size.z);
Color gizmoColor = Evaluate(player) ? Color.green : Color.red;
gizmoColor = active ? gizmoColor : Color.gray;
using (Draw.ingame.WithColor(gizmoColor)){
switch (castType) {
case CastType.Ray:
Draw.ingame.Line(relativeStart, relativeStart + (player.transform.rotation * direction.normalized) * length);
break;
case CastType.BoxOverlap:
Draw.ingame.WireBox(relativeStartWithRotation, player.transform.rotation * Quaternion.Euler(rotation), size);
break;
case CastType.SphereCast:
Draw.ingame.SolidCircle(relativeStartWithRotation, relativeStartWithRotation - Camera.main.transform.position, width * 1, gizmoColor.Alpha(.5f));
Draw.ingame.WireCapsule(relativeStartWithRotation, relativeStartWithRotation + gizmosRotation * (Vector3.forward * (length - width / 2)), width);
break;
case CastType.BoxCast:
// Draw the gizmos for the boxcast
Draw.ingame.WireBox(offsetFromCenter, gizmosRotation, new float3(size.x, size.y, length));
Draw.ingame.SolidBox(relativeStartWithRotation, gizmosRotation, size, gizmoColor.Alpha(.1f));
Draw.ingame.WireBox(relativeStartWithRotation, gizmosRotation, size);
break;
default:
throw new ArgumentOutOfRangeException();
}
Draw.ingame.SolidCircle(relativeStartWithRotation, relativeStartWithRotation - Camera.main.transform.position, .4f);
Draw.ingame.SolidCircle(hit.point, hit.point - Camera.main.transform.position, .4f);
// Set up variables for label (not hit name)
Vector3 labelStartPos = Vector3.zero;
switch (labelTextLocation) {
case LabelDrawingLocation.PlayerOffset:
labelStartPos = player.transform.position;
break;
case LabelDrawingLocation.IntersectingLength:
labelStartPos = offsetFromCenter;
break;
case LabelDrawingLocation.HitLocation:{
if (hit.transform != null) {
labelStartPos = hit.point;
}
break;
}
}
// Draw label
if (drawLabel) {
Draw.ingame.Label3D(
labelStartPos + labelLocationOffset,
gizmosRotation * Quaternion.Euler(labelRotationOffset),
label,
labelSize,
LabelAlignment.MiddleLeft,
gizmoColor
);
}
// Set up variables for hit name
// Since the label is already drawn just use the previous startPos
switch (labelTextLocation) {
case LabelDrawingLocation.PlayerOffset:
labelStartPos = player.transform.position;
break;
case LabelDrawingLocation.IntersectingLength:
labelStartPos = offsetFromCenter;
break;
case LabelDrawingLocation.HitLocation:{
if (hit.transform != null) {
labelStartPos = hit.point;
}
break;
}
}
// Draw hitname
if (drawLabel) {
Draw.ingame.Label3D(
labelStartPos + labelLocationOffset,
gizmosRotation * Quaternion.Euler(labelRotationOffset),
label,
hitTextSize,
LabelAlignment.MiddleLeft,
gizmoColor
);
}
Sirenix.Utilities.Editor.GUIHelper.RequestRepaint();
}
}
static Color GetObserverStatusColorStatic(bool active, RaycastHit hit){
if (active) {
if (hit.Equals(default(RaycastHit))) {
return Color.green;
}
return Color.red;
}
return Color.gray;
}
}
public class PlayerEnvironmentManager : MonoBehaviour{
[OdinSerialize]
public List<EnvironmentObserver> observers;
void Start(){
CheckDuplicateLabels(observers);
}
// TODO: Not working.
void CheckDuplicateLabels(List<EnvironmentObserver> sourceList){
foreach (EnvironmentObserver sourceObserver in observers) {
foreach (EnvironmentObserver observer in sourceList) {
if (sourceObserver == observer) {
continue;
}
if (sourceObserver.label == observer.label) {
Debug.LogError($"Duplicate label found in observer: {observer.label} is in use multiple times");
}
if (observer.children != null && observer.children.Count > 0) {
CheckDuplicateLabels(observer.children);
}
}
}
}
public bool EvaluateFromString(string searchLabel, List<EnvironmentObserver> observerList = null){
List<EnvironmentObserver> listToUse = observers;
if (observerList != null) {
listToUse = observerList;
}
foreach (EnvironmentObserver observer in listToUse) {
if (observer.label == searchLabel) {
return observer.Evaluate(gameObject);
}
if (observer.children != null && observer.children.Count > 0) {
foreach (EnvironmentObserver childObserver in observer.children) {
EvaluateFromString(searchLabel, childObserver.children);
}
}
}
return false;
}
public EnvironmentObserver FindObserverFromString(string searchLabel, List<EnvironmentObserver> observerList = null){
List<EnvironmentObserver> listToUse = observers;
if (observerList != null) {
listToUse = observerList;
}
foreach (EnvironmentObserver observer in listToUse) {
if (observer.label == searchLabel) {
return observer;
}
if (observer.children != null && observer.children.Count > 0) {
foreach (EnvironmentObserver childObserver in observer.children) {
FindObserverFromString(searchLabel, childObserver.children);
}
}
}
return null;
}
void Update(){
Debug.Log(EvaluateFromString("gamedev"));
}
void LateUpdate(){
// Draw Gizmos
foreach (EnvironmentObserver observer in observers) {
observer.DrawObserverGizmo(gameObject);
if (observer.children != null && observer.children.Count > 0) {
foreach (EnvironmentObserver childObserver in observer.children) {
childObserver.DrawObserverGizmo(gameObject);
}
}
}
// Clear hit
foreach (EnvironmentObserver observer in observers) {
observer.hit = default;
if (observer.children != null && observer.children.Count > 0) {
foreach (EnvironmentObserver childObserver in observer.children) {
childObserver.hit = default;
}
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7a8c0593fef54844383c2f154cf8806c

View File

@@ -15,28 +15,28 @@ public class PlayerMovement : MonoBehaviour
thisPlayer = GetComponent<Player>(); thisPlayer = GetComponent<Player>();
} }
void Update(){ // void Update(){
// Create Ray Colors // // Create Ray Colors
Color forwardRayStatus = Color.red; // Color forwardRayStatus = Color.red;
Color leftRayStatus = Color.red; // Color leftRayStatus = Color.red;
Color rightRayStatus = Color.red; // Color rightRayStatus = Color.red;
//
if (forwardRay.collider&& forwardRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ forwardRayStatus = Color.green;} // if (forwardRay.collider&& forwardRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ forwardRayStatus = Color.green;}
if (leftRay.collider&& leftRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ leftRayStatus = Color.green;} // if (leftRay.collider&& leftRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ leftRayStatus = Color.green;}
if (rightRay.collider&& rightRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ rightRayStatus = Color.green;} // if (rightRay.collider&& rightRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ rightRayStatus = Color.green;}
//
using (Draw.WithColor(forwardRayStatus)) { // using (Draw.WithColor(forwardRayStatus)) {
Draw.Line(transform.position + transform.up, transform.position + transform.forward * 2.5f + transform.up); // Draw.Line(transform.position + transform.up, transform.position + transform.forward * 2.5f + transform.up);
} // }
//
using (Draw.WithColor(leftRayStatus)) { // using (Draw.WithColor(leftRayStatus)) {
Draw.Line(transform.position + transform.up, transform.position + -transform.right * 2f + transform.up); // Draw.Line(transform.position + transform.up, transform.position + -transform.right * 2f + transform.up);
} // }
//
using (Draw.WithColor(rightRayStatus)) { // using (Draw.WithColor(rightRayStatus)) {
Draw.Line(transform.position + transform.up, transform.position + transform.right * 2f + transform.up); // Draw.Line(transform.position + transform.up, transform.position + transform.right * 2f + transform.up);
} // }
} // }
void FixedUpdate(){ void FixedUpdate(){
LayerMask environmentLayer = LayerMask.NameToLayer("Environment"); LayerMask environmentLayer = LayerMask.NameToLayer("Environment");

View File

@@ -8,7 +8,8 @@
"GUID:75469ad4d38634e559750d17036d5f7c", "GUID:75469ad4d38634e559750d17036d5f7c",
"GUID:de4e6084e6d474788bb8c799d6b461ec", "GUID:de4e6084e6d474788bb8c799d6b461ec",
"GUID:d8b63aba1907145bea998dd612889d6b", "GUID:d8b63aba1907145bea998dd612889d6b",
"GUID:4307f53044263cf4b835bd812fc161a4" "GUID:4307f53044263cf4b835bd812fc161a4",
"GUID:e0cd26848372d4e5c891c569017e11f1"
], ],
"includePlatforms": [], "includePlatforms": [],
"excludePlatforms": [], "excludePlatforms": [],

View File

@@ -17,7 +17,7 @@ MonoBehaviour:
lineOpacity: 1 lineOpacity: 1
solidOpacity: 0.55 solidOpacity: 0.55
textOpacity: 1 textOpacity: 1
lineOpacityBehindObjects: 0.12 lineOpacityBehindObjects: 0.3186
solidOpacityBehindObjects: 0.45 solidOpacityBehindObjects: 0.1286
textOpacityBehindObjects: 0.9 textOpacityBehindObjects: 0.0881
curveResolution: 1 curveResolution: 1

Binary file not shown.

View File

@@ -124,7 +124,7 @@
{ {
"type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"key": "ShapeBuilder.LastSize.Cube", "key": "ShapeBuilder.LastSize.Cube",
"value": "{\"m_Value\":{\"x\":20.036033630371095,\"y\":1.0208016633987427,\"z\":-17.9393310546875}}" "value": "{\"m_Value\":{\"x\":53.82322311401367,\"y\":3.7740979194641115,\"z\":159.09600830078126}}"
}, },
{ {
"type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",