This commit is contained in:
parent
09037a8958
commit
aacf09b2b2
|
@ -625,9 +625,9 @@ MonoBehaviour:
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
_parentBlackboard: {fileID: 0}
|
_parentBlackboard: {fileID: 0}
|
||||||
_serializedBlackboard: '{"_variables":{"Sensor":{"_value":1,"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
_serializedBlackboard: '{"_variables":{"Sensor":{"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
||||||
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Target":{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Target":{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
||||||
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Entity":{"_value":2,"_name":"Entity","_id":"9c6ef538-dedf-4070-9feb-a71566e239b8","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Entities.Entity,
|
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Entity":{"_value":1,"_name":"Entity","_id":"9c6ef538-dedf-4070-9feb-a71566e239b8","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Entities.Entity,
|
||||||
BITKit.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"HP":{"_name":"HP","_id":"e1629cd4-44b7-4721-ac3d-36818ff847db","$type":"NodeCanvas.Framework.Variable`1[[System.Int32,
|
BITKit.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"HP":{"_name":"HP","_id":"e1629cd4-44b7-4721-ac3d-36818ff847db","$type":"NodeCanvas.Framework.Variable`1[[System.Int32,
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"IsAlive":{"_name":"IsAlive","_id":"07bceed0-a2a2-4e96-b85e-0ece496626da","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean,
|
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"IsAlive":{"_name":"IsAlive","_id":"07bceed0-a2a2-4e96-b85e-0ece496626da","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean,
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"Basic
|
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"Basic
|
||||||
|
@ -637,14 +637,11 @@ MonoBehaviour:
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}'
|
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}'
|
||||||
_objectReferences:
|
_objectReferences:
|
||||||
- {fileID: 0}
|
- {fileID: 0}
|
||||||
- {fileID: 5547163794359473138}
|
|
||||||
- {fileID: 6002286783881882295}
|
- {fileID: 6002286783881882295}
|
||||||
_serializedVariables:
|
_serializedVariables:
|
||||||
- _json: '{"_value":1,"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
- _json: '{"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
||||||
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
||||||
_references:
|
_references: []
|
||||||
- {fileID: 0}
|
|
||||||
- {fileID: 5547163794359473138}
|
|
||||||
- _json: '{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
- _json: '{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
||||||
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
||||||
_references: []
|
_references: []
|
||||||
|
@ -948,18 +945,6 @@ PrefabInstance:
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
m_AddedComponents: []
|
m_AddedComponents: []
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 2ad4d682518910847b19ed8106c0071a, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 2ad4d682518910847b19ed8106c0071a, type: 3}
|
||||||
--- !u!114 &5547163794359473138 stripped
|
|
||||||
MonoBehaviour:
|
|
||||||
m_CorrespondingSourceObject: {fileID: 9015502658869033244, guid: 2ad4d682518910847b19ed8106c0071a,
|
|
||||||
type: 3}
|
|
||||||
m_PrefabInstance: {fileID: 3595565691975903982}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 7815632634318192345}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 33d6f52a9de8ea149ab70ac4e67a0c36, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
--- !u!4 &7437684211249510939 stripped
|
--- !u!4 &7437684211249510939 stripped
|
||||||
Transform:
|
Transform:
|
||||||
m_CorrespondingSourceObject: {fileID: 6256051358093332725, guid: 2ad4d682518910847b19ed8106c0071a,
|
m_CorrespondingSourceObject: {fileID: 6256051358093332725, guid: 2ad4d682518910847b19ed8106c0071a,
|
||||||
|
|
|
@ -18,9 +18,6 @@ GameObject:
|
||||||
- component: {fileID: 5020317200630596891}
|
- component: {fileID: 5020317200630596891}
|
||||||
- component: {fileID: 7936474328313349173}
|
- component: {fileID: 7936474328313349173}
|
||||||
- component: {fileID: 3691802904714930186}
|
- component: {fileID: 3691802904714930186}
|
||||||
- component: {fileID: 1663689908842247019}
|
|
||||||
- component: {fileID: 4359274159838455549}
|
|
||||||
- component: {fileID: 6659077818004947443}
|
|
||||||
- component: {fileID: 5179535705297386567}
|
- component: {fileID: 5179535705297386567}
|
||||||
- component: {fileID: 4204812059243969666}
|
- component: {fileID: 4204812059243969666}
|
||||||
- component: {fileID: 591561399114057092}
|
- component: {fileID: 591561399114057092}
|
||||||
|
@ -31,6 +28,7 @@ GameObject:
|
||||||
- component: {fileID: 2332545226796783687}
|
- component: {fileID: 2332545226796783687}
|
||||||
- component: {fileID: 5701445397685345264}
|
- component: {fileID: 5701445397685345264}
|
||||||
- component: {fileID: 4192408521140958198}
|
- component: {fileID: 4192408521140958198}
|
||||||
|
- component: {fileID: 4873303856304307760}
|
||||||
m_Layer: 6
|
m_Layer: 6
|
||||||
m_Name: Zombie
|
m_Name: Zombie
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
|
@ -53,6 +51,7 @@ Transform:
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 3509096854786611592}
|
- {fileID: 3509096854786611592}
|
||||||
- {fileID: 6503844267943367046}
|
- {fileID: 6503844267943367046}
|
||||||
|
- {fileID: 8461637830315704982}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &8426729501548603387
|
--- !u!114 &8426729501548603387
|
||||||
|
@ -113,7 +112,7 @@ MonoBehaviour:
|
||||||
- rid: 33717727055315050
|
- rid: 33717727055315050
|
||||||
type: {class: DictionaryReference, ns: BITKit, asm: BITKit}
|
type: {class: DictionaryReference, ns: BITKit, asm: BITKit}
|
||||||
data:
|
data:
|
||||||
index: 682457707
|
index: -1058870509
|
||||||
keyword: z
|
keyword: z
|
||||||
--- !u!95 &673930142905110667
|
--- !u!95 &673930142905110667
|
||||||
Animator:
|
Animator:
|
||||||
|
@ -229,96 +228,6 @@ NavMeshAgent:
|
||||||
m_BaseOffset: 0
|
m_BaseOffset: 0
|
||||||
m_WalkableMask: 4294967295
|
m_WalkableMask: 4294967295
|
||||||
m_ObstacleAvoidanceType: 4
|
m_ObstacleAvoidanceType: 4
|
||||||
--- !u!114 &1663689908842247019
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1610736432900663163}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: aad115aca74ce3c4891b3f6de0b4aae8, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
_serializedExposedParameters: []
|
|
||||||
_boundGraphSerialization:
|
|
||||||
_boundGraphObjectReferences: []
|
|
||||||
_boundGraphSource:
|
|
||||||
_version: 0
|
|
||||||
_category:
|
|
||||||
_comments:
|
|
||||||
_translation: {x: 0, y: 0}
|
|
||||||
_zoomFactor: 1
|
|
||||||
_firstActivation: 2
|
|
||||||
_enableAction: 1
|
|
||||||
_disableAction: 0
|
|
||||||
_lockBoundGraphPrefabOverrides: 1
|
|
||||||
_preInitializeSubGraphs: 0
|
|
||||||
_updateMode: 0
|
|
||||||
_graph: {fileID: 11400000, guid: b7391ad4ecc8f5a43a7742936d9d746c, type: 2}
|
|
||||||
_blackboard: {fileID: 4359274159838455549}
|
|
||||||
--- !u!114 &4359274159838455549
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1610736432900663163}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: b98a6db0b653f764eac834f85857a9dd, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
_parentBlackboard: {fileID: 0}
|
|
||||||
_serializedBlackboard: '{"_variables":{"Sensor":{"_value":1,"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
|
||||||
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Target":{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
|
||||||
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"AttackAction":{"_name":"AttackAction","_id":"44829776-9918-4b67-9b7d-bd016fbe659f","$type":"NodeCanvas.Framework.Variable`1[[BITKit.MonoAction,
|
|
||||||
BITKit, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Entity":{"_value":2,"_name":"Entity","_id":"9c6ef538-dedf-4070-9feb-a71566e239b8","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Entities.Entity,
|
|
||||||
BITKit.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"IsAlive":{"_name":"IsAlive","_id":"583d9c15-3c5b-4ebc-9e6f-589f21505616","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean,
|
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"HP":{"_name":"HP","_id":"e1629cd4-44b7-4721-ac3d-36818ff847db","$type":"NodeCanvas.Framework.Variable`1[[System.Int32,
|
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}'
|
|
||||||
_objectReferences:
|
|
||||||
- {fileID: 0}
|
|
||||||
- {fileID: 8182690404236474479}
|
|
||||||
- {fileID: 1765543596226114749}
|
|
||||||
_serializedVariables:
|
|
||||||
- _json: '{"_value":1,"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
|
||||||
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
|
||||||
_references:
|
|
||||||
- {fileID: 0}
|
|
||||||
- {fileID: 8182690404236474479}
|
|
||||||
- _json: '{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
|
||||||
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
|
||||||
_references: []
|
|
||||||
- _json: '{"_name":"AttackAction","_id":"44829776-9918-4b67-9b7d-bd016fbe659f","$type":"NodeCanvas.Framework.Variable`1[[BITKit.MonoAction,
|
|
||||||
BITKit, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
|
||||||
_references: []
|
|
||||||
- _json: '{"_value":1,"_name":"Entity","_id":"9c6ef538-dedf-4070-9feb-a71566e239b8","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Entities.Entity,
|
|
||||||
BITKit.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
|
||||||
_references:
|
|
||||||
- {fileID: 0}
|
|
||||||
- {fileID: 1765543596226114749}
|
|
||||||
- _json: '{"_name":"IsAlive","_id":"583d9c15-3c5b-4ebc-9e6f-589f21505616","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean,
|
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}'
|
|
||||||
_references: []
|
|
||||||
- _json: '{"_name":"HP","_id":"e1629cd4-44b7-4721-ac3d-36818ff847db","$type":"NodeCanvas.Framework.Variable`1[[System.Int32,
|
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}'
|
|
||||||
_references: []
|
|
||||||
--- !u!114 &6659077818004947443
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1610736432900663163}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 77a2220c9a6ca8b479573c0f424a4d2c, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
behaviourTree: {fileID: 1663689908842247019}
|
|
||||||
blackboard: {fileID: 4359274159838455549}
|
|
||||||
--- !u!114 &5179535705297386567
|
--- !u!114 &5179535705297386567
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -429,7 +338,7 @@ MonoBehaviour:
|
||||||
- rid: 7707058052847370280
|
- rid: 7707058052847370280
|
||||||
type: {class: SensorMonoProxy, ns: BITKit.Sensors, asm: BITKit.Sensor}
|
type: {class: SensorMonoProxy, ns: BITKit.Sensors, asm: BITKit.Sensor}
|
||||||
data:
|
data:
|
||||||
monoBehaviour: {fileID: 8182690404236474479}
|
monoBehaviour: {fileID: 0}
|
||||||
--- !u!114 &6530587526832555870
|
--- !u!114 &6530587526832555870
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -628,6 +537,57 @@ Rigidbody:
|
||||||
m_Interpolate: 0
|
m_Interpolate: 0
|
||||||
m_Constraints: 126
|
m_Constraints: 126
|
||||||
m_CollisionDetection: 0
|
m_CollisionDetection: 0
|
||||||
|
--- !u!114 &4873303856304307760
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1610736432900663163}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 078a770363d5628419717cb5d9185c51, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
stateMachine:
|
||||||
|
states:
|
||||||
|
- rid: 1450174819340386310
|
||||||
|
- rid: 1450174819340386311
|
||||||
|
- rid: 1450174819340386312
|
||||||
|
_currentStateName:
|
||||||
|
debug: 0
|
||||||
|
transitionOnNextFrame: 0
|
||||||
|
ticker:
|
||||||
|
rid: 1450174819340386308
|
||||||
|
agent: {fileID: 3691802904714930186}
|
||||||
|
rangeSensor: {fileID: 8443497955954441676}
|
||||||
|
audioSensor: {fileID: 4975421454249292524}
|
||||||
|
selfTag: {fileID: 2126668844316887849}
|
||||||
|
friendTag: {fileID: 7796253121890493493}
|
||||||
|
enemyTag: {fileID: 5294749784761799474}
|
||||||
|
references:
|
||||||
|
version: 2
|
||||||
|
RefIds:
|
||||||
|
- rid: 1450174819340386308
|
||||||
|
type: {class: GameTick, ns: BITKit, asm: BITKit}
|
||||||
|
data:
|
||||||
|
- rid: 1450174819340386310
|
||||||
|
type: {class: Idle, ns: BITFALL.AI.States, asm: BITFALL.Entities.AI.Runtime}
|
||||||
|
data:
|
||||||
|
Service: {fileID: 0}
|
||||||
|
- rid: 1450174819340386311
|
||||||
|
type: {class: Alert, ns: BITFALL.AI.States, asm: BITFALL.Entities.AI.Runtime}
|
||||||
|
data:
|
||||||
|
Service: {fileID: 0}
|
||||||
|
initialAlertTime: 5
|
||||||
|
immediatelyDetectDistance: 5
|
||||||
|
detectedWeight: 0
|
||||||
|
- rid: 1450174819340386312
|
||||||
|
type: {class: Combat, ns: BITFALL.AI.States, asm: BITFALL.Entities.AI.Runtime}
|
||||||
|
data:
|
||||||
|
Service: {fileID: 0}
|
||||||
|
lostTargetTime: 16
|
||||||
|
currentLostTargetTime: 0
|
||||||
--- !u!1 &4091319875833546166
|
--- !u!1 &4091319875833546166
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -768,24 +728,214 @@ PrefabInstance:
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
m_AddedComponents: []
|
m_AddedComponents: []
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 2ad4d682518910847b19ed8106c0071a, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 2ad4d682518910847b19ed8106c0071a, type: 3}
|
||||||
--- !u!4 &6503844267943367046 stripped
|
--- !u!114 &4975421454249292524 stripped
|
||||||
Transform:
|
|
||||||
m_CorrespondingSourceObject: {fileID: 6256051358093332725, guid: 2ad4d682518910847b19ed8106c0071a,
|
|
||||||
type: 3}
|
|
||||||
m_PrefabInstance: {fileID: 906277369666945395}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
--- !u!114 &8182690404236474479 stripped
|
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_CorrespondingSourceObject: {fileID: 9015502658869033244, guid: 2ad4d682518910847b19ed8106c0071a,
|
m_CorrespondingSourceObject: {fileID: 5305100744181658527, guid: 2ad4d682518910847b19ed8106c0071a,
|
||||||
type: 3}
|
type: 3}
|
||||||
m_PrefabInstance: {fileID: 906277369666945395}
|
m_PrefabInstance: {fileID: 906277369666945395}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 0}
|
m_GameObject: {fileID: 0}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 33d6f52a9de8ea149ab70ac4e67a0c36, type: 3}
|
m_Script: {fileID: 11500000, guid: d7841c9177d83e54594af3d7a9ec4b08, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
--- !u!4 &6503844267943367046 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 6256051358093332725, guid: 2ad4d682518910847b19ed8106c0071a,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 906277369666945395}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
--- !u!114 &8443497955954441676 stripped
|
||||||
|
MonoBehaviour:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 8772707305530588351, guid: 2ad4d682518910847b19ed8106c0071a,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 906277369666945395}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 8f305912600022b4c824367828ddc333, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
--- !u!1001 &1693532935742515987
|
||||||
|
PrefabInstance:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransformParent: {fileID: 5964803017347144284}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: reference.Array.size
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[-2]
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: reference.Array.data[0]
|
||||||
|
value: 1450174819340386318
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386316]
|
||||||
|
value: BITKit BITKit.Reference
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386317]
|
||||||
|
value: BITKit BITKit.ReferenceScriptableObject
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386318]
|
||||||
|
value: BITKit BITKit.DictionaryReference
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386317].so
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386316].value
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386318].index
|
||||||
|
value: 1301705678
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386318].keyword
|
||||||
|
value: huma
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8051666175491085143, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: Tags
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8913039084940381990, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: reference.Array.size
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8913039084940381990, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[-2]
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8913039084940381990, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: reference.Array.data[0]
|
||||||
|
value: 1450174819340386315
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8913039084940381990, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386315]
|
||||||
|
value: BITKit BITKit.DictionaryReference
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8913039084940381990, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386315].index
|
||||||
|
value: -1058870509
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8913039084940381990, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: managedReferences[1450174819340386315].keyword
|
||||||
|
value: zom
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects: []
|
||||||
|
m_AddedComponents: []
|
||||||
|
m_SourcePrefab: {fileID: 100100000, guid: b7f40e45b9f64fe4995e6a1b834d17d9, type: 3}
|
||||||
|
--- !u!114 &5294749784761799474 stripped
|
||||||
|
MonoBehaviour:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 6843811012753684513, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 1693532935742515987}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a39bc549257f2e94cbb86ae99c0107c4, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
--- !u!114 &7796253121890493493 stripped
|
||||||
|
MonoBehaviour:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 8913039084940381990, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 1693532935742515987}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a39bc549257f2e94cbb86ae99c0107c4, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
--- !u!4 &8461637830315704982 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 7128465923029264773, guid: b7f40e45b9f64fe4995e6a1b834d17d9,
|
||||||
|
type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 1693532935742515987}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!1001 &1865042540434023482
|
--- !u!1001 &1865042540434023482
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
|
@ -78,6 +78,11 @@ PrefabInstance:
|
||||||
propertyPath: rmsCount
|
propertyPath: rmsCount
|
||||||
value: 6
|
value: 6
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 3613778988776262925, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||||
|
type: 3}
|
||||||
|
propertyPath: outlineWidth
|
||||||
|
value: 0.16
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
- target: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
|
@ -99,18 +104,14 @@ PrefabInstance:
|
||||||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||||
type: 3}
|
type: 3}
|
||||||
insertIndex: 6
|
insertIndex: 6
|
||||||
addedObject: {fileID: 8092395782639463146}
|
|
||||||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
|
||||||
type: 3}
|
|
||||||
insertIndex: 7
|
|
||||||
addedObject: {fileID: 4709101312187563039}
|
addedObject: {fileID: 4709101312187563039}
|
||||||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||||
type: 3}
|
type: 3}
|
||||||
insertIndex: 8
|
insertIndex: 7
|
||||||
addedObject: {fileID: 768493181001795629}
|
addedObject: {fileID: 768493181001795629}
|
||||||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||||
type: 3}
|
type: 3}
|
||||||
insertIndex: 9
|
insertIndex: 8
|
||||||
addedObject: {fileID: 7499168752360152102}
|
addedObject: {fileID: 7499168752360152102}
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 27719a3d454f29b4381adf6c7c1bd84d, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 27719a3d454f29b4381adf6c7c1bd84d, type: 3}
|
||||||
--- !u!54 &199638012735786757 stripped
|
--- !u!54 &199638012735786757 stripped
|
||||||
|
@ -131,22 +132,6 @@ GameObject:
|
||||||
type: 3}
|
type: 3}
|
||||||
m_PrefabInstance: {fileID: 6414151364918162970}
|
m_PrefabInstance: {fileID: 6414151364918162970}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!114 &8092395782639463146
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1550547054305604702}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 52b4c3dc3ca60bb4cb422821e6d7ff38, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
spawnOnStart: 1
|
|
||||||
lootDrop: {fileID: 11400000, guid: fde747998659fed4ab4b95496f9a9cbd, type: 2}
|
|
||||||
container: {fileID: 6099372863546542444}
|
|
||||||
count: 1
|
|
||||||
--- !u!95 &4709101312187563039
|
--- !u!95 &4709101312187563039
|
||||||
Animator:
|
Animator:
|
||||||
serializedVersion: 5
|
serializedVersion: 5
|
||||||
|
|
|
@ -241,6 +241,9 @@ MonoBehaviour:
|
||||||
physicsBasedAnimation:
|
physicsBasedAnimation:
|
||||||
allow: 1
|
allow: 1
|
||||||
value: {fileID: 3862100421307477824}
|
value: {fileID: 3862100421307477824}
|
||||||
|
aliveRigidbody:
|
||||||
|
allow: 0
|
||||||
|
value: {fileID: 0}
|
||||||
references:
|
references:
|
||||||
version: 2
|
version: 2
|
||||||
RefIds:
|
RefIds:
|
||||||
|
@ -321,19 +324,8 @@ MonoBehaviour:
|
||||||
- rid: 7707058030789525626
|
- rid: 7707058030789525626
|
||||||
type: {class: Walk, ns: BITFALL.Movement.MotionBased.States, asm: BITFALL.Entities.Movement.Runtime}
|
type: {class: Walk, ns: BITFALL.Movement.MotionBased.States, asm: BITFALL.Entities.Movement.Runtime}
|
||||||
data:
|
data:
|
||||||
_state:
|
entryClips: []
|
||||||
_FadeDuration: 0.25
|
clips: []
|
||||||
_Events:
|
|
||||||
_NormalizedTimes: []
|
|
||||||
_Callbacks: []
|
|
||||||
_Names: []
|
|
||||||
_Speed: 1
|
|
||||||
_Animations: []
|
|
||||||
_Speeds: []
|
|
||||||
_SynchronizeChildren:
|
|
||||||
_Thresholds: []
|
|
||||||
_DefaultParameter: 0
|
|
||||||
_ExtrapolateSpeed: 1
|
|
||||||
- rid: 7707058030789525638
|
- rid: 7707058030789525638
|
||||||
type: {class: IdleTurn, ns: BITFALL.Movement.MotionBased.States, asm: BITFALL.Entities.Movement.Runtime}
|
type: {class: IdleTurn, ns: BITFALL.Movement.MotionBased.States, asm: BITFALL.Entities.Movement.Runtime}
|
||||||
data:
|
data:
|
||||||
|
@ -393,22 +385,19 @@ MonoBehaviour:
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
_parentBlackboard: {fileID: 0}
|
_parentBlackboard: {fileID: 0}
|
||||||
_serializedBlackboard: '{"_variables":{"Sensor":{"_value":1,"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
_serializedBlackboard: '{"_variables":{"Sensor":{"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
||||||
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Target":{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Target":{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
||||||
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Entity":{"_value":2,"_name":"Entity","_id":"9c6ef538-dedf-4070-9feb-a71566e239b8","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Entities.Entity,
|
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"Entity":{"_value":1,"_name":"Entity","_id":"9c6ef538-dedf-4070-9feb-a71566e239b8","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Entities.Entity,
|
||||||
BITKit.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"IsAlive":{"_name":"IsAlive","_id":"583d9c15-3c5b-4ebc-9e6f-589f21505616","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean,
|
BITKit.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"IsAlive":{"_name":"IsAlive","_id":"583d9c15-3c5b-4ebc-9e6f-589f21505616","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean,
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"HP":{"_name":"HP","_id":"e1629cd4-44b7-4721-ac3d-36818ff847db","$type":"NodeCanvas.Framework.Variable`1[[System.Int32,
|
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"HP":{"_name":"HP","_id":"e1629cd4-44b7-4721-ac3d-36818ff847db","$type":"NodeCanvas.Framework.Variable`1[[System.Int32,
|
||||||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}'
|
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}'
|
||||||
_objectReferences:
|
_objectReferences:
|
||||||
- {fileID: 0}
|
- {fileID: 0}
|
||||||
- {fileID: 7313871570116796115}
|
|
||||||
- {fileID: 487596900774587583}
|
- {fileID: 487596900774587583}
|
||||||
_serializedVariables:
|
_serializedVariables:
|
||||||
- _json: '{"_value":1,"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
- _json: '{"_name":"Sensor","_id":"d648241e-321f-48dd-a4e3-d661ee461283","$type":"NodeCanvas.Framework.Variable`1[[BITKit.Sensors.SmartTargetSensor,
|
||||||
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
BITKit.Sensor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
||||||
_references:
|
_references: []
|
||||||
- {fileID: 0}
|
|
||||||
- {fileID: 7313871570116796115}
|
|
||||||
- _json: '{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
- _json: '{"_name":"Target","_id":"7e434d61-d448-41a6-91d9-50c35408f293","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform,
|
||||||
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}'
|
||||||
_references: []
|
_references: []
|
||||||
|
@ -534,7 +523,7 @@ MonoBehaviour:
|
||||||
- rid: 7707058052847370262
|
- rid: 7707058052847370262
|
||||||
type: {class: SensorMonoProxy, ns: BITKit.Sensors, asm: BITKit.Sensor}
|
type: {class: SensorMonoProxy, ns: BITKit.Sensors, asm: BITKit.Sensor}
|
||||||
data:
|
data:
|
||||||
monoBehaviour: {fileID: 7313871570116796115}
|
monoBehaviour: {fileID: 0}
|
||||||
--- !u!1001 &1773688828836030415
|
--- !u!1001 &1773688828836030415
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -644,18 +633,6 @@ Transform:
|
||||||
type: 3}
|
type: 3}
|
||||||
m_PrefabInstance: {fileID: 1773688828836030415}
|
m_PrefabInstance: {fileID: 1773688828836030415}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!114 &7313871570116796115 stripped
|
|
||||||
MonoBehaviour:
|
|
||||||
m_CorrespondingSourceObject: {fileID: 9015502658869033244, guid: 2ad4d682518910847b19ed8106c0071a,
|
|
||||||
type: 3}
|
|
||||||
m_PrefabInstance: {fileID: 1773688828836030415}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 0}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 33d6f52a9de8ea149ab70ac4e67a0c36, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
--- !u!1001 &4561683943698286367
|
--- !u!1001 &4561683943698286367
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
|
@ -1004,6 +1004,7 @@ GameObject:
|
||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 4826102346843731735}
|
- component: {fileID: 4826102346843731735}
|
||||||
|
- component: {fileID: 6313379856987838926}
|
||||||
- component: {fileID: 2634754629000604700}
|
- component: {fileID: 2634754629000604700}
|
||||||
- component: {fileID: 6417910595033156401}
|
- component: {fileID: 6417910595033156401}
|
||||||
- component: {fileID: 6002452162850529175}
|
- component: {fileID: 6002452162850529175}
|
||||||
|
@ -1088,6 +1089,29 @@ Transform:
|
||||||
- {fileID: 5853897294963205446}
|
- {fileID: 5853897294963205446}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &6313379856987838926
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4826102346843731729}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a39bc549257f2e94cbb86ae99c0107c4, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
tags: []
|
||||||
|
reference:
|
||||||
|
- rid: 1450174819340386319
|
||||||
|
references:
|
||||||
|
version: 2
|
||||||
|
RefIds:
|
||||||
|
- rid: 1450174819340386319
|
||||||
|
type: {class: DictionaryReference, ns: BITKit, asm: BITKit}
|
||||||
|
data:
|
||||||
|
index: 1301705678
|
||||||
|
keyword: ca
|
||||||
--- !u!114 &2634754629000604700
|
--- !u!114 &2634754629000604700
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
|
@ -44,7 +44,11 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: d7841c9177d83e54594af3d7a9ec4b08, type: 3}
|
m_Script: {fileID: 11500000, guid: d7841c9177d83e54594af3d7a9ec4b08, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
autoUpdate: 1
|
||||||
radius: 24
|
radius: 24
|
||||||
|
ignoreTags:
|
||||||
|
allow: 0
|
||||||
|
value: []
|
||||||
--- !u!1 &6742090447984940087
|
--- !u!1 &6742090447984940087
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -54,7 +58,6 @@ GameObject:
|
||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 6256051358093332725}
|
- component: {fileID: 6256051358093332725}
|
||||||
- component: {fileID: 9015502658869033244}
|
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Sensor
|
m_Name: Sensor
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
|
@ -79,44 +82,6 @@ Transform:
|
||||||
- {fileID: 6750927362237252721}
|
- {fileID: 6750927362237252721}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &9015502658869033244
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 6742090447984940087}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 33d6f52a9de8ea149ab70ac4e67a0c36, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
autoUpdate: 1
|
|
||||||
ignoreTags:
|
|
||||||
allow: 0
|
|
||||||
value: []
|
|
||||||
optionalRetargetInterval:
|
|
||||||
allow: 1
|
|
||||||
value:
|
|
||||||
Interval: 1
|
|
||||||
lostTargetInterval:
|
|
||||||
allow: 1
|
|
||||||
value: 16
|
|
||||||
detectedTime:
|
|
||||||
allow: 1
|
|
||||||
value: 0.5
|
|
||||||
root: {fileID: 0}
|
|
||||||
sensor:
|
|
||||||
rid: 806583310205321480
|
|
||||||
audioSensor: {fileID: 5305100744181658527}
|
|
||||||
updateCount: 0
|
|
||||||
references:
|
|
||||||
version: 2
|
|
||||||
RefIds:
|
|
||||||
- rid: 806583310205321480
|
|
||||||
type: {class: UnitySensor, ns: BITKit.Sensors, asm: BITKit.Sensor}
|
|
||||||
data:
|
|
||||||
gameObject: {fileID: 9148787559049777921}
|
|
||||||
--- !u!1 &9148787559049777921
|
--- !u!1 &9148787559049777921
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -164,7 +129,7 @@ MonoBehaviour:
|
||||||
detectLayer:
|
detectLayer:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 64
|
m_Bits: 64
|
||||||
autoUpdate: 0
|
autoUpdate: 1
|
||||||
ignoreColliders:
|
ignoreColliders:
|
||||||
- {fileID: 0}
|
- {fileID: 0}
|
||||||
detected: []
|
detected: []
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &1911735542554646388
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 6322495096740132473}
|
||||||
|
- component: {fileID: 8913039084940381990}
|
||||||
|
m_Layer: 6
|
||||||
|
m_Name: FriendTag
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &6322495096740132473
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1911735542554646388}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 7128465923029264773}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &8913039084940381990
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1911735542554646388}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a39bc549257f2e94cbb86ae99c0107c4, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
tags: []
|
||||||
|
reference: []
|
||||||
|
references:
|
||||||
|
version: 2
|
||||||
|
RefIds: []
|
||||||
|
--- !u!1 &2921918470595128776
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5113332931155271858}
|
||||||
|
- component: {fileID: 6843811012753684513}
|
||||||
|
m_Layer: 6
|
||||||
|
m_Name: EnemyTag
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &5113332931155271858
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2921918470595128776}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 7128465923029264773}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &6843811012753684513
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2921918470595128776}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a39bc549257f2e94cbb86ae99c0107c4, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
tags: []
|
||||||
|
reference: []
|
||||||
|
references:
|
||||||
|
version: 2
|
||||||
|
RefIds: []
|
||||||
|
--- !u!1 &8051666175491085143
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 7128465923029264773}
|
||||||
|
m_Layer: 6
|
||||||
|
m_Name: Tags
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &7128465923029264773
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8051666175491085143}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 6322495096740132473}
|
||||||
|
- {fileID: 5113332931155271858}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -11,7 +11,8 @@
|
||||||
"GUID:1235ca61e7f433b408ed5a68767e7123",
|
"GUID:1235ca61e7f433b408ed5a68767e7123",
|
||||||
"GUID:508392158bd966c4d9c21e19661a441d",
|
"GUID:508392158bd966c4d9c21e19661a441d",
|
||||||
"GUID:f51ebe6a0ceec4240a699833d6309b23",
|
"GUID:f51ebe6a0ceec4240a699833d6309b23",
|
||||||
"GUID:2dbcdde5f5df6a343a36c62f12bd6fae"
|
"GUID:2dbcdde5f5df6a343a36c62f12bd6fae",
|
||||||
|
"GUID:705b66b7892e7524f912fd152f5d5251"
|
||||||
],
|
],
|
||||||
"includePlatforms": [],
|
"includePlatforms": [],
|
||||||
"excludePlatforms": [],
|
"excludePlatforms": [],
|
||||||
|
|
|
@ -0,0 +1,194 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data.Odbc;
|
||||||
|
using System.Linq;
|
||||||
|
using BITKit;
|
||||||
|
using BITKit.AI.States;
|
||||||
|
using BITKit.Entities;
|
||||||
|
using BITKit.StateMachine;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.AI;
|
||||||
|
|
||||||
|
namespace BITFALL.AI.States
|
||||||
|
{
|
||||||
|
public abstract class AIRuntimeState : AIState
|
||||||
|
{
|
||||||
|
[Inject,HideInInspector] public AIService Service;
|
||||||
|
private readonly ConcurrentDictionary<ulong, bool> _friends = new();
|
||||||
|
private readonly ConcurrentDictionary<ulong, bool> _enemies = new();
|
||||||
|
protected readonly CacheList<IEntity> detectedEnemies = new();
|
||||||
|
public bool IsFriend(IEntity target) => _friends.GetOrAdd(target.Id, IsFriendInternal);
|
||||||
|
public bool IsEnemy(IEntity target) => _enemies.GetOrAdd(target.Id, IsEnemyInternal);
|
||||||
|
public override void OnStateUpdate(float deltaTime)
|
||||||
|
{
|
||||||
|
base.OnStateUpdate(deltaTime);
|
||||||
|
detectedEnemies.Clear();
|
||||||
|
foreach (var x in Service.RangeSensor.Get())
|
||||||
|
{
|
||||||
|
if (x.TryGetComponent<IEntity>(out var entity) is false) continue;
|
||||||
|
if (IsEnemy(entity) is false)continue;
|
||||||
|
detectedEnemies.Add(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsEnemyInternal(ulong id)
|
||||||
|
{
|
||||||
|
var target = UnityEntitiesService.Get(id);
|
||||||
|
var tags = target.As<MonoBehaviour>().GetComponent<ITag>().GetTags();
|
||||||
|
foreach (var x in Service.EnemyTag.GetTags())
|
||||||
|
{
|
||||||
|
if (tags.Contains(x)) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsFriendInternal(ulong id)
|
||||||
|
{
|
||||||
|
var target = UnityEntitiesService.Get(id);
|
||||||
|
var tags = target.As<MonoBehaviour>().GetComponent<ITag>().GetTags();
|
||||||
|
foreach (var x in Service.FriendTag.GetTags())
|
||||||
|
{
|
||||||
|
if (tags.Contains(x)) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
[CustomType(typeof(AI_Idle))]
|
||||||
|
public sealed class Idle : AIRuntimeState, AI_Idle
|
||||||
|
{
|
||||||
|
public override void OnStateEntry(IState old)
|
||||||
|
{
|
||||||
|
base.OnStateEntry(old);
|
||||||
|
Service.Agent.isStopped = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnStateUpdate(float deltaTime)
|
||||||
|
{
|
||||||
|
base.OnStateUpdate(deltaTime);
|
||||||
|
//foreach (var x in Service.AudioSensor.Get().Union(Service.RangeSensor.Get()))
|
||||||
|
foreach (var entity in detectedEnemies)
|
||||||
|
{
|
||||||
|
Service.CombatTarget = entity;
|
||||||
|
Service.TransitionState<Alert>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[Serializable]
|
||||||
|
[CustomType(typeof(AI_Idle))]
|
||||||
|
public sealed class Alert : AIRuntimeState, AI_Alert
|
||||||
|
{
|
||||||
|
public int AlertLevel { get; set; }
|
||||||
|
public float RemainingAlertTime { get; set; }
|
||||||
|
[SerializeField] private int initialAlertTime;
|
||||||
|
[SerializeField] private int immediatelyDetectDistance = 5;
|
||||||
|
[SerializeField,ReadOnly]private float detectedWeight;
|
||||||
|
public override void OnStateEntry(IState old)
|
||||||
|
{
|
||||||
|
base.OnStateEntry(old);
|
||||||
|
RemainingAlertTime = initialAlertTime;
|
||||||
|
detectedWeight = old switch
|
||||||
|
{
|
||||||
|
AI_Combat=>0.5f,
|
||||||
|
_ => 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public override void OnStateUpdate(float deltaTime)
|
||||||
|
{
|
||||||
|
base.OnStateUpdate(deltaTime);
|
||||||
|
|
||||||
|
if (detectedEnemies.Count is 0)
|
||||||
|
{
|
||||||
|
detectedWeight -= deltaTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var entity in detectedEnemies)
|
||||||
|
{
|
||||||
|
var distance= Vector3.Distance(Service.transform.position, entity.As<MonoBehaviour>().transform.position);
|
||||||
|
if(distance<=immediatelyDetectDistance)
|
||||||
|
{
|
||||||
|
Service.CombatTarget = entity;
|
||||||
|
Service.TransitionState<Combat>();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
detectedWeight += deltaTime;
|
||||||
|
if (detectedWeight >= 1)
|
||||||
|
{
|
||||||
|
Service.CombatTarget = entity;
|
||||||
|
Service.TransitionState<Combat>();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RemainingAlertTime -= deltaTime;
|
||||||
|
|
||||||
|
if(RemainingAlertTime<=0)
|
||||||
|
{
|
||||||
|
Service.TransitionState<Idle>();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[Serializable]
|
||||||
|
[CustomType(typeof(AI_Idle))]
|
||||||
|
public sealed class Combat : AIRuntimeState, AI_Combat
|
||||||
|
{
|
||||||
|
public AITarget CurrentTarget => _currentTarget;
|
||||||
|
private AITarget _currentTarget;
|
||||||
|
[SerializeField] private float lostTargetTime;
|
||||||
|
private readonly IntervalUpdate reTargetInterval = new(2);
|
||||||
|
[SerializeField,ReadOnly]private float currentLostTargetTime;
|
||||||
|
public override void OnStateEntry(IState old)
|
||||||
|
{
|
||||||
|
base.OnStateEntry(old);
|
||||||
|
currentLostTargetTime = lostTargetTime;
|
||||||
|
reTargetInterval.Reset();
|
||||||
|
Service.CombatTarget.TryGetComponent<AITarget>(out _currentTarget);
|
||||||
|
Service.Agent.isStopped = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnStateExit(IState old, IState newState)
|
||||||
|
{
|
||||||
|
base.OnStateExit(old, newState);
|
||||||
|
Service.RangeSensor.transform.localRotation = Quaternion.identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnStateUpdate(float deltaTime)
|
||||||
|
{
|
||||||
|
base.OnStateUpdate(deltaTime);
|
||||||
|
Service.RangeSensor.transform.rotation = Service.transform.rotation;
|
||||||
|
if (reTargetInterval.AllowUpdate)
|
||||||
|
{
|
||||||
|
Service.CombatTarget = null;
|
||||||
|
}
|
||||||
|
if (Service.CombatTarget is not null)
|
||||||
|
{
|
||||||
|
var position = Service.CombatTarget.As<MonoBehaviour>().transform.position;
|
||||||
|
if (NavMesh.SamplePosition(position, out var hit, 1, NavMesh.AllAreas))
|
||||||
|
{
|
||||||
|
Service.Agent.SetDestination(hit.position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var entity in detectedEnemies)
|
||||||
|
{
|
||||||
|
currentLostTargetTime = lostTargetTime;
|
||||||
|
Service.CombatTarget = entity;
|
||||||
|
Service.CombatTarget.TryGetComponent<AITarget>(out _currentTarget);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
currentLostTargetTime-=deltaTime;
|
||||||
|
if(currentLostTargetTime<=0)
|
||||||
|
{
|
||||||
|
Service.TransitionState<Alert>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BITFALL.AI.States;
|
||||||
|
using BITKit;
|
||||||
|
using BITKit.AI.States;
|
||||||
|
using BITKit.Entities;
|
||||||
|
using BITKit.Sensors;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.AI;
|
||||||
|
using UnityEngine.PlayerLoop;
|
||||||
|
|
||||||
|
namespace BITFALL.AI
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// AI服务
|
||||||
|
/// </summary>
|
||||||
|
[CustomType(typeof(AIService))]
|
||||||
|
public class AIService : StateBasedBehavior<AI_Base>
|
||||||
|
{
|
||||||
|
[SerializeReference,SubclassSelector] private ITicker ticker;
|
||||||
|
[SerializeField] private NavMeshAgent agent;
|
||||||
|
[SerializeField] private RangeSensor rangeSensor;
|
||||||
|
[SerializeField] private AudioSensor audioSensor;
|
||||||
|
[SerializeField] private Tag selfTag;
|
||||||
|
[SerializeField] private Tag friendTag;
|
||||||
|
[SerializeField] private Tag enemyTag;
|
||||||
|
|
||||||
|
public IEntity CombatTarget { get; set; }
|
||||||
|
|
||||||
|
public RangeSensor RangeSensor => rangeSensor;
|
||||||
|
public AudioSensor AudioSensor => audioSensor;
|
||||||
|
public NavMeshAgent Agent => agent;
|
||||||
|
public ITag SelfTag => selfTag;
|
||||||
|
public ITag FriendTag => friendTag;
|
||||||
|
public ITag EnemyTag => enemyTag;
|
||||||
|
public override void OnStart()
|
||||||
|
{
|
||||||
|
base.OnStart();
|
||||||
|
ticker.Add(OnTick);
|
||||||
|
TransitionState<Idle>();
|
||||||
|
}
|
||||||
|
private void OnTick(float obj)
|
||||||
|
{
|
||||||
|
UpdateState(obj);
|
||||||
|
}
|
||||||
|
public override void OnDestroyComponent()
|
||||||
|
{
|
||||||
|
base.OnDestroyComponent();
|
||||||
|
ticker.Remove(OnTick);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"name": "BITFALL.Entities.AI.Runtime",
|
||||||
|
"rootNamespace": "",
|
||||||
|
"references": [
|
||||||
|
"GUID:14fe60d984bf9f84eac55c6ea033a8f4",
|
||||||
|
"GUID:709caf8d7fb6ef24bbba0ab9962a3ad0",
|
||||||
|
"GUID:7efac18f239530141802fb139776f333",
|
||||||
|
"GUID:d525ad6bd40672747bde77962f1c401e",
|
||||||
|
"GUID:49b49c76ee64f6b41bf28ef951cb0e50",
|
||||||
|
"GUID:705b66b7892e7524f912fd152f5d5251",
|
||||||
|
"GUID:8c4dd21966739024fbd72155091d199e",
|
||||||
|
"GUID:508392158bd966c4d9c21e19661a441d"
|
||||||
|
],
|
||||||
|
"includePlatforms": [],
|
||||||
|
"excludePlatforms": [],
|
||||||
|
"allowUnsafeCode": false,
|
||||||
|
"overrideReferences": false,
|
||||||
|
"precompiledReferences": [],
|
||||||
|
"autoReferenced": true,
|
||||||
|
"defineConstraints": [],
|
||||||
|
"versionDefines": [],
|
||||||
|
"noEngineReferences": false
|
||||||
|
}
|
|
@ -6,9 +6,8 @@ using UnityEngine;
|
||||||
using BITKit;
|
using BITKit;
|
||||||
using BITKit.Animations;
|
using BITKit.Animations;
|
||||||
using BITKit.Entities;
|
using BITKit.Entities;
|
||||||
using BITKit.Physics;
|
|
||||||
|
|
||||||
namespace BITFALL.Entites
|
namespace BITFALL.Entities
|
||||||
{
|
{
|
||||||
public class EntityProxyCharacter : EntityBehavior
|
public class EntityProxyCharacter : EntityBehavior
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
namespace BITFALL.AI
|
||||||
|
{
|
||||||
|
public interface AIActionReason{}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,134 @@
|
||||||
|
|
||||||
|
// ReSharper disable IdentifierTypo
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using BITFALL.AI;
|
||||||
|
using BITKit.StateMachine;
|
||||||
|
using Unity.Mathematics;
|
||||||
|
|
||||||
|
namespace BITKit.AI.States
|
||||||
|
{
|
||||||
|
//基础定义
|
||||||
|
public interface AI_Base:IState
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 为什么进入这个状态
|
||||||
|
/// </summary>
|
||||||
|
AIActionReason Reason { get; }
|
||||||
|
}
|
||||||
|
[Serializable]
|
||||||
|
public abstract class AIState:AI_Base
|
||||||
|
{
|
||||||
|
public bool Enabled { get; set; }
|
||||||
|
public AIActionReason Reason { get; set; }
|
||||||
|
public virtual void Initialize()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public virtual void OnStateEntry(IState old)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public virtual void OnStateUpdate(float deltaTime)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public virtual void OnStateExit(IState old, IState newState)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 静止,无任何行为
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Idle:AI_Base{}
|
||||||
|
/// <summary>
|
||||||
|
/// 巡逻,通常是哨兵AI才会有的状态
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Patrol:AI_Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 巡逻点
|
||||||
|
/// </summary>
|
||||||
|
float3[] PatrolPoints { get; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// AI追踪,通常为丢失目标一定时间后
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Track:AI_Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 当前目标
|
||||||
|
/// </summary>
|
||||||
|
AITarget CurrentTarget { get; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// AI警戒,此时还未发现敌人
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Alert:AI_Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 当前警戒级别,如果最高则进入战斗状态
|
||||||
|
/// </summary>
|
||||||
|
int AlertLevel { get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 剩余警戒时间
|
||||||
|
/// </summary>
|
||||||
|
float RemainingAlertTime { get; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 战斗状态,明确的敌人
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Combat:AI_Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 当前目标
|
||||||
|
/// </summary>
|
||||||
|
AITarget CurrentTarget { get; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 逃跑,通常是人类AI或者特殊感染者才有的状态
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Flee:AI_Base
|
||||||
|
{
|
||||||
|
float3 NextPoint { get; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 通常只有感染者AI才会有的状态
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Wander:AI_Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 下一个漫步的位置
|
||||||
|
/// </summary>
|
||||||
|
float3 NextPoint { get; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 死亡,回收进AI池
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Death:AI_Base
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 濒死状态,如果一定时间内没有救助,则进入死亡状态
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Dying:AI_Base
|
||||||
|
{
|
||||||
|
int RemainingHealthPoint { get; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 探索,通常是人类AI才会有的状态
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Explore:AI_Base
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 行为,这是个口袋状态,任何特殊状态都可以放在这里
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Action:AI_Base
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 休息状态,通常是人类AI在睡眠或者在逃跑成功后会有的状态
|
||||||
|
/// </summary>
|
||||||
|
public interface AI_Rest:AI_Base
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
using Unity.Mathematics;
|
||||||
|
|
||||||
|
namespace BITFALL.AI
|
||||||
|
{
|
||||||
|
public interface AITarget
|
||||||
|
{
|
||||||
|
float3 Position { get; }
|
||||||
|
quaternion Rotation { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"name": "BITFALL.AI",
|
||||||
|
"rootNamespace": "",
|
||||||
|
"references": [
|
||||||
|
"GUID:14fe60d984bf9f84eac55c6ea033a8f4",
|
||||||
|
"GUID:d8b63aba1907145bea998dd612889d6b",
|
||||||
|
"GUID:f51ebe6a0ceec4240a699833d6309b23"
|
||||||
|
],
|
||||||
|
"includePlatforms": [],
|
||||||
|
"excludePlatforms": [],
|
||||||
|
"allowUnsafeCode": false,
|
||||||
|
"overrideReferences": false,
|
||||||
|
"precompiledReferences": [],
|
||||||
|
"autoReferenced": true,
|
||||||
|
"defineConstraints": [],
|
||||||
|
"versionDefines": [],
|
||||||
|
"noEngineReferences": true
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ namespace BITKit
|
||||||
{
|
{
|
||||||
public interface ITag
|
public interface ITag
|
||||||
{
|
{
|
||||||
|
int Hash { get; }
|
||||||
string[] GetTags();
|
string[] GetTags();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,7 +4,7 @@ using System.Collections.Generic;
|
||||||
using BITKit.Core.Tuple;
|
using BITKit.Core.Tuple;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace BITKit.Physics
|
namespace BITKit
|
||||||
{
|
{
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class JointConfigure
|
public class JointConfigure
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using BITKit.Events;
|
using BITKit.Events;
|
||||||
using UnityEditor;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace BITKit.Physics
|
namespace BITKit
|
||||||
{
|
{
|
||||||
public class Prop_Physics : MonoBehaviour
|
public class Prop_Physics : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Cysharp.Threading.Tasks;
|
using Cysharp.Threading.Tasks;
|
||||||
|
@ -15,9 +16,18 @@ namespace BITKit.Sensors
|
||||||
public class AudioSensor : MonoBehaviour,ISensor
|
public class AudioSensor : MonoBehaviour,ISensor
|
||||||
{
|
{
|
||||||
[Header(Constant.Header.Settings)]
|
[Header(Constant.Header.Settings)]
|
||||||
|
[SerializeField] private bool autoUpdate;
|
||||||
[SerializeField]private float radius;
|
[SerializeField]private float radius;
|
||||||
[SerializeField] private Optional<string[]> ignoreTags;
|
|
||||||
private readonly CacheList<Transform> cache = new();
|
private readonly CacheList<Transform> cache = new();
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
Id = GetInstanceID();
|
||||||
|
SensorQueue.Register(Id,this);
|
||||||
|
}
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
SensorQueue.UnRegister(Id);
|
||||||
|
}
|
||||||
public UniTask Execute(float delta)
|
public UniTask Execute(float delta)
|
||||||
{
|
{
|
||||||
var position = transform.position;
|
var position = transform.position;
|
||||||
|
@ -26,7 +36,6 @@ namespace BITKit.Sensors
|
||||||
{
|
{
|
||||||
var distance = Vector3.Distance(position, x.Position);
|
var distance = Vector3.Distance(position, x.Position);
|
||||||
if(distance>radius) continue;
|
if(distance>radius) continue;
|
||||||
if(ignoreTags.Allow && x.Tag is { } tag1 && tag1.GetTags().Any(ignoreTags.Value.Contains)) continue;
|
|
||||||
cache.Add(x.Transform);
|
cache.Add(x.Transform);
|
||||||
}
|
}
|
||||||
return UniTask.CompletedTask;
|
return UniTask.CompletedTask;
|
||||||
|
@ -35,5 +44,6 @@ namespace BITKit.Sensors
|
||||||
public IEnumerable<Transform> Get() => cache.ValueArray;
|
public IEnumerable<Transform> Get() => cache.ValueArray;
|
||||||
public bool IsValid(Collider _collider) => false;
|
public bool IsValid(Collider _collider) => false;
|
||||||
public float GetDistance() => radius;
|
public float GetDistance() => radius;
|
||||||
|
public bool AutoUpdate=>autoUpdate;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ using Cysharp.Threading.Tasks;
|
||||||
using UnityEngine.Jobs;
|
using UnityEngine.Jobs;
|
||||||
using UnityEngine.Pool;
|
using UnityEngine.Pool;
|
||||||
using UnityEngine.Profiling;
|
using UnityEngine.Profiling;
|
||||||
|
using Physics=UnityEngine.Physics;
|
||||||
|
|
||||||
namespace BITKit.Sensors
|
namespace BITKit.Sensors
|
||||||
{
|
{
|
||||||
|
@ -35,12 +36,12 @@ namespace BITKit.Sensors
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly DoubleBuffer<IEnumerable<Transform>> _detectedDoubleBuffer = new();
|
private readonly DoubleBuffer<IEnumerable<Transform>> _detectedDoubleBuffer = new();
|
||||||
private IEnumerable<Transform> _detectedBuffer;
|
private IEnumerable<Transform> _detectedBuffer=Array.Empty<Transform>();
|
||||||
|
|
||||||
public override UniTask Execute(float delta)
|
public override UniTask Execute(float delta)
|
||||||
{
|
{
|
||||||
tempHashSet.Clear();
|
tempHashSet.Clear();
|
||||||
var length = UnityEngine.Physics.OverlapSphereNonAlloc(Transform.position, radius, colliders, detectLayer);
|
var length = Physics.OverlapSphereNonAlloc(Transform.position, radius, colliders, detectLayer);
|
||||||
Profiler.BeginSample("Filter Detected Colliders");
|
Profiler.BeginSample("Filter Detected Colliders");
|
||||||
var _newDetected = from x in colliders.Take(length) where IsValid(x) select x.transform;
|
var _newDetected = from x in colliders.Take(length) where IsValid(x) select x.transform;
|
||||||
Profiler.EndSample();
|
Profiler.EndSample();
|
||||||
|
@ -93,13 +94,7 @@ namespace BITKit.Sensors
|
||||||
Debug.DrawLine(location, position, Color.green, 1);
|
Debug.DrawLine(location, position, Color.green, 1);
|
||||||
return true;
|
return true;
|
||||||
case 1:
|
case 1:
|
||||||
if (hits[0].collider == _collider)
|
return hits[0].collider == _collider;
|
||||||
{
|
|
||||||
Debug.DrawLine(location, hits[0].point, Color.blue, 1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
var collider1 = _collider;
|
var collider1 = _collider;
|
||||||
if (hits.Take(length).Any(Predicate))
|
if (hits.Take(length).Any(Predicate))
|
||||||
|
|
|
@ -3,6 +3,8 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using BITKit.Sensors.States;
|
||||||
|
using BITKit.StateMachine;
|
||||||
using Cysharp.Threading.Tasks;
|
using Cysharp.Threading.Tasks;
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
|
@ -16,270 +18,38 @@ using UnityEngine.UIElements;
|
||||||
|
|
||||||
namespace BITKit.Sensors
|
namespace BITKit.Sensors
|
||||||
{
|
{
|
||||||
|
public interface ISmartTargetProperty{}
|
||||||
|
public interface ISmartTargetState:IState{}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 智能目标传感器,根据条件,智能选择目标
|
/// 智能目标传感器,根据条件,智能选择目标
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SmartTargetSensor :MonoBehaviour,ISensor
|
public class SmartTargetSensor :StateBasedMonoBehaviour<ISmartTargetState>,ISensor
|
||||||
{
|
{
|
||||||
/// <summary>
|
[SerializeField] private float radius;
|
||||||
/// 自动更新
|
[SerializeField] private RangeSensor rangeSensor;
|
||||||
/// </summary>
|
|
||||||
[Header(Constant.Header.Settings)]
|
|
||||||
[SerializeField] private bool autoUpdate;
|
|
||||||
[SerializeField] private Optional<string[]> ignoreTags;
|
|
||||||
[SerializeField] private Optional<IntervalUpdate> optionalRetargetInterval;
|
|
||||||
[SerializeField] private Optional<int> lostTargetInterval;
|
|
||||||
[SerializeField] private Optional<float> detectedTime;
|
|
||||||
[SerializeField] private Transform root;
|
|
||||||
/// <summary>
|
|
||||||
/// 主传感器
|
|
||||||
/// </summary>
|
|
||||||
[Header(nameof(Sensor))]
|
|
||||||
[SerializeField,SerializeReference,SubclassSelector] private ISensor sensor;
|
|
||||||
[SerializeField] private AudioSensor audioSensor;
|
[SerializeField] private AudioSensor audioSensor;
|
||||||
|
public int Id { get; set; }
|
||||||
[Header(Constant.Header.Debug)]
|
private readonly CacheList<Transform> _detected=new();
|
||||||
[SerializeReference, ReadOnly] private int updateCount;
|
|
||||||
|
|
||||||
public IEnumerable<Transform> Get() =>CurrentTarget is not null ? new[] { CurrentTarget }:Enumerable.Empty<Transform>();
|
|
||||||
public int Id { get;private set; }
|
|
||||||
bool ISensor.AutoUpdate => autoUpdate;
|
|
||||||
|
|
||||||
internal StringBuilder reportBuilder;
|
|
||||||
internal readonly DoubleBuffer<string> report=new();
|
|
||||||
internal readonly IntervalUpdate lostTargetIntervalUpdate = new();
|
|
||||||
|
|
||||||
public bool IsValid(Collider _collider)
|
|
||||||
{
|
|
||||||
if (!_collider) return false;
|
|
||||||
if (ignoreTags.Allow)
|
|
||||||
{
|
|
||||||
if (_collider.TryGetComponent<ITag>(out var iTags))
|
|
||||||
{
|
|
||||||
var tags = iTags.GetTags();
|
|
||||||
foreach (var x in ignoreTags.Value)
|
|
||||||
{
|
|
||||||
if (tags.Contains(x))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
public float GetDistance() => sensor.GetDistance();
|
|
||||||
public Transform CurrentTarget { get; private set; }
|
|
||||||
public ISensorTarget SensorTarget { get; private set; }
|
|
||||||
public float TargetWeight
|
|
||||||
{
|
|
||||||
get => _targetWeight;
|
|
||||||
set => _targetWeight = Mathf.Clamp(value, 0, 1);
|
|
||||||
}
|
|
||||||
private float _targetWeight;
|
|
||||||
|
|
||||||
private Vector3 _currentPosition;
|
|
||||||
|
|
||||||
private CancellationTokenSource timeoutCancellationTokenSource=new();
|
|
||||||
|
|
||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
lostTargetIntervalUpdate.Interval = lostTargetInterval;
|
Id = GetInstanceID();
|
||||||
SensorQueue.Register(Id=GetInstanceID(),this);
|
SensorQueue.Register(Id,this);
|
||||||
|
}
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
TransitionState<Idle>();
|
||||||
}
|
}
|
||||||
private void OnDisable()
|
private void OnDisable()
|
||||||
{
|
{
|
||||||
SensorQueue.UnRegister(Id);
|
SensorQueue.UnRegister(Id);
|
||||||
}
|
}
|
||||||
public async UniTask Execute(float delta)
|
public IEnumerable<Transform> Get() => _detected.ValueArray;
|
||||||
|
public bool IsValid(Collider _collider) => false;
|
||||||
|
public float GetDistance() => radius;
|
||||||
|
public UniTask Execute(float delta)
|
||||||
{
|
{
|
||||||
delta=Mathf.Clamp(delta,0.01f,2);
|
CurrentState?.OnStateUpdate(delta);
|
||||||
try
|
return UniTask.CompletedTask;
|
||||||
{
|
|
||||||
_currentPosition = transform.position;
|
|
||||||
updateCount++;
|
|
||||||
timeoutCancellationTokenSource?.Cancel();
|
|
||||||
timeoutCancellationTokenSource = new CancellationTokenSource();
|
|
||||||
await sensor.Execute(delta);
|
|
||||||
|
|
||||||
if (audioSensor)
|
|
||||||
{
|
|
||||||
await audioSensor.Execute(delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
reportBuilder?.AppendLine($"-----BEGIN------{updateCount}");
|
|
||||||
|
|
||||||
Profiler.BeginSample("Release Detected Buffer");
|
|
||||||
|
|
||||||
if (audioSensor)
|
|
||||||
{
|
|
||||||
var heard = audioSensor.Get();
|
|
||||||
if(heard.Any())
|
|
||||||
{
|
|
||||||
CurrentTarget = heard.First();
|
|
||||||
reportBuilder?.AppendLine($"Heard:{CurrentTarget.name}");
|
|
||||||
reportBuilder?.AppendLine($"-----Complete------{updateCount}");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var newDetected = sensor.Get();
|
|
||||||
|
|
||||||
|
|
||||||
if (reportBuilder is not null)
|
|
||||||
{
|
|
||||||
reportBuilder.AppendLine($"Detected:{newDetected.Count()}");
|
|
||||||
foreach (var x in newDetected)
|
|
||||||
{
|
|
||||||
reportBuilder.AppendLine(x.name);
|
|
||||||
}
|
|
||||||
reportBuilder.AppendLine();
|
|
||||||
}
|
|
||||||
Profiler.EndSample();
|
|
||||||
// ReSharper disable once PossibleMultipleEnumeration
|
|
||||||
if (newDetected.Contains(CurrentTarget)||newDetected.Contains(SensorTarget?.Transform))
|
|
||||||
{
|
|
||||||
lostTargetIntervalUpdate.Reset();
|
|
||||||
if (optionalRetargetInterval.Allow && optionalRetargetInterval.Value.AllowUpdate)
|
|
||||||
{
|
|
||||||
reportBuilder?.AppendLine("Retarget Interval Catch,Search New Target");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
reportBuilder?.AppendLine("Current Target Detected,Keep Target");
|
|
||||||
reportBuilder?.AppendLine($"-----Complete------{updateCount}");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(lostTargetInterval.Allow && CurrentTarget is null)
|
|
||||||
{
|
|
||||||
if (lostTargetIntervalUpdate.AllowUpdateWithoutReset)
|
|
||||||
{
|
|
||||||
CurrentTarget = null;
|
|
||||||
reportBuilder?.AppendLine("Lost Target,Search New Target");
|
|
||||||
}
|
|
||||||
else if(CurrentTarget is null )
|
|
||||||
{
|
|
||||||
SensorTarget?.Detected(TargetWeight-=delta, this, root?root:this);
|
|
||||||
|
|
||||||
if (TargetWeight <= 0)
|
|
||||||
{
|
|
||||||
SensorTarget = null;
|
|
||||||
}
|
|
||||||
reportBuilder?.AppendLine($"Lost Target,Forget After {lostTargetIntervalUpdate.Remaining}s");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Profiler.BeginSample("Filter Detected");
|
|
||||||
|
|
||||||
foreach (var x in newDetected.OrderBy(KeySelector))
|
|
||||||
{
|
|
||||||
if(IsValid(x.GetComponent<Collider>()) is false)continue;
|
|
||||||
SensorTarget = x.GetComponent<ISensorTarget>();
|
|
||||||
if (detectedTime.Allow && CurrentTarget is null)
|
|
||||||
{
|
|
||||||
TargetWeight +=detectedTime.Value / delta;
|
|
||||||
SensorTarget?.Detected(TargetWeight, this, root?root:this);
|
|
||||||
reportBuilder?.AppendLine($"New Target See,Weight is:{TargetWeight}");
|
|
||||||
}
|
|
||||||
if (detectedTime.Allow is false || TargetWeight >= 1 && CurrentTarget != x)
|
|
||||||
{
|
|
||||||
CurrentTarget = x;
|
|
||||||
SensorTarget?.Detected(1, this, root?root:this);
|
|
||||||
reportBuilder?.AppendLine($"New Target:{x.name},Is oder by distance");
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Profiler.EndSample();
|
|
||||||
|
|
||||||
reportBuilder?.AppendLine($"-----Complete------{updateCount}");
|
|
||||||
|
|
||||||
if(reportBuilder is not null)
|
|
||||||
{
|
|
||||||
report.Release(reportBuilder.ToString());
|
|
||||||
reportBuilder.Clear();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
report.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
BIT4Log.LogException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
private float KeySelector(Transform x)
|
|
||||||
{
|
|
||||||
var distance = Vector3.Distance(_currentPosition, x.position);
|
|
||||||
reportBuilder?.AppendLine($"Distance:{distance}@{x.name}");
|
|
||||||
return distance;
|
|
||||||
}
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
private void OnDrawGizmosSelected()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!CurrentTarget) return;
|
|
||||||
Gizmos.DrawLine(transform.position,CurrentTarget.position);
|
|
||||||
}
|
|
||||||
catch (UnassignedReferenceException)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
[CustomEditor(typeof(SmartTargetSensor))]
|
|
||||||
public class SmartTargetSensorInspector:BITInspector<SmartTargetSensor>
|
|
||||||
{
|
|
||||||
private ObjectField _objectField;
|
|
||||||
private Label _reportLabel;
|
|
||||||
public override VisualElement CreateInspectorGUI()
|
|
||||||
{
|
|
||||||
FillDefaultInspector();
|
|
||||||
|
|
||||||
CreateSubTitle("Editor Debug Field");
|
|
||||||
|
|
||||||
_objectField = root.Create<ObjectField>();
|
|
||||||
|
|
||||||
_objectField.objectType = typeof(Transform);
|
|
||||||
|
|
||||||
_objectField.SetEnabled(false);
|
|
||||||
|
|
||||||
_reportLabel = root.Create<Label>();
|
|
||||||
|
|
||||||
_reportLabel.text = "Waiting agent report";
|
|
||||||
|
|
||||||
return root;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnEnabled()
|
|
||||||
{
|
|
||||||
base.OnEnabled();
|
|
||||||
agent.reportBuilder = new();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnDisabled()
|
|
||||||
{
|
|
||||||
base.OnDisabled();
|
|
||||||
agent.reportBuilder = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnUpdate()
|
|
||||||
{
|
|
||||||
if (_objectField is not null)
|
|
||||||
{
|
|
||||||
_objectField.value = agent.CurrentTarget;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (agent.reportBuilder is not null && _reportLabel is not null && agent.report.TryGetRelease(out var value))
|
|
||||||
{
|
|
||||||
_reportLabel.text = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BITKit.StateMachine;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace BITKit.Sensors.States
|
||||||
|
{
|
||||||
|
public abstract class SmartTargetSensorStates : ISmartTargetState
|
||||||
|
{
|
||||||
|
public bool Enabled { get; set; }
|
||||||
|
public virtual void Initialize()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public virtual void OnStateEntry(IState old)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public virtual void OnStateUpdate(float deltaTime)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public virtual void OnStateExit(IState old, IState newState)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[Serializable]
|
||||||
|
public sealed class Idle : SmartTargetSensorStates
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,7 +13,8 @@ namespace BITKit
|
||||||
[SerializeField] private string[] tags;
|
[SerializeField] private string[] tags;
|
||||||
[Tooltip("Disable when tags is not empty")]
|
[Tooltip("Disable when tags is not empty")]
|
||||||
[SerializeReference,SubclassSelector] private IReference[] reference;
|
[SerializeReference,SubclassSelector] private IReference[] reference;
|
||||||
|
public int Hash => _id is 0 ? _id = MathE.GetHash(GetTags()) : _id;
|
||||||
|
private int _id;
|
||||||
public string[] GetTags() => CacheTags ??= reference?.Length > 0 ? reference.Select(x => x.Value).ToArray() : tags;
|
public string[] GetTags() => CacheTags ??= reference?.Length > 0 ? reference.Select(x => x.Value).ToArray() : tags;
|
||||||
private string[] CacheTags;
|
private string[] CacheTags;
|
||||||
public void SetTags(IReference[] newReference)
|
public void SetTags(IReference[] newReference)
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace BITKit.NodeCanvas
|
||||||
public BBParameter<Transform> target;
|
public BBParameter<Transform> target;
|
||||||
protected override void OnExecute()
|
protected override void OnExecute()
|
||||||
{
|
{
|
||||||
target.SetValue(sensor.value.CurrentTarget);
|
//target.SetValue(sensor.value.CurrentTarget);
|
||||||
EndAction();
|
EndAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,3 +143,7 @@ MonoBehaviour:
|
||||||
Value: Cosmetic_Saved_Layout
|
Value: Cosmetic_Saved_Layout
|
||||||
- Key: -106643984
|
- Key: -106643984
|
||||||
Value: allow_quest_item
|
Value: allow_quest_item
|
||||||
|
- Key: 1301705678
|
||||||
|
Value: Camp_Human
|
||||||
|
- Key: -1058870509
|
||||||
|
Value: Camp_Zombie
|
||||||
|
|
Loading…
Reference in New Issue