Merge branch 'krazerleo/core/1' into lisin/character/1

This commit is contained in:
2022-04-18 17:04:36 +07:00
64 changed files with 1576 additions and 1114 deletions

6
.vsconfig Normal file
View File

@ -0,0 +1,6 @@
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Workload.ManagedGame"
]
}

View File

@ -1 +1 @@
{"count":1,"self":19.9775968,"total":20.018629999999998,"children":{"InitializeActuators":{"count":1,"self":0.0010006,"total":0.0010006,"children":null},"AgentSendState":{"count":765,"self":0.0057472999999999995,"total":0.0057472999999999995,"children":null},"DecideAction":{"count":765,"self":0.0332866,"total":0.0332866,"children":null}},"gauges":{},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1649742457","unity_version":"2019.4.35f1","command_line_arguments":"D:\\Unity\\2019.4.35f1\\Editor\\Unity.exe -projectpath C:\\Users\\kiril\\real-shooter -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-kiril -hubSessionId 21e9de90-ba14-11ec-9398-079edccf5e34 -accessToken oIpf_7gKWQQRilVTeJehUsFhrxasdzsG_K3j5Swtgx0009f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"Greatest_map_ever","end_time_seconds":"1649742477"}} {"count":1,"self":16.677081599999998,"total":16.6850819,"children":{"InitializeActuators":{"count":1,"self":0.0020011,"total":0.0020011,"children":null},"InitializeSensors":{"count":1,"self":0.0019998,"total":0.0019998,"children":null},"AgentSendState":{"count":1,"self":0.0020001,"total":0.0030001,"children":{"CollectObservations":{"count":1,"self":0.001,"total":0.001,"children":null}}}},"gauges":{},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1650121997","unity_version":"2019.4.35f1","command_line_arguments":"C:\\Program Files\\unityeditorfolder\\2019.4.35f1\\Editor\\Unity.exe -projectpath F:\\SigmaRiskManagment\\real shooter Git Version -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-BipJTP5Uk-fN-2Lss2TUJ -hubSessionId a1fe6f50-bcbd-11ec-b648-df8ff5c97a4c -accessToken K_G64_ace_5LgpX3riGrgGS92ESag4RH04Ti1lswMX8009f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"Greatest_map_ever","end_time_seconds":"1650122013"}}

View File

@ -13,6 +13,10 @@ GameObject:
- component: {fileID: 2988578997639256868} - component: {fileID: 2988578997639256868}
- component: {fileID: 2988578997639256875} - component: {fileID: 2988578997639256875}
- component: {fileID: 5447337162552783061} - component: {fileID: 5447337162552783061}
- component: {fileID: 7805954453358028498}
- component: {fileID: 2676446634235362783}
- component: {fileID: 8656710265340117963}
- component: {fileID: 778652956973742106}
m_Layer: 0 m_Layer: 0
m_Name: Bot m_Name: Bot
m_TagString: Untagged m_TagString: Untagged
@ -107,7 +111,87 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a6f2a081cfc8c4b4bb6864331109d147, type: 3} m_Script: {fileID: 11500000, guid: a6f2a081cfc8c4b4bb6864331109d147, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
HealthPoints: 100 agentParameters:
Armour: 100 maxStep: 0
Ammunition: 360 hasUpgradedFromAgentParameters: 1
LastTimeHit: 0 MaxStep: 100
moveController: {fileID: 778652956973742106}
--- !u!114 &7805954453358028498
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2988578997639256874}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3a5c9d521e5ef4759a8246a07d52221e, type: 3}
m_Name:
m_EditorClassIdentifier:
DecisionPeriod: 1
TakeActionsBetweenDecisions: 1
--- !u!114 &2676446634235362783
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2988578997639256874}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3}
m_Name:
m_EditorClassIdentifier:
m_BrainParameters:
VectorObservationSize: 1
NumStackedVectorObservations: 1
m_ActionSpec:
m_NumContinuousActions: 0
BranchSizes: 01000000
VectorActionSize: 01000000
VectorActionDescriptions: []
VectorActionSpaceType: 0
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 0}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: My Behavior
TeamId: 0
m_UseChildSensors: 1
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!195 &8656710265340117963
NavMeshAgent:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2988578997639256874}
m_Enabled: 1
m_AgentTypeID: 0
m_Radius: 0.5
m_Speed: 3.5
m_Acceleration: 8
avoidancePriority: 50
m_AngularSpeed: 120
m_StoppingDistance: 0
m_AutoTraverseOffMeshLink: 1
m_AutoBraking: 1
m_AutoRepath: 1
m_Height: 2
m_BaseOffset: 1
m_WalkableMask: 4294967295
m_ObstacleAvoidanceType: 4
--- !u!114 &778652956973742106
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2988578997639256874}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d3ebcf807a37f344998fd648dfc9376d, type: 3}
m_Name:
m_EditorClassIdentifier:
navMeshAgent: {fileID: 8656710265340117963}

View File

@ -1,6 +1,6 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &4528203470433968325 --- !u!1 &5245491127989480125
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@ -8,98 +8,15 @@ GameObject:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 4528203470433968376} - component: {fileID: 5245491127989480103}
- component: {fileID: 4528203470433968327} - component: {fileID: 5245491127989480102}
- component: {fileID: 4528203470433968326} - component: {fileID: 5583297852527723678}
m_Layer: 8 - component: {fileID: 5245491127989480120}
m_Name: Camera - component: {fileID: 5245491127989480100}
m_TagString: Untagged - component: {fileID: 5245491127989480121}
m_Icon: {fileID: 0} - component: {fileID: 5245491127989480123}
m_NavMeshLayer: 0 - component: {fileID: 5245491127989480122}
m_StaticEditorFlags: 0 - component: {fileID: 4890899368932544690}
m_IsActive: 1
--- !u!4 &4528203470433968376
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470433968325}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.734, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4528203471293941515}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!20 &4528203470433968327
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470433968325}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!81 &4528203470433968326
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470433968325}
m_Enabled: 1
--- !u!1 &4528203470625763699
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4528203470625763689}
- component: {fileID: 4528203470625763688}
- component: {fileID: -4942972567661207728}
- component: {fileID: 4528203470625763702}
- component: {fileID: 4528203470625763690}
- component: {fileID: 4528203470625763703}
- component: {fileID: 4528203470625763701}
- component: {fileID: 4528203470625763700}
- component: {fileID: 1061105263471521090}
m_Layer: 8 m_Layer: 8
m_Name: Player m_Name: Player
m_TagString: Defender m_TagString: Defender
@ -107,37 +24,37 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &4528203470625763689 --- !u!4 &5245491127989480103
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 28.21, y: 14.12, z: 48.395} m_LocalPosition: {x: 28.21, y: 10.9, z: 46.67}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 4528203471293941515} - {fileID: 5245491129196666053}
- {fileID: 4528203471164033737} - {fileID: 5245491129603592455}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
--- !u!33 &4528203470625763688 --- !u!33 &5245491127989480102
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &-4942972567661207728 --- !u!23 &5583297852527723678
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
@ -170,13 +87,13 @@ MeshRenderer:
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
--- !u!136 &4528203470625763702 --- !u!136 &5245491127989480120
CapsuleCollider: CapsuleCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 0 m_Enabled: 0
@ -184,13 +101,13 @@ CapsuleCollider:
m_Height: 2 m_Height: 2
m_Direction: 1 m_Direction: 1
m_Center: {x: 0, y: 0, z: 0} m_Center: {x: 0, y: 0, z: 0}
--- !u!136 &4528203470625763690 --- !u!136 &5245491127989480100
CapsuleCollider: CapsuleCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 0 m_Enabled: 0
@ -198,13 +115,13 @@ CapsuleCollider:
m_Height: 1.3 m_Height: 1.3
m_Direction: 1 m_Direction: 1
m_Center: {x: 0, y: -0.35, z: 0} m_Center: {x: 0, y: -0.35, z: 0}
--- !u!136 &4528203470625763703 --- !u!136 &5245491127989480121
CapsuleCollider: CapsuleCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
@ -212,13 +129,13 @@ CapsuleCollider:
m_Height: 0.8 m_Height: 0.8
m_Direction: 1 m_Direction: 1
m_Center: {x: 0, y: -0.6, z: 0} m_Center: {x: 0, y: -0.6, z: 0}
--- !u!143 &4528203470625763701 --- !u!143 &5245491127989480123
CharacterController: CharacterController:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IsTrigger: 0 m_IsTrigger: 0
m_Enabled: 1 m_Enabled: 1
@ -230,20 +147,21 @@ CharacterController:
m_SkinWidth: 0.08 m_SkinWidth: 0.08
m_MinMoveDistance: 0.001 m_MinMoveDistance: 0.001
m_Center: {x: 0, y: 0, z: 0} m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &4528203470625763700 --- !u!114 &5245491127989480122
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9826297ef4d853741b2af768441ec7f7, type: 3} m_Script: {fileID: 11500000, guid: 9826297ef4d853741b2af768441ec7f7, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
cameraHolder: {fileID: 4528203471293941515} input_View: {x: 0, y: 0}
feetTransform: {fileID: 4528203471164033737} cameraHolder: {fileID: 5245491129196666053}
feetTransform: {fileID: 5245491129603592455}
playerSettings: playerSettings:
ViewXSensetivity: 20 ViewXSensetivity: 20
ViewYSensetivity: 20 ViewYSensetivity: 20
@ -271,31 +189,31 @@ MonoBehaviour:
gravityAmount: 0.05 gravityAmount: 0.05
gravityMin: -3 gravityMin: -3
jumpingForce: {x: 0, y: 0, z: 0} jumpingForce: {x: 0, y: 0, z: 0}
playerStance: 2 playerStance: 0
playerStanceSmoothing: 0.2 playerStanceSmoothing: 0.2
playerStandStance: playerStandStance:
CameraHeight: 0.7 CameraHeight: 0.7
StanceCollider: {fileID: 4528203470625763702} StanceCollider: {fileID: 5245491127989480120}
playerCrouchStance: playerCrouchStance:
CameraHeight: 0 CameraHeight: 0.3
StanceCollider: {fileID: 4528203470625763690} StanceCollider: {fileID: 5245491127989480100}
playerProneStance: playerProneStance:
CameraHeight: -0.58 CameraHeight: -0.58
StanceCollider: {fileID: 4528203470625763703} StanceCollider: {fileID: 5245491127989480121}
--- !u!114 &1061105263471521090 currentWeapon: {fileID: 8510909888689775086}
--- !u!114 &4890899368932544690
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203470625763699} m_GameObject: {fileID: 5245491127989480125}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a6f2a081cfc8c4b4bb6864331109d147, type: 3} m_Script: {fileID: 11500000, guid: a8c9a8e604d395c4ab9d03d28adc4982, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
LastTimeHit: 0 --- !u!1 &5245491128202443531
--- !u!1 &4528203471164033736
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@ -303,29 +221,82 @@ GameObject:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 4528203471164033737} - component: {fileID: 5245491128202443574}
- component: {fileID: 5245491128202443529}
- component: {fileID: 5245491128202443528}
m_Layer: 8 m_Layer: 8
m_Name: FeetTransform m_Name: Camera
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &4528203471164033737 --- !u!4 &5245491128202443574
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203471164033736} m_GameObject: {fileID: 5245491128202443531}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: -1, z: 0} m_LocalPosition: {x: 0, y: 0.388, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 4528203470625763689} m_Father: {fileID: 5245491129196666053}
m_RootOrder: 1 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &4528203471293941514 --- !u!20 &5245491128202443529
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5245491128202443531}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.1
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!81 &5245491128202443528
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5245491128202443531}
m_Enabled: 1
--- !u!1 &5245491129196666052
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@ -333,7 +304,7 @@ GameObject:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 4528203471293941515} - component: {fileID: 5245491129196666053}
m_Layer: 8 m_Layer: 8
m_Name: CameraHolder m_Name: CameraHolder
m_TagString: Untagged m_TagString: Untagged
@ -341,18 +312,194 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &4528203471293941515 --- !u!4 &5245491129196666053
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4528203471293941514} m_GameObject: {fileID: 5245491129196666052}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.7, z: 0} m_LocalPosition: {x: 0, y: 0.7, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 4528203470433968376} - {fileID: 5245491128202443574}
m_Father: {fileID: 4528203470625763689} - {fileID: 8510909888689775087}
m_Father: {fileID: 5245491127989480103}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &5245491129603592454
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5245491129603592455}
m_Layer: 8
m_Name: FeetTransform
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5245491129603592455
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5245491129603592454}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: -1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 5245491127989480103}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8510909888198732725
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8510909888198732726}
- component: {fileID: 8510909888198732713}
- component: {fileID: 8510909888198732712}
- component: {fileID: 8510909888198732727}
m_Layer: 8
m_Name: WeaponModel
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8510909888198732726
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8510909888198732725}
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_Children: []
m_Father: {fileID: 8510909888689775087}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8510909888198732713
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8510909888198732725}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &8510909888198732712
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8510909888198732725}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!65 &8510909888198732727
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8510909888198732725}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &8510909888689775085
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8510909888689775087}
- component: {fileID: 8510909888689775086}
m_Layer: 8
m_Name: Weapon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8510909888689775087
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8510909888689775085}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.332, y: 0.038, z: 0.394}
m_LocalScale: {x: 0.16226998, y: 0.1581135, z: 1}
m_Children:
- {fileID: 8510909888198732726}
m_Father: {fileID: 5245491129196666053}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &8510909888689775086
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8510909888689775085}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 088bf904d7c90a44dbb35c1d47c2692e, type: 3}
m_Name:
m_EditorClassIdentifier:
settings:
SwayAmount: 4
SwayYInverted: 0
SwayXInverted: 0
SwaySmoothing: 0.1
SwayResetSmoothing: 0.1
SwayClampX: 8
SwayClampY: 8

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 09beff657ef5d1c4eba194a01e121c1a guid: 305bb221606d7a748acca94156e2d347
NativeFormatImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 23800000 mainObjectFileID: 23800000

0
Assets/Scenes/tyt player.meta generated Executable file → Normal file
View File

0
Assets/Scenes/tyt player/Player.prefab.meta generated Executable file → Normal file
View File

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 9fbac871417fccb40831b0f935247a29
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,17 +0,0 @@
using Unity;
using UnityEngine;
public abstract class BaseBehaviour
{
protected NPC thisNPC;
protected IDoActivity DoActivity;
protected BaseBehaviour(NPC npc)
{
thisNPC = npc;
}
public void DoAction()
{
DoActivity?.DoActivity();
}
}

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 362d340e6754883459f3dc89c9ddc476
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
public class DumbAttacker : BaseBehaviour
{
public DumbAttacker(NPC npc) : base(npc)
{
DoActivity = new DumbAttackerBehaviour();
}
}

View File

@ -1,7 +0,0 @@
public class DumbDefender : BaseBehaviour
{
public DumbDefender(NPC npc) : base(npc)
{
DoActivity = new DumbDefenderBehaviour();
}
}

View File

@ -1,7 +0,0 @@
public class Human : BaseBehaviour
{
public Human(NPC npc) : base(npc)
{
DoActivity = new HumanBehaviour();
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 59d3d253756147e469e418971625a04c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 93364cc95c8c9764e83d70fcce9da482
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,9 +0,0 @@
using UnityEngine;
class DumbAttackerBehaviour : IDoActivity
{
public void DoActivity()
{
Debug.Log("I do attackers things!");
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: d2cc7b0640887454e96d42f6bd066750
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,9 +0,0 @@
using UnityEngine;
class DumbDefenderBehaviour : IDoActivity
{
public void DoActivity()
{
Debug.Log("I do defenders things!");
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 27106553be3f26b4da5220e39a3098c3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
class HumanBehaviour : IDoActivity
{
public void DoActivity()
{
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: d207d14aaf634504e84f3e3bd8b52428
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +0,0 @@
public interface IDoActivity
{
void DoActivity();
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 8e7275817852aa941963daa476581224
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,59 @@
using System.Collections.Generic;
using UnityEngine;
using Unity;
public class CharacterFactory : MonoBehaviour
{
private CharacterFactory instance;
public CharacterFactory Instance { get { return instance; } }
[SerializeField] private List<NavPoint> spawnPointsForDefendersTeam;
[SerializeField] private List<NavPoint> spawnPointsForAttackersTeam;
[SerializeField] private GameObject AIPrefab;
[SerializeField] private GameObject PlayerPrefab;
private List<GameObject> Players;
private void Awake()
{
if (instance == null)
instance = this;
else
Destroy(gameObject);
}
private void Start()
{
var attcNum = SettingsReader.Instance.GetSettings.numOfAttackers;
var defNum = SettingsReader.Instance.GetSettings.numOfDefenders;
var humanDef = SettingsReader.Instance.GetSettings.hasHumanDefender == true ? 1 : 0;
var humanAtc = SettingsReader.Instance.GetSettings.hasHumanAttacker == true ? 1 : 0;
if (humanAtc == 1 && humanDef == 1)
throw new System.ArgumentException("Can be only one human player");
for (int i = 0; i < attcNum - humanAtc; i++)
InstanciateEntity(Team.Attackers, TypeAI.D0DiskAI,
spawnPointsForAttackersTeam[Random.Range(0, spawnPointsForAttackersTeam.Count)]);
for (int i = 0; i < defNum - humanDef; i++)
InstanciateEntity(Team.Defenders, TypeAI.D0DiskAI,
spawnPointsForDefendersTeam[Random.Range(0, spawnPointsForDefendersTeam.Count)]);
if (humanAtc == 1)
InstanciateEntity(Team.Attackers, TypeAI.HumanAI,
spawnPointsForAttackersTeam[Random.Range(0, spawnPointsForAttackersTeam.Count)]);
if (humanDef == 1)
InstanciateEntity(Team.Defenders, TypeAI.HumanAI,
spawnPointsForDefendersTeam[Random.Range(0, spawnPointsForDefendersTeam.Count)]);
}
private void InstanciateEntity(Team team, TypeAI typeAi, NavPoint spawnPoint)
{
var gameobject = GameObject.Instantiate(
typeAi == TypeAI.HumanAI ? PlayerPrefab : AIPrefab,
spawnPoint.position,
Quaternion.identity);
var character = gameObject.GetComponent<ICharacter>();
character.GetCharacter.Team = team;
}
}

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 93133f9c3db1b944d9120ea789988f9b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,45 +0,0 @@
public abstract class AbstractCharacterFactory
{
protected IDoActivity behaviour;
protected AbstractCharacterFactory() { }
public abstract BaseBehaviour CreateCharacterBehaviour(NPC npc);
}
public class DumbDefenderFactory : AbstractCharacterFactory
{
public DumbDefenderFactory()
{
behaviour = new DumbDefenderBehaviour();
}
public override BaseBehaviour CreateCharacterBehaviour(NPC npc)
{
return new DumbDefender(npc);
}
}
public class DumbAttackerFactory : AbstractCharacterFactory
{
public DumbAttackerFactory()
{
behaviour = new DumbAttackerBehaviour();
}
public override BaseBehaviour CreateCharacterBehaviour(NPC npc)
{
return new DumbAttacker(npc);
}
}
public class HumanFactory : AbstractCharacterFactory
{
public HumanFactory()
{
behaviour = new HumanBehaviour();
}
public override BaseBehaviour CreateCharacterBehaviour(NPC npc)
{
return new Human(npc);
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4f973f98c4f699745a605d09e2c1e46e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,55 +0,0 @@
using System.Collections.Generic;
using System;
using UnityEngine;
public class CharacterSpawner : MonoBehaviour
{
[SerializeField] private GameObject botPrefab;
[SerializeField] private List<NavPoint> defendersSpawnPoints;
[SerializeField] private List<NavPoint> attackersSpawnPoints;
private static Dictionary<(TypeAI, Team), Func<NPC, BaseBehaviour>> behaviourDictionary;
private static System.Random random;
public void Start()
{
behaviourDictionary = new Dictionary<(TypeAI, Team), Func<NPC, BaseBehaviour>>()
{
{ (TypeAI.DumbAlgorithm, Team.Attackers), new Func<NPC,BaseBehaviour>( npc => new DumbAttacker(npc))},
{ (TypeAI.DumbAlgorithm, Team.Defenders), new Func<NPC,BaseBehaviour>( npc => new DumbDefender(npc)) },
{ (TypeAI.HumanAI, Team.Defenders), new Func<NPC,BaseBehaviour>( npc => new Human(npc))},
{ (TypeAI.HumanAI, Team.Attackers), new Func<NPC,BaseBehaviour>( npc => new Human(npc))},
//And Other behaviours
};
if (SettingsReader.Instance.GetSettings.hasHumanAttacker && SettingsReader.Instance.GetSettings.hasHumanDefender)
throw new System.Exception("Not allowed to have two players");
else if (SettingsReader.Instance.GetSettings.hasHumanAttacker == true)
{
spawnCharacter(behaviourDictionary[(TypeAI.HumanAI, Team.Attackers)], Team.Attackers);
}
else if (SettingsReader.Instance.GetSettings.hasHumanDefender == true)
{
spawnCharacter(behaviourDictionary[(TypeAI.HumanAI, Team.Defenders)], Team.Defenders);
}
for (int i = 0; i < SettingsReader.Instance.GetSettings.numOfAttackers - (SettingsReader.Instance.GetSettings.hasHumanAttacker ? 1 : 0); i++)
{
spawnCharacter(behaviourDictionary[(SettingsReader.Instance.GetSettings.atcTeamAI, Team.Attackers)], Team.Attackers);
}
for (int i = 0; i < SettingsReader.Instance.GetSettings.numOfAttackers - (SettingsReader.Instance.GetSettings.hasHumanDefender ? 1 : 0); i++)
{
spawnCharacter(behaviourDictionary[(SettingsReader.Instance.GetSettings.defTeamAI, Team.Defenders)], Team.Defenders);
}
}
private void spawnCharacter(Func<NPC, BaseBehaviour> behaviourFunc, Team team)
{
var spawnPoint = team == Team.Defenders ?
defendersSpawnPoints[random.Next(0, defendersSpawnPoints.Count)].position :
attackersSpawnPoints[random.Next(0, attackersSpawnPoints.Count)].position;
var entity = Instantiate(botPrefab, spawnPoint, Quaternion.identity);
var npc = entity.GetComponent<NPC>();
npc.SetBehaviour(behaviourFunc(npc));
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 672f5411fc3ccb74d8a17a6efdee9df4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +0,0 @@
public class CharacterPooler
{
}

View File

@ -0,0 +1,22 @@
using UnityEngine;
public class Character
{
public Team Team { get; set; }
public float LastTimeHit = 0;
public CharacterCondition Condition;
public Character()
{
Condition = new CharacterCondition();
}
public void ResetCharacter()
{
}
}
public interface ICharacter
{
Character GetCharacter { get; }
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 64552bae354dc614d8012f07511a51e8 guid: 44d6a17ad31b31241928e1a17e9aba37
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -1,39 +1,62 @@
using System; using System;
using UnityEngine; using UnityEngine;
public class CharacterCondition : MonoBehaviour
public class CharacterCondition
{ {
public event Action<object> OnKilledEvent; public event Action<int> OnChangeHealthEvent;
public event Action<int> OnDamageHealthTakenEvent; public event Action<int> OnChangeArmourEvent;
public event Action<int> OnDamageArmourTakenEvent; public event Action<int> OnChangeAmmunitionEvent;
public event Action<int> OnAmmunitionTakenEvent;
[SerializeField] private int HealthPoints; private int health;
[SerializeField] private int ArmourPoints; public int HealthPoints
[SerializeField] private int Ammunition; {
get
public void Start() {
{ return health;
}
private set
{
health = value;
OnChangeHealthEvent?.Invoke(value);
}
} }
private int armour;
public void GetDamage(float damage) public int ArmourPoints
{ {
HealthPoints -= Mathf.RoundToInt(damage * (1 - ArmourPoints * 0.5f)); get
ArmourPoints -= Mathf.RoundToInt(Mathf.Sqrt(damage) * 5); {
return armour;
OnDamageHealthTakenEvent?.Invoke(HealthPoints); }
OnDamageArmourTakenEvent?.Invoke(ArmourPoints); private set
if (HealthPoints < 0) {
OnKilledEvent?.Invoke(gameObject); armour = value;
OnChangeArmourEvent?.Invoke(value);
}
} }
private int ammo;
public int Ammunition
{
get
{
return ammo;
}
private set
{
ammo = value;
OnChangeAmmunitionEvent?.Invoke(value);
}
}
public CharacterCondition()
{
var settings = SettingsReader.Instance.GetSettings;
ammo = settings.maxAmmo;
health = settings.maxHealth;
armour = settings.maxArmour;
}
public void GiveHealth(int health) => HealthPoints = Mathf.Clamp(health + HealthPoints, 0, 100); public void GiveHealth(int health) => HealthPoints = Mathf.Clamp(health + HealthPoints, 0, 100);
public void SetHealth(int health) => HealthPoints = Mathf.Clamp(health, 0, 100);
public void GiveArmour(int armour) => ArmourPoints = Mathf.Clamp(armour + ArmourPoints, 0, 100); public void GiveArmour(int armour) => ArmourPoints = Mathf.Clamp(armour + ArmourPoints, 0, 100);
public void SetArmour(int armour) => ArmourPoints = Mathf.Clamp(armour, 0, 100); public void TakeAmmo(int ammo) => Ammunition += ammo;
public void TakeAmmo(int ammo)
{
Ammunition += ammo;
OnAmmunitionTakenEvent?.Invoke(Ammunition);
}
} }

24
Assets/Scripts/Character/MovementController.cs Executable file → Normal file
View File

@ -7,7 +7,6 @@ using UnityEngine.AI;
public class MovementController : MonoBehaviour public class MovementController : MonoBehaviour
{ {
public NavPoint currentPosition { get; private set; } public NavPoint currentPosition { get; private set; }
[SerializeField] private MapManager mapManager;
[SerializeField] private NavMeshAgent navMeshAgent; [SerializeField] private NavMeshAgent navMeshAgent;
private void Start() private void Start()
@ -15,24 +14,19 @@ public class MovementController : MonoBehaviour
navMeshAgent.speed = SettingsReader.Instance.GetSettings.movementSpeed; navMeshAgent.speed = SettingsReader.Instance.GetSettings.movementSpeed;
} }
public void Move() public void MoveToRandomPoint()
{ {
var pointCandidate = getPointCandidate(); Debug.Log(MapManager.navPoints == null);
goToNextNavPoint(pointCandidate); goToNextNavPoint(MapManager.navPoints[Random.Range(0, MapManager.navPoints.Count)]);
} }
public List<NavPoint> getPointsCandidate()
// todo внутри сенсора передавать в mlagents как variable length observations: https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Learning-Environment-Design-Agents.md#variable-length-observations
private NavPoint getPointCandidate()
{ {
var NavPointsPositions = mapManager.navPoints return MapManager.navPoints
.Select(point => point.transform.position) .Where(point => (currentPosition.position - point.position).magnitude <= SettingsReader.Instance.GetSettings.movementSpeed)
.Where(point => (currentPosition.transform.position - point).magnitude <= SettingsReader.Instance.GetSettings.movementSpeed)
.ToList(); .ToList();
//TODO AI
return null;
} }
private void goToNextNavPoint(NavPoint destination) => public void goToNextNavPoint(NavPoint destination) =>
navMeshAgent.SetDestination(destination.transform.position); navMeshAgent.SetDestination(destination.position);
} }

118
Assets/Scripts/Character/NPC.cs Executable file → Normal file
View File

@ -1,37 +1,117 @@
using System; using System;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using Unity.MLAgents; using Unity.MLAgents;
using Unity.MLAgents.Sensors; using Unity.MLAgents.Sensors;
using Unity.MLAgents.Actuators;
using System.Collections.Generic;
public class NPC : Agent [RequireComponent(typeof(MovementController))]
public class NPC : Agent, ICharacter
{ {
public float LastTimeHit; [HideInInspector]
private BaseBehaviour NPCBehaviour; public Character AgentCharacter;
public List<Action> ActionList; public CharacterCondition Condition;
[SerializeField]
private List<ISensor> SensorList; // todo тут интерфейс должен быть наш
public void SetBehaviour(BaseBehaviour behaviour) => NPCBehaviour = behaviour; public NPC_BaseState NPC_State { get; private set; }
public Team Team { get; set; }
public Character GetCharacter => AgentCharacter;
private NPC_DirectPointState DirectState;
private NPC_InCoverState CoverState;
private NPC_RunningState RunningState;
private MovementController moveController;
private BufferSensorComponent bufferSensor;
private void Awake()
{
DirectState = new NPC_DirectPointState();
CoverState = new NPC_InCoverState();
RunningState = new NPC_RunningState();
NPC_State = DirectState;
AgentCharacter = new Character();
Condition = AgentCharacter.Condition;
}
private void Start() private void Start()
{ {
AgentCharacter = new Character();
Condition = AgentCharacter.Condition;
moveController = gameObject.GetComponent<MovementController>();
bufferSensor = gameObject.GetComponent<BufferSensorComponent>();
GameManager.OnResetScene += AgentCharacter.ResetCharacter;
} }
public override void OnEpisodeBegin()
{
}
public override void CollectObservations(VectorSensor sensor) public override void CollectObservations(VectorSensor sensor)
{ {
// Target and Agent positions sensor.AddObservation(Condition.HealthPoints);
foreach (var _sensor in SensorList) sensor.AddObservation(Condition.ArmourPoints);
sensor.AddObservation(Condition.Ammunition);
sensor.AddObservation((int)NPC_State.State);
var candidates = moveController.getPointsCandidate();
foreach (var point in candidates)
{ {
sensor.AddObservation(1); // todo
// sensor.AddObservation(_sensor.GetValue()); bufferSensor.AppendObservation(new float[] {
//1 position in navpointId
(float)moveController.currentPosition.PointId,
//2 distance to flag
moveController.currentPosition.FlagDistance,
//3 death count in point
moveController.currentPosition.DeathAttr,
//4 flagEnemyDistance
GameManager.IsCloserToFlagFromNextNavPoint(point, transform.position)==true?1:0,
//5 EnemyVsNavPointDistance
GameManager.IsCloserToEnemyThanToNextNavPoint(point,transform.position, AgentCharacter.Team)==true?1:0
});
} }
} }
private void Update() public override void Heuristic(in ActionBuffers actionsOut)
{ {
//NPCBehaviour.DoAction(); var discreteActionsOut = actionsOut.DiscreteActions;
if (Input.GetKeyDown(KeyCode.W))
{
discreteActionsOut[0] = 1;
}
}
public override void OnActionReceived(ActionBuffers actions)
{
if (actions.DiscreteActions[0] == 1)
{
moveController.MoveToRandomPoint();
NPC_State = RunningState;
}
}
public event Action<object> OnKilledEvent;
public void GetDamage(float damage)
{
AgentCharacter.LastTimeHit = TimeManager.Instance.CurrentTime;
Condition.GiveHealth(-Mathf.RoundToInt(damage * (1 - Condition.ArmourPoints * 0.5f)));
Condition.GiveArmour(-Mathf.RoundToInt(Mathf.Sqrt(damage) * 5));
if (Condition.HealthPoints < 0)
{
OnKilledEvent?.Invoke(this);
moveController.currentPosition.DeathAttr += 1;
}
}
private void OnDestroy()
{
Debug.LogWarning("Pooled object was destroyed");
} }
} }

View File

@ -0,0 +1,46 @@
public enum NPC_EnumState
{
InCover,
InDirectPoint,
InRunning,
}
public interface NPC_BaseState
{
NPC_EnumState State { get; }
bool InCover { get; }
bool IsRunning { get; }
bool InDirectPoint { get; }
float HitChance { get; }
float DoDamageChance { get; }
}
public class NPC_DirectPointState : NPC_BaseState
{
public bool InCover => false;
public bool IsRunning => false;
public bool InDirectPoint => false;
public float HitChance => SettingsReader.Instance.GetSettings.GetHitChanceInDirectPoint;
public float DoDamageChance => SettingsReader.Instance.GetSettings.DoDamageChanceInDirectPoint;
public NPC_EnumState State => NPC_EnumState.InDirectPoint;
}
public class NPC_RunningState : NPC_BaseState
{
public bool InCover => false;
public bool IsRunning => true;
public bool InDirectPoint => false;
public float HitChance => SettingsReader.Instance.GetSettings.GetHitChanceInRunning;
public float DoDamageChance => SettingsReader.Instance.GetSettings.DoDamageChanceInRunning;
public NPC_EnumState State => NPC_EnumState.InRunning;
}
public class NPC_InCoverState : NPC_BaseState
{
public bool InCover => true;
public bool IsRunning => false;
public bool InDirectPoint => false;
public float HitChance => SettingsReader.Instance.GetSettings.GetHitChanceInCover;
public float DoDamageChance => SettingsReader.Instance.GetSettings.DoDamageChanceInCover;
public NPC_EnumState State => NPC_EnumState.InCover;
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 138d13d4fe8a06444acb1da6bfc55aa7 guid: a192e433e26797745ad0b46de2586de3
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -0,0 +1,34 @@
using System;
using UnityEngine;
public class Player : MonoBehaviour, ICharacter
{
[HideInInspector]
public Character PlayerCharacter;
public CharacterCondition Condition;
public Character GetCharacter => PlayerCharacter;
private void Start()
{
PlayerCharacter = new Character();
Condition = PlayerCharacter.Condition;
GameManager.OnResetScene += PlayerCharacter.ResetCharacter;
}
public event Action<object> OnKilledEvent;
public void GetDamage(float damage)
{
PlayerCharacter.LastTimeHit = TimeManager.Instance.CurrentTime;
Condition.GiveHealth(-Mathf.RoundToInt(damage * (1 - Condition.ArmourPoints * 0.5f)));
Condition.GiveArmour(-Mathf.RoundToInt(Mathf.Sqrt(damage) * 5));
if (Condition.HealthPoints < 0)
OnKilledEvent?.Invoke(this);
}
private void OnDestroy()
{
Debug.LogWarning("Pooled object was destroyed");
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 60bdb2d866ca9324cbe3639e7c47ae23 guid: a8c9a8e604d395c4ab9d03d28adc4982
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -1,14 +1,14 @@
using System.Collections; using Unity.MLAgents;
using System.Collections.Generic;
using UnityEditorInternal;
using UnityEngine; using UnityEngine;
public class GameManager : MonoBehaviour public class GameManager : MonoBehaviour
{ {
private static GameManager instance; private static GameManager instance;
public static GameManager Instance { get { return instance; } } public static GameManager Instance { get { return instance; } }
private static SimpleMultiAgentGroup DefendersTeam = new SimpleMultiAgentGroup();
private static SimpleMultiAgentGroup AttackersTeam = new SimpleMultiAgentGroup();
private void Awake() private void Awake()
{ {
if (Instance == null) if (Instance == null)
@ -21,13 +21,36 @@ public class GameManager : MonoBehaviour
{ {
GlobalEventManager.onCaptureFlag += flagCaptured; GlobalEventManager.onCaptureFlag += flagCaptured;
GlobalEventManager.onTimeLeft += timeOut; GlobalEventManager.onTimeLeft += timeOut;
var agents = GameObject.FindObjectsOfType<Agent>();
foreach (var item in agents)
{
var agent = item as NPC;
if (agent.GetCharacter.Team == Team.Attackers)
AttackersTeam.RegisterAgent(agent);
else
DefendersTeam.RegisterAgent(agent);
}
} }
private void Update() public static bool IsCloserToEnemyThanToNextNavPoint(NavPoint navPoint, Vector3 currentTransform, Team team)
{ {
SimpleMultiAgentGroup agentGroup;
if (team == Team.Attackers)
agentGroup = AttackersTeam;
else
agentGroup = DefendersTeam;
var distToNavPoint = (currentTransform - navPoint.position).magnitude;
foreach (var agent in agentGroup.GetRegisteredAgents())
if (distToNavPoint > (currentTransform - agent.transform.position).magnitude)
return true;
return false;
} }
public static bool IsCloserToFlagFromNextNavPoint(NavPoint navPoint, Vector3 currentTransform)
=> navPoint.FlagDistance < (currentTransform - GameObject.FindGameObjectWithTag("Flag").transform.position).magnitude;
private void flagCaptured(Team team) private void flagCaptured(Team team)
{ {
switch(team) switch(team)

View File

@ -3,11 +3,17 @@ using UnityEngine;
public class MapManager : MonoBehaviour public class MapManager : MonoBehaviour
{ {
public List<NavPoint> navPoints { get; private set; } public static List<NavPoint> navPoints { get; private set; }
private void Start() private void Start()
{ {
var i = 0;
navPoints = new List<NavPoint>();
var navPointsGameObj = GameObject.FindGameObjectsWithTag("Point"); var navPointsGameObj = GameObject.FindGameObjectsWithTag("Point");
foreach (var gameobj in navPointsGameObj) foreach (var gameobj in navPointsGameObj)
navPoints.Add(gameobj.GetComponent<NavPoint>()); {
var navpoint = gameobj.GetComponent<NavPoint>();
navpoint.PointId = i; i++;
navPoints.Add(navpoint);
}
} }
} }

View File

@ -4,8 +4,10 @@ using UnityEngine;
public class TimeManager : MonoBehaviour public class TimeManager : MonoBehaviour
{ {
public static TimeManager instance = null; private static TimeManager instance;
public float CurrentTime; public static TimeManager Instance { get { return instance; } }
public float CurrentTime { get; private set; }
void Start() void Start()
{ {
if (instance == null) if (instance == null)

View File

@ -17,7 +17,6 @@ public class FlagZone : MonoBehaviour
{ {
timeForWin = SettingsReader.Instance.GetSettings.timeToWin; timeForWin = SettingsReader.Instance.GetSettings.timeToWin;
Debug.Log("32");
TimeStayAttackers = 0; TimeStayAttackers = 0;
TimeStayDefenders = 0; TimeStayDefenders = 0;
occupAttackers = 0; occupAttackers = 0;

View File

@ -6,22 +6,15 @@ public class NavPoint : MonoBehaviour
{ {
public Vector3 position => gameObject.transform.position; public Vector3 position => gameObject.transform.position;
public float FlagDistance { get; private set; } public float FlagDistance { get; private set; }
[System.NonSerialized] public float DeathAttr;
[System.NonSerialized] public List<Vector3> EnemiesSeen; [HideInInspector]
public int? PointId;
public float DeathAttr = 0;
public List<Vector3> EnemiesSeen = new List<Vector3>();
//Here other attributes; //Here other attributes;
[SerializeField]
public int PointId;
private void Awake()
{
//DO NOT DELETE
}
private void Start() private void Start()
{ {
FlagDistance = (GameObject.FindGameObjectWithTag("Flag").transform.position - position).magnitude; FlagDistance = (GameObject.FindGameObjectWithTag("Flag").transform.position - position).magnitude;
EnemiesSeen = new List<Vector3>();
DeathAttr = 0;
} }
} }

View File

@ -3,6 +3,8 @@
[CreateAssetMenu(fileName ="Game Settings", menuName = "Game/Settings", order = 51)] [CreateAssetMenu(fileName ="Game Settings", menuName = "Game/Settings", order = 51)]
public class Settings : ScriptableObject public class Settings : ScriptableObject
{ {
public bool isTesting;
public float timeToWin; public float timeToWin;
public float timeOut; public float timeOut;
@ -21,4 +23,15 @@ public class Settings : ScriptableObject
public int armourPickupAmount; public int armourPickupAmount;
public int ammunitionPickupAmount; public int ammunitionPickupAmount;
public int pickupsAmount; public int pickupsAmount;
public int maxHealth;
public int maxArmour;
public int maxAmmo;
public float GetHitChanceInDirectPoint;
public float GetHitChanceInRunning;
public float GetHitChanceInCover;
public float DoDamageChanceInDirectPoint;
public float DoDamageChanceInRunning;
public float DoDamageChanceInCover;
} }

View File

@ -9,7 +9,6 @@ public class SettingsReader : MonoBehaviour
private void Awake() private void Awake()
{ {
Debug.Log("init");
instance = this; instance = this;
} }

View File

@ -16,6 +16,14 @@ public class PickUpSpawner : MonoBehaviour
[SerializeField] private List<NavPoint> spawnPoints; [SerializeField] private List<NavPoint> spawnPoints;
private void Awake()
{
if (instance == null)
instance = this;
else
Destroy(gameObject);
}
private void Start() private void Start()
{ {
pickups = new List<GameObject>(); pickups = new List<GameObject>();

View File

@ -1,5 +0,0 @@
public interface ISensor<T>
{
T GetValue();
SensorType GetSensorType();
}

View File

@ -0,0 +1,4 @@
using System.Collections.Generic;
using Unity.MLAgents.Sensors;

View File

View File

@ -739,8 +739,4 @@ public abstract class DictionaryDrawer<TK, TV> : PropertyDrawer
UnityEngine.Debug.Log(e.Message); UnityEngine.Debug.Log(e.Message);
} }
} }
} }
[Serializable] public class DictionaryOfTeamsAndNavPoints : SerializableDictionary<Team, NavPoint> { }
[CustomPropertyDrawer(typeof(DictionaryOfTeamsAndNavPoints))]
public class DictionaryOfTeamsAndNavPointsDrawer : DictionaryDrawer<Team, NavPoint> { }

View File

@ -12,17 +12,27 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: e2c47233b9062c84482336b145c6891b, type: 3} m_Script: {fileID: 11500000, guid: e2c47233b9062c84482336b145c6891b, type: 3}
m_Name: Game Settings m_Name: Game Settings
m_EditorClassIdentifier: m_EditorClassIdentifier:
isTesting: 1
timeToWin: 5 timeToWin: 5
timeOut: 1600 timeOut: 1600
movementDistance: 50 movementDistance: 50
movementSpeed: 3 movementSpeed: 3
defTeamAI: 0 defTeamAI: 0
atcTeamAI: 0 atcTeamAI: 0
numOfDefenders: 0 numOfDefenders: 1
numOfAttackers: 0 numOfAttackers: 1
hasHumanDefender: 0 hasHumanDefender: 1
hasHumanAttacker: 0 hasHumanAttacker: 0
healthPickupAmount: 50 healthPickupAmount: 50
armourPickupAmount: 50 armourPickupAmount: 50
ammunitionPickupAmount: 120 ammunitionPickupAmount: 120
pickupsAmount: 2 pickupsAmount: 2
maxHealth: 0
maxArmour: 0
maxAmmo: 0
GetHitChanceInDirectPoint: 0
GetHitChanceInRunning: 0
GetHitChanceInCover: 0
DoDamageChanceInDirectPoint: 0
DoDamageChanceInRunning: 0
DoDamageChanceInCover: 0

0
Docs/api.md Normal file
View File

View File

@ -10,6 +10,7 @@
"com.unity.test-framework": "1.1.30", "com.unity.test-framework": "1.1.30",
"com.unity.textmeshpro": "2.1.6", "com.unity.textmeshpro": "2.1.6",
"com.unity.timeline": "1.2.18", "com.unity.timeline": "1.2.18",
"com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.0",
"com.unity.ugui": "1.0.0", "com.unity.ugui": "1.0.0",
"com.unity.modules.ai": "1.0.0", "com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0", "com.unity.modules.androidjni": "1.0.0",

View File

@ -102,6 +102,22 @@
"dependencies": {}, "dependencies": {},
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.sysroot": {
"version": "2.0.0",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.sysroot.linux-x86_64": {
"version": "2.0.0",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.sysroot": "2.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.test-framework": { "com.unity.test-framework": {
"version": "1.1.30", "version": "1.1.30",
"depth": 0, "depth": 0,
@ -134,6 +150,16 @@
}, },
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.toolchain.win-x86_64-linux-x86_64": {
"version": "2.0.0",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.sysroot": "2.0.0",
"com.unity.sysroot.linux-x86_64": "2.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.ugui": { "com.unity.ugui": {
"version": "1.0.0", "version": "1.0.0",
"depth": 0, "depth": 0,

View File

@ -0,0 +1,17 @@
{
"MonoBehaviour": {
"Version": 4,
"EnableBurstCompilation": true,
"EnableOptimisations": true,
"EnableSafetyChecks": false,
"EnableDebugInAllBuilds": false,
"UsePlatformSDKLinker": false,
"CpuMinTargetX32": 0,
"CpuMaxTargetX32": 0,
"CpuMinTargetX64": 0,
"CpuMaxTargetX64": 0,
"CpuTargetsX32": 6,
"CpuTargetsX64": 72,
"OptimizeFor": 0
}
}

View File

@ -0,0 +1,6 @@
{
"MonoBehaviour": {
"Version": 4,
"DisabledWarnings": ""
}
}

View File

@ -76,7 +76,7 @@ NavMeshProjectSettings:
agentRadius: 0.5 agentRadius: 0.5
agentHeight: 2 agentHeight: 2
agentSlope: 45 agentSlope: 45
agentClimb: 0.75 agentClimb: 0.1
ledgeDropHeight: 0 ledgeDropHeight: 0
maxJumpAcrossDistance: 0 maxJumpAcrossDistance: 0
minRegionArea: 2 minRegionArea: 2

View File

@ -73,6 +73,16 @@
"key": "editor.closeWindowAfterShapeCreation", "key": "editor.closeWindowAfterShapeCreation",
"value": "{\"m_Value\":false}" "value": "{\"m_Value\":false}"
}, },
{
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"key": "editor.showEditorNotifications",
"value": "{\"m_Value\":false}"
},
{
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"key": "editor.stripProBuilderScriptsOnBuild",
"value": "{\"m_Value\":true}"
},
{ {
"type": "UnityEngine.ProBuilder.SelectionModifierBehavior, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "type": "UnityEngine.ProBuilder.SelectionModifierBehavior, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"key": "editor.rectSelectModifier", "key": "editor.rectSelectModifier",
@ -117,6 +127,11 @@
"type": "UnityEngine.ProBuilder.UnwrapParameters, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "type": "UnityEngine.ProBuilder.UnwrapParameters, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"key": "lightmapping.defaultLightmapUnwrapParameters", "key": "lightmapping.defaultLightmapUnwrapParameters",
"value": "{\"m_Value\":{\"m_HardAngle\":88.0,\"m_PackMargin\":20.0,\"m_AngleError\":8.0,\"m_AreaError\":15.0}}" "value": "{\"m_Value\":{\"m_HardAngle\":88.0,\"m_PackMargin\":20.0,\"m_AngleError\":8.0,\"m_AreaError\":15.0}}"
},
{
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"key": "uv.uvEditorGridSnapIncrement",
"value": "{\"m_Value\":0.125}"
} }
] ]
} }

View File

@ -631,7 +631,8 @@ PlayerSettings:
gcIncremental: 0 gcIncremental: 0
assemblyVersionValidation: 1 assemblyVersionValidation: 1
gcWBarrierValidation: 0 gcWBarrierValidation: 0
apiCompatibilityLevelPerPlatform: {} apiCompatibilityLevelPerPlatform:
Standalone: 3
m_RenderingPath: 1 m_RenderingPath: 1
m_MobileRenderingPath: 1 m_MobileRenderingPath: 1
metroPackageName: Template_3D metroPackageName: Template_3D

View File

@ -1,2 +1,2 @@
m_EditorVersion: 2019.4.35f1 m_EditorVersion: 2019.4.36f1
m_EditorVersionWithRevision: 2019.4.35f1 (0462406dff2e) m_EditorVersionWithRevision: 2019.4.36f1 (660c164b2fc5)