This commit is contained in:
parent
09037a8958
commit
aacf09b2b2
|
@ -625,9 +625,9 @@ MonoBehaviour:
|
|||
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,
|
||||
_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,
|
||||
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,
|
||||
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
|
||||
|
@ -637,14 +637,11 @@ MonoBehaviour:
|
|||
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}'
|
||||
_objectReferences:
|
||||
- {fileID: 0}
|
||||
- {fileID: 5547163794359473138}
|
||||
- {fileID: 6002286783881882295}
|
||||
_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]]"}'
|
||||
_references:
|
||||
- {fileID: 0}
|
||||
- {fileID: 5547163794359473138}
|
||||
_references: []
|
||||
- _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: []
|
||||
|
@ -948,18 +945,6 @@ PrefabInstance:
|
|||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
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
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6256051358093332725, guid: 2ad4d682518910847b19ed8106c0071a,
|
||||
|
|
|
@ -18,9 +18,6 @@ GameObject:
|
|||
- component: {fileID: 5020317200630596891}
|
||||
- component: {fileID: 7936474328313349173}
|
||||
- component: {fileID: 3691802904714930186}
|
||||
- component: {fileID: 1663689908842247019}
|
||||
- component: {fileID: 4359274159838455549}
|
||||
- component: {fileID: 6659077818004947443}
|
||||
- component: {fileID: 5179535705297386567}
|
||||
- component: {fileID: 4204812059243969666}
|
||||
- component: {fileID: 591561399114057092}
|
||||
|
@ -31,6 +28,7 @@ GameObject:
|
|||
- component: {fileID: 2332545226796783687}
|
||||
- component: {fileID: 5701445397685345264}
|
||||
- component: {fileID: 4192408521140958198}
|
||||
- component: {fileID: 4873303856304307760}
|
||||
m_Layer: 6
|
||||
m_Name: Zombie
|
||||
m_TagString: Untagged
|
||||
|
@ -53,6 +51,7 @@ Transform:
|
|||
m_Children:
|
||||
- {fileID: 3509096854786611592}
|
||||
- {fileID: 6503844267943367046}
|
||||
- {fileID: 8461637830315704982}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8426729501548603387
|
||||
|
@ -113,7 +112,7 @@ MonoBehaviour:
|
|||
- rid: 33717727055315050
|
||||
type: {class: DictionaryReference, ns: BITKit, asm: BITKit}
|
||||
data:
|
||||
index: 682457707
|
||||
index: -1058870509
|
||||
keyword: z
|
||||
--- !u!95 &673930142905110667
|
||||
Animator:
|
||||
|
@ -229,96 +228,6 @@ NavMeshAgent:
|
|||
m_BaseOffset: 0
|
||||
m_WalkableMask: 4294967295
|
||||
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
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -429,7 +338,7 @@ MonoBehaviour:
|
|||
- rid: 7707058052847370280
|
||||
type: {class: SensorMonoProxy, ns: BITKit.Sensors, asm: BITKit.Sensor}
|
||||
data:
|
||||
monoBehaviour: {fileID: 8182690404236474479}
|
||||
monoBehaviour: {fileID: 0}
|
||||
--- !u!114 &6530587526832555870
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -628,6 +537,57 @@ Rigidbody:
|
|||
m_Interpolate: 0
|
||||
m_Constraints: 126
|
||||
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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -768,24 +728,214 @@ PrefabInstance:
|
|||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 2ad4d682518910847b19ed8106c0071a, type: 3}
|
||||
--- !u!4 &6503844267943367046 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6256051358093332725, guid: 2ad4d682518910847b19ed8106c0071a,
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 906277369666945395}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &8182690404236474479 stripped
|
||||
--- !u!114 &4975421454249292524 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 9015502658869033244, guid: 2ad4d682518910847b19ed8106c0071a,
|
||||
m_CorrespondingSourceObject: {fileID: 5305100744181658527, 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: 33d6f52a9de8ea149ab70ac4e67a0c36, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: d7841c9177d83e54594af3d7a9ec4b08, type: 3}
|
||||
m_Name:
|
||||
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
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
|
@ -78,6 +78,11 @@ PrefabInstance:
|
|||
propertyPath: rmsCount
|
||||
value: 6
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3613778988776262925, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||
type: 3}
|
||||
propertyPath: outlineWidth
|
||||
value: 0.16
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||
type: 3}
|
||||
propertyPath: m_Name
|
||||
|
@ -99,18 +104,14 @@ PrefabInstance:
|
|||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||
type: 3}
|
||||
insertIndex: 6
|
||||
addedObject: {fileID: 8092395782639463146}
|
||||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||
type: 3}
|
||||
insertIndex: 7
|
||||
addedObject: {fileID: 4709101312187563039}
|
||||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||
type: 3}
|
||||
insertIndex: 8
|
||||
insertIndex: 7
|
||||
addedObject: {fileID: 768493181001795629}
|
||||
- targetCorrespondingSourceObject: {fileID: 5514379543162470980, guid: 27719a3d454f29b4381adf6c7c1bd84d,
|
||||
type: 3}
|
||||
insertIndex: 9
|
||||
insertIndex: 8
|
||||
addedObject: {fileID: 7499168752360152102}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 27719a3d454f29b4381adf6c7c1bd84d, type: 3}
|
||||
--- !u!54 &199638012735786757 stripped
|
||||
|
@ -131,22 +132,6 @@ GameObject:
|
|||
type: 3}
|
||||
m_PrefabInstance: {fileID: 6414151364918162970}
|
||||
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
|
||||
Animator:
|
||||
serializedVersion: 5
|
||||
|
|
|
@ -241,6 +241,9 @@ MonoBehaviour:
|
|||
physicsBasedAnimation:
|
||||
allow: 1
|
||||
value: {fileID: 3862100421307477824}
|
||||
aliveRigidbody:
|
||||
allow: 0
|
||||
value: {fileID: 0}
|
||||
references:
|
||||
version: 2
|
||||
RefIds:
|
||||
|
@ -321,19 +324,8 @@ MonoBehaviour:
|
|||
- rid: 7707058030789525626
|
||||
type: {class: Walk, ns: BITFALL.Movement.MotionBased.States, asm: BITFALL.Entities.Movement.Runtime}
|
||||
data:
|
||||
_state:
|
||||
_FadeDuration: 0.25
|
||||
_Events:
|
||||
_NormalizedTimes: []
|
||||
_Callbacks: []
|
||||
_Names: []
|
||||
_Speed: 1
|
||||
_Animations: []
|
||||
_Speeds: []
|
||||
_SynchronizeChildren:
|
||||
_Thresholds: []
|
||||
_DefaultParameter: 0
|
||||
_ExtrapolateSpeed: 1
|
||||
entryClips: []
|
||||
clips: []
|
||||
- rid: 7707058030789525638
|
||||
type: {class: IdleTurn, ns: BITFALL.Movement.MotionBased.States, asm: BITFALL.Entities.Movement.Runtime}
|
||||
data:
|
||||
|
@ -393,22 +385,19 @@ MonoBehaviour:
|
|||
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,
|
||||
_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,
|
||||
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,
|
||||
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: 7313871570116796115}
|
||||
- {fileID: 487596900774587583}
|
||||
_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]]"}'
|
||||
_references:
|
||||
- {fileID: 0}
|
||||
- {fileID: 7313871570116796115}
|
||||
_references: []
|
||||
- _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: []
|
||||
|
@ -534,7 +523,7 @@ MonoBehaviour:
|
|||
- rid: 7707058052847370262
|
||||
type: {class: SensorMonoProxy, ns: BITKit.Sensors, asm: BITKit.Sensor}
|
||||
data:
|
||||
monoBehaviour: {fileID: 7313871570116796115}
|
||||
monoBehaviour: {fileID: 0}
|
||||
--- !u!1001 &1773688828836030415
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -644,18 +633,6 @@ Transform:
|
|||
type: 3}
|
||||
m_PrefabInstance: {fileID: 1773688828836030415}
|
||||
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
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
|
@ -1004,6 +1004,7 @@ GameObject:
|
|||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4826102346843731735}
|
||||
- component: {fileID: 6313379856987838926}
|
||||
- component: {fileID: 2634754629000604700}
|
||||
- component: {fileID: 6417910595033156401}
|
||||
- component: {fileID: 6002452162850529175}
|
||||
|
@ -1088,6 +1089,29 @@ Transform:
|
|||
- {fileID: 5853897294963205446}
|
||||
m_Father: {fileID: 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
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
|
@ -44,7 +44,11 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d7841c9177d83e54594af3d7a9ec4b08, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
autoUpdate: 1
|
||||
radius: 24
|
||||
ignoreTags:
|
||||
allow: 0
|
||||
value: []
|
||||
--- !u!1 &6742090447984940087
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -54,7 +58,6 @@ GameObject:
|
|||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6256051358093332725}
|
||||
- component: {fileID: 9015502658869033244}
|
||||
m_Layer: 0
|
||||
m_Name: Sensor
|
||||
m_TagString: Untagged
|
||||
|
@ -79,44 +82,6 @@ Transform:
|
|||
- {fileID: 6750927362237252721}
|
||||
m_Father: {fileID: 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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -164,7 +129,7 @@ MonoBehaviour:
|
|||
detectLayer:
|
||||
serializedVersion: 2
|
||||
m_Bits: 64
|
||||
autoUpdate: 0
|
||||
autoUpdate: 1
|
||||
ignoreColliders:
|
||||
- {fileID: 0}
|
||||
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:508392158bd966c4d9c21e19661a441d",
|
||||
"GUID:f51ebe6a0ceec4240a699833d6309b23",
|
||||
"GUID:2dbcdde5f5df6a343a36c62f12bd6fae"
|
||||
"GUID:2dbcdde5f5df6a343a36c62f12bd6fae",
|
||||
"GUID:705b66b7892e7524f912fd152f5d5251"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"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.Animations;
|
||||
using BITKit.Entities;
|
||||
using BITKit.Physics;
|
||||
|
||||
namespace BITFALL.Entites
|
||||
namespace BITFALL.Entities
|
||||
{
|
||||
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
|
||||
{
|
||||
int Hash { get; }
|
||||
string[] GetTags();
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ using System.Collections.Generic;
|
|||
using BITKit.Core.Tuple;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BITKit.Physics
|
||||
namespace BITKit
|
||||
{
|
||||
[Serializable]
|
||||
public class JointConfigure
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using BITKit.Events;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BITKit.Physics
|
||||
namespace BITKit
|
||||
{
|
||||
public class Prop_Physics : MonoBehaviour
|
||||
{
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Cysharp.Threading.Tasks;
|
||||
|
@ -15,9 +16,18 @@ namespace BITKit.Sensors
|
|||
public class AudioSensor : MonoBehaviour,ISensor
|
||||
{
|
||||
[Header(Constant.Header.Settings)]
|
||||
[SerializeField] private bool autoUpdate;
|
||||
[SerializeField]private float radius;
|
||||
[SerializeField] private Optional<string[]> ignoreTags;
|
||||
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)
|
||||
{
|
||||
var position = transform.position;
|
||||
|
@ -26,7 +36,6 @@ namespace BITKit.Sensors
|
|||
{
|
||||
var distance = Vector3.Distance(position, x.Position);
|
||||
if(distance>radius) continue;
|
||||
if(ignoreTags.Allow && x.Tag is { } tag1 && tag1.GetTags().Any(ignoreTags.Value.Contains)) continue;
|
||||
cache.Add(x.Transform);
|
||||
}
|
||||
return UniTask.CompletedTask;
|
||||
|
@ -35,5 +44,6 @@ namespace BITKit.Sensors
|
|||
public IEnumerable<Transform> Get() => cache.ValueArray;
|
||||
public bool IsValid(Collider _collider) => false;
|
||||
public float GetDistance() => radius;
|
||||
public bool AutoUpdate=>autoUpdate;
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ using Cysharp.Threading.Tasks;
|
|||
using UnityEngine.Jobs;
|
||||
using UnityEngine.Pool;
|
||||
using UnityEngine.Profiling;
|
||||
using Physics=UnityEngine.Physics;
|
||||
|
||||
namespace BITKit.Sensors
|
||||
{
|
||||
|
@ -35,12 +36,12 @@ namespace BITKit.Sensors
|
|||
}
|
||||
|
||||
private readonly DoubleBuffer<IEnumerable<Transform>> _detectedDoubleBuffer = new();
|
||||
private IEnumerable<Transform> _detectedBuffer;
|
||||
private IEnumerable<Transform> _detectedBuffer=Array.Empty<Transform>();
|
||||
|
||||
public override UniTask Execute(float delta)
|
||||
{
|
||||
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");
|
||||
var _newDetected = from x in colliders.Take(length) where IsValid(x) select x.transform;
|
||||
Profiler.EndSample();
|
||||
|
@ -93,13 +94,7 @@ namespace BITKit.Sensors
|
|||
Debug.DrawLine(location, position, Color.green, 1);
|
||||
return true;
|
||||
case 1:
|
||||
if (hits[0].collider == _collider)
|
||||
{
|
||||
Debug.DrawLine(location, hits[0].point, Color.blue, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
return hits[0].collider == _collider;
|
||||
default:
|
||||
var collider1 = _collider;
|
||||
if (hits.Take(length).Any(Predicate))
|
||||
|
|
|
@ -3,6 +3,8 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using BITKit.Sensors.States;
|
||||
using BITKit.StateMachine;
|
||||
using Cysharp.Threading.Tasks;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
|
@ -16,270 +18,38 @@ using UnityEngine.UIElements;
|
|||
|
||||
namespace BITKit.Sensors
|
||||
{
|
||||
public interface ISmartTargetProperty{}
|
||||
public interface ISmartTargetState:IState{}
|
||||
/// <summary>
|
||||
/// 智能目标传感器,根据条件,智能选择目标
|
||||
/// </summary>
|
||||
public class SmartTargetSensor :MonoBehaviour,ISensor
|
||||
public class SmartTargetSensor :StateBasedMonoBehaviour<ISmartTargetState>,ISensor
|
||||
{
|
||||
/// <summary>
|
||||
/// 自动更新
|
||||
/// </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 float radius;
|
||||
[SerializeField] private RangeSensor rangeSensor;
|
||||
[SerializeField] private AudioSensor audioSensor;
|
||||
|
||||
[Header(Constant.Header.Debug)]
|
||||
[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();
|
||||
|
||||
public int Id { get; set; }
|
||||
private readonly CacheList<Transform> _detected=new();
|
||||
private void OnEnable()
|
||||
{
|
||||
lostTargetIntervalUpdate.Interval = lostTargetInterval;
|
||||
SensorQueue.Register(Id=GetInstanceID(),this);
|
||||
Id = GetInstanceID();
|
||||
SensorQueue.Register(Id,this);
|
||||
}
|
||||
private void Start()
|
||||
{
|
||||
TransitionState<Idle>();
|
||||
}
|
||||
private void OnDisable()
|
||||
{
|
||||
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);
|
||||
try
|
||||
{
|
||||
_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;
|
||||
}
|
||||
CurrentState?.OnStateUpdate(delta);
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
#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;
|
||||
[Tooltip("Disable when tags is not empty")]
|
||||
[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;
|
||||
private string[] CacheTags;
|
||||
public void SetTags(IReference[] newReference)
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace BITKit.NodeCanvas
|
|||
public BBParameter<Transform> target;
|
||||
protected override void OnExecute()
|
||||
{
|
||||
target.SetValue(sensor.value.CurrentTarget);
|
||||
//target.SetValue(sensor.value.CurrentTarget);
|
||||
EndAction();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,3 +143,7 @@ MonoBehaviour:
|
|||
Value: Cosmetic_Saved_Layout
|
||||
- Key: -106643984
|
||||
Value: allow_quest_item
|
||||
- Key: 1301705678
|
||||
Value: Camp_Human
|
||||
- Key: -1058870509
|
||||
Value: Camp_Zombie
|
||||
|
|
Loading…
Reference in New Issue