Compare commits
No commits in common. "main" and "oleg" have entirely different histories.
266
.idea/.idea.Race_fields/.idea/workspace.xml
generated
266
.idea/.idea.Race_fields/.idea/workspace.xml
generated
@ -1,266 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="BackgroundAgentGlobalSettings">
|
||||
<option name="selectedModelId" value="auto" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="08e3a700-2b23-4d3a-a6cd-45bec0bfa361" name="Изменения" comment="add : Add vehicle selection flow and harvester enemy AI">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.Race_fields/.idea/shelf/_____17_07_2026__12_36___.xml" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Prefabs/Harvesters/HarvesterEnemy.prefab" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Prefabs/Harvesters/HarvesterEnemy.prefab" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy.prefab" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy.prefab" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy_1.prefab" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy_1.prefab" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy_Player.prefab" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy_Player.prefab" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Scenes/Demo Scene.unity" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Scenes/Demo Scene.unity" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Scripts/Editor/BuggyPrefabBuilder.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Scripts/Editor/BuggyPrefabBuilder.cs" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Scripts/GameFlow/SelectedVehicleSpawner.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Scripts/GameFlow/SelectedVehicleSpawner.cs" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Scripts/Vehicles/Controller/ArcadeBuggyController.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/_Project/Scripts/Vehicles/Controller/ArcadeBuggyController.cs" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Scripts/Vehicles/Wheels/BuggyWheelSetup.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Assets/_Project/Scripts/Vehicles/Wheels/BuggyWheelSetup.cs.meta" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Packages/manifest.json" beforeDir="false" afterPath="$PROJECT_DIR$/Packages/manifest.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Packages/packages-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/Packages/packages-lock.json" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="CopilotPersistence">
|
||||
<persistenceIdMap>
|
||||
<entry key="_C:/development/resource/unity_projects/Race_fields" value="3Gd5QUXON5f4HtIkRnTsMfnv21w" />
|
||||
</persistenceIdMap>
|
||||
</component>
|
||||
<component name="EmbeddingIndexingInfo">
|
||||
<option name="cachedIndexableFilesCount" value="4" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="HighlightingSettingsPerFile">
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Art/Models/Harvesters.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Art/VFX/Effects/Trails.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Audio/SFX/Vehicles/11a70f994753862.mp3.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Audio/SFX/Vehicles/braking-tire-screeching.mp3.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Audio/SFX/Vehicles/cbb115cd9d4f69a.mp3.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Prefabs/Harvesters/HarvesterEnemy.prefab" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Prefabs/Harvesters/HarvesterEnemy.prefab.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy.prefab" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy_1.prefab" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy_1.prefab.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Prefabs/Vehicles/Player/Buggy_Player.prefab" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scenes/Demo Scene.unity" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scenes/Harvesters.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scenes/Selection Scene.unity" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scenes/Selection Scene.unity.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Screenshots.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scripts/GameFlow/GameSelectionState.cs.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scripts/GameFlow/SelectedVehicleSpawner.cs.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scripts/GameFlow/SelectionMenuController.cs.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scripts/Harvesters/AI/HarvesterChaseController.cs.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scripts/Harvesters/Visuals/HarvesterBladeSpinner.cs.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Project/Scripts/Weapons/Core/VehicleWeaponInventory.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Assets/_Recovery/0 (3).unity.meta" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Library/PackageCache/com.unity.inputsystem@21a28c3a6c83/InputSystem/Plugins/XR/TrackedPoseDriver.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Library/PackageCache/com.unity.render-pipelines.universal@be00b5bbd9a1/Runtime/UniversalRenderPipeline.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
</component>
|
||||
<component name="McpProjectServerCommands">
|
||||
<commands />
|
||||
<urls />
|
||||
</component>
|
||||
<component name="MetaFilesCheckinStateConfiguration" checkMetaFiles="false" />
|
||||
<component name="ProjectColorInfo">{
|
||||
"customColor": "",
|
||||
"associatedIndex": 4
|
||||
}</component>
|
||||
<component name="ProjectId" id="3Gd5QUXON5f4HtIkRnTsMfnv21w" />
|
||||
<component name="ProjectSessionTemplates">
|
||||
<option name="panelTemplate">
|
||||
<template>
|
||||
<option name="modeId" value="file:///c%3A/snapshot/copilot-language-server-internal/dist/assets/agents/Plan.agent.md" />
|
||||
<option name="model">
|
||||
<model>
|
||||
<option name="modelType" value="builtin_id" />
|
||||
<option name="modelValue" value="auto" />
|
||||
</model>
|
||||
</option>
|
||||
<option name="targetType" value="LOCAL" />
|
||||
</template>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"RunOnceActivity.MCP Project settings loaded": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"RunOnceActivity.typescript.service.memoryLimit.init": "true",
|
||||
"copilot.chat.legacySessionMetadata.migrated": "true",
|
||||
"git-widget-placeholder": "main",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"settings.editor.selected.configurable": "ml.llm.LLMThirdPartyAiProvidersConfigurable",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RunManager" selected="Подключиться к редактору Unity.Подключиться к редактору Unity">
|
||||
<configuration name="Модульные тесты (пакетный режим)" type="RunUnityExe" factoryName="Unity Executable">
|
||||
<option name="EXE_PATH" value="C:\Program Files\Unity\Hub\Editor\6000.5.1f1\Editor\Unity.exe" />
|
||||
<option name="PROGRAM_PARAMETERS" value="-runTests -batchmode -projectPath C:\development\resource\unity_projects\Race_fields -testResults Logs/results.xml -logFile Logs/Editor.log -testPlatform EditMode -debugCodeOptimization" />
|
||||
<option name="WORKING_DIRECTORY" value="C:\development\resource\unity_projects\Race_fields" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="ENV_FILE_PATHS" value="" />
|
||||
<option name="REDIRECT_INPUT_PATH" value="" />
|
||||
<option name="MIXED_MODE_DEBUG" value="0" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Запустить Unity" type="RunUnityExe" factoryName="Unity Executable">
|
||||
<option name="EXE_PATH" value="C:\Program Files\Unity\Hub\Editor\6000.5.1f1\Editor\Unity.exe" />
|
||||
<option name="PROGRAM_PARAMETERS" value="-projectPath C:\development\resource\unity_projects\Race_fields -debugCodeOptimization" />
|
||||
<option name="WORKING_DIRECTORY" value="C:\development\resource\unity_projects\Race_fields" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="ENV_FILE_PATHS" value="" />
|
||||
<option name="REDIRECT_INPUT_PATH" value="" />
|
||||
<option name="MIXED_MODE_DEBUG" value="0" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Подключиться к редактору Unity" type="UNITY_DEBUG_RUN_CONFIGURATION" factoryName="Unity Debug" show_console_on_std_err="false" show_console_on_std_out="false" port="50000" address="localhost" useMixedMode="false">
|
||||
<option name="allowRunningInParallel" value="false" />
|
||||
<option name="listenPortForConnections" value="false" />
|
||||
<option name="pid" />
|
||||
<option name="projectPathOnTarget" />
|
||||
<option name="runtimes">
|
||||
<list />
|
||||
</option>
|
||||
<option name="selectedOptions">
|
||||
<list />
|
||||
</option>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="Attach to" type="UnityDevicePlayer" factoryName="UnityAttachToDevicePlayer">
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task id="LOCAL-00001" summary="add: README.md">
|
||||
<option name="closed" value="true" />
|
||||
<created>1784280596021</created>
|
||||
<option name="number" value="00001" />
|
||||
<option name="presentableId" value="LOCAL-00001" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1784280596021</updated>
|
||||
</task>
|
||||
<task active="true" id="Default" summary="Задача по умолчанию">
|
||||
<changelist id="08e3a700-2b23-4d3a-a6cd-45bec0bfa361" name="Изменения" comment="add: README.md" />
|
||||
<created>1784288591435</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1784288591435</updated>
|
||||
<workItem from="1784288596356" duration="25132000" />
|
||||
<workItem from="1784555385306" duration="519000" />
|
||||
<workItem from="1784696802414" duration="8245000" />
|
||||
<workItem from="1784711743710" duration="34585000" />
|
||||
<workItem from="1784891813884" duration="848000" />
|
||||
<workItem from="1784896188926" duration="7409000" />
|
||||
<workItem from="1785928737366" duration="400000" />
|
||||
<workItem from="1785998210045" duration="19283000" />
|
||||
</task>
|
||||
<task id="LOCAL-00002" summary="update : rewrite car controller, add terrain">
|
||||
<option name="closed" value="true" />
|
||||
<created>1784528529649</created>
|
||||
<option name="number" value="00002" />
|
||||
<option name="presentableId" value="LOCAL-00002" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1784528529649</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00003" summary="add : particle system">
|
||||
<option name="closed" value="true" />
|
||||
<created>1784530020605</created>
|
||||
<option name="number" value="00003" />
|
||||
<option name="presentableId" value="LOCAL-00003" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1784530020605</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00004" summary="add : .gitignore">
|
||||
<option name="closed" value="true" />
|
||||
<created>1784534243727</created>
|
||||
<option name="number" value="00004" />
|
||||
<option name="presentableId" value="LOCAL-00004" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1784534243727</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00005" summary="add : Selectio scene">
|
||||
<option name="closed" value="true" />
|
||||
<created>1784701858222</created>
|
||||
<option name="number" value="00005" />
|
||||
<option name="presentableId" value="LOCAL-00005" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1784701858222</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00006" summary="add : Add vehicle selection flow and harvester enemy AI">
|
||||
<option name="closed" value="true" />
|
||||
<created>1784794230299</created>
|
||||
<option name="number" value="00006" />
|
||||
<option name="presentableId" value="LOCAL-00006" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1784794230299</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="7" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityCheckinConfiguration" checkUnsavedScenes="false" />
|
||||
<component name="UnityProjectConfiguration" hasMinimizedUI="true" />
|
||||
<component name="UnityProjectDiscoverer">
|
||||
<option name="hasUnityReference" value="true" />
|
||||
<option name="unityProject" value="true" />
|
||||
<option name="unityProjectFolder" value="true" />
|
||||
</component>
|
||||
<component name="UnityUnitTestConfiguration" currentTestLauncher="Both" />
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State>
|
||||
<option name="FILTERS">
|
||||
<map>
|
||||
<entry key="branch">
|
||||
<value>
|
||||
<list>
|
||||
<option value="main" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</State>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="Merge cviat into main and resolve Unity conflicts" />
|
||||
<MESSAGE value="add: README.md" />
|
||||
<MESSAGE value="update : rewrite car controller, add terrain" />
|
||||
<MESSAGE value="add : particle system" />
|
||||
<MESSAGE value="add : .gitignore" />
|
||||
<MESSAGE value="add : Selectio scene" />
|
||||
<MESSAGE value="add : Add vehicle selection flow and harvester enemy AI" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="add : Add vehicle selection flow and harvester enemy AI" />
|
||||
</component>
|
||||
<component name="XSLT-Support.FileAssociations.UIState">
|
||||
<expand />
|
||||
<select />
|
||||
</component>
|
||||
</project>
|
||||
@ -1,137 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-4075328406638620692
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BulletProjectile
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BaseMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 1
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.5
|
||||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.005
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _Smoothness: 0.5
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _WorkflowMode: 1
|
||||
- _XRMotionVectorsPass: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0.009433985, g: 0.007559973, b: 0.0007564989, a: 1}
|
||||
- _Color: {r: 0.009433985, g: 0.007559973, b: 0.0007564989, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e4f0cefa7e5ef2640b0cf25b80ee3520
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -9,7 +9,7 @@ Material:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Buggy Variant 1
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_Parent: {fileID: 3609018082110429662, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
|
||||
@ -9,7 +9,7 @@ Material:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Buggy_MetDark
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_Parent: {fileID: 3609018082110429662, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
|
||||
@ -9,7 +9,7 @@ Material:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Buggy_Metall
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_Parent: {fileID: 3609018082110429662, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
m_ModifiedSerializedProperties: 8
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
@ -24,102 +24,14 @@ Material:
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BaseMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_TexEnvs: []
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 1
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
- _Cull: 0
|
||||
- _Cutoff: 0.5
|
||||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 1
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.005
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _Smoothness: 0.892
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _WorkflowMode: 1
|
||||
- _XRMotionVectorsPass: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
- _Color: {r: 0.49524605, g: 0.49524605, b: 0.49524605, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!114 &2562075926935352605
|
||||
|
||||
@ -22,7 +22,7 @@ Material:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Buggy_Metall_Br_Rough
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_Parent: {fileID: -6478536213147159724, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 714fbae1b854ba649ad4a2e78ba5eca7
|
||||
guid: 2a4579adec0226449b62f9ce4a0edd1b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
Binary file not shown.
@ -1,114 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e10ef6ed1df1f9445b52c82622b4ad31
|
||||
ModelImporter:
|
||||
serializedVersion: 24501
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
searchTexturesGlobally: 0
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
importUVs: -1
|
||||
importVertexColors: 1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
calculateBlendshapeNormalsDeltaFromImportedNormals: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,524 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4df6771917b23c4f9be6ea9e36c1bd9
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 11500000, guid: b2a9591990af98743ba3ff7cf1000886, type: 3}
|
||||
textureImporterSettings:
|
||||
alphaSource: 1
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
convertToNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
swizzle: 50462976
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
nPOTScale: 1
|
||||
sRGBTexture: 1
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 0
|
||||
flipbookColumns: 0
|
||||
ignorePngGamma: 0
|
||||
cookieMode: 0
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
normalMap: 0
|
||||
textureFormat: 0
|
||||
maxTextureSize: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 0
|
||||
linearTexture: 0
|
||||
grayScaleToAlpha: 0
|
||||
rGBM: 0
|
||||
cubemapConvolutionSteps: 0
|
||||
cubemapConvolutionExponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
singleSpriteImportData:
|
||||
- name:
|
||||
originalName:
|
||||
pivot: {x: 0, y: 0}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 0
|
||||
height: 0
|
||||
spriteID: c167efbf8e46f0042b5dee4c94cc9cc1
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 0, y: 0}
|
||||
spritePosition: {x: 0, y: 0}
|
||||
multiSpriteImportData: []
|
||||
layeredSpriteImportData:
|
||||
- name: Wheel_FR
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1266
|
||||
y: 605
|
||||
width: 209
|
||||
height: 256
|
||||
spriteID: 49b4e606fa4744040b03727e67a07a28
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1266, y: 605}
|
||||
spritePosition: {x: 803, y: 826}
|
||||
- name: Wheel_RL
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1266
|
||||
y: 340
|
||||
width: 211
|
||||
height: 257
|
||||
spriteID: 02d5672b6e59d0d45b8b2479a3ab0bda
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1266, y: 340}
|
||||
spritePosition: {x: 242, y: 825}
|
||||
- name: Wheel_RR
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1266
|
||||
y: 869
|
||||
width: 202
|
||||
height: 260
|
||||
spriteID: 1ea701bd01d75f84982e26d49e8a49cf
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1266, y: 869}
|
||||
spritePosition: {x: 810, y: 225}
|
||||
- name: Wheel_RL
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1491
|
||||
y: 4
|
||||
width: 201
|
||||
height: 261
|
||||
spriteID: 92d779dabe4abc1449070e159e16f374
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1491, y: 4}
|
||||
spritePosition: {x: 242, y: 225}
|
||||
- name: FuelTank_R
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1700
|
||||
y: 4
|
||||
width: 104
|
||||
height: 225
|
||||
spriteID: d73ec417b1fbb7740a07656cad779ef2
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1700, y: 4}
|
||||
spritePosition: {x: 827, y: 503}
|
||||
- name: FuelTank_L
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1812
|
||||
y: 4
|
||||
width: 102
|
||||
height: 225
|
||||
spriteID: a93cb5906f19e4f4984ab1cc6f8605d4
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1812, y: 4}
|
||||
spritePosition: {x: 323, y: 503}
|
||||
- name: Bumper
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1491
|
||||
y: 273
|
||||
width: 390
|
||||
height: 120
|
||||
spriteID: 7e67b0d3c5dfa1e4bb0078317e63ad12
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1491, y: 273}
|
||||
spritePosition: {x: 432, y: 1086}
|
||||
- name: Cooler
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1922
|
||||
y: 4
|
||||
width: 109
|
||||
height: 200
|
||||
spriteID: f64d6eb9a2d7bc8499da8df9432b7f3b
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1922, y: 4}
|
||||
spritePosition: {x: 572, y: 868}
|
||||
- name: Layer 3
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1491
|
||||
y: 401
|
||||
width: 13
|
||||
height: 277
|
||||
spriteID: 6ccfde867c43bbf46a18f423979bd489
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1491, y: 401}
|
||||
spritePosition: {x: 660, y: 833}
|
||||
- name: Engine
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1266
|
||||
y: 4
|
||||
width: 217
|
||||
height: 328
|
||||
spriteID: 14369f1f908ddd44c954eee16a044c41
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 1266, y: 4}
|
||||
spritePosition: {x: 518, y: 792}
|
||||
- name: Body
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 4
|
||||
y: 1266
|
||||
width: 993
|
||||
height: 1190
|
||||
spriteID: 900c3908f26b44046841cb05283ab51c
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 4, y: 1266}
|
||||
spritePosition: {x: 0, y: 64}
|
||||
- name: Layer 2
|
||||
originalName:
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
alignment: 0
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 4
|
||||
y: 4
|
||||
width: 1254
|
||||
height: 1254
|
||||
spriteID: 100b593d2b80c2e459502c020f443c60
|
||||
spriteBone: []
|
||||
spriteOutline: []
|
||||
vertices: []
|
||||
spritePhysicsOutline: []
|
||||
indices:
|
||||
edges: []
|
||||
tessellationDetail: 0
|
||||
uvTransform: {x: 4, y: 4}
|
||||
spritePosition: {x: 0, y: 0}
|
||||
spriteImportData: []
|
||||
rigSpriteImportData: []
|
||||
sharedRigSpriteImportData: []
|
||||
mosaicSpriteImportData: []
|
||||
platformSettings: []
|
||||
mosaicLayers: 1
|
||||
characterMode: 1
|
||||
documentPivot: {x: 0, y: 0}
|
||||
documentAlignment: 7
|
||||
importHiddenLayers: 0
|
||||
layerMappingOption: 2
|
||||
generatePhysicsShape: 0
|
||||
paperDollMode: 0
|
||||
keepDupilcateSpriteName: 1
|
||||
generateTileAssets: 0
|
||||
tilePaletteCellLayout: 0
|
||||
tilePaletteHexagonLayout: 0
|
||||
tilePaletteCellSize: {x: 1, y: 1, z: 0}
|
||||
tilePaletteCellSizing: 0
|
||||
transparencySortMode: 0
|
||||
transparencySortAxis: {x: 0, y: 0, z: 1}
|
||||
tileTemplate: {instanceID: 0}
|
||||
padding: 4
|
||||
spriteSizeExpand: 0
|
||||
skeletonAssetReferenceID:
|
||||
pipeline: {instanceID: 0}
|
||||
pipelineVersion:
|
||||
spritePackingTag:
|
||||
resliceFromLayer: 0
|
||||
pSDLayerImportSetting: []
|
||||
psdLayers:
|
||||
- name: Wheel_FR
|
||||
spriteName: Wheel_FR
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 49b4e606fa4744040b03727e67a07a28
|
||||
layerID: 7
|
||||
mosaicPosition: {x: 1266, y: 605}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Wheel_RL
|
||||
spriteName: Wheel_RL
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 02d5672b6e59d0d45b8b2479a3ab0bda
|
||||
layerID: 9
|
||||
mosaicPosition: {x: 1266, y: 340}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Wheel_RR
|
||||
spriteName: Wheel_RR
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 1ea701bd01d75f84982e26d49e8a49cf
|
||||
layerID: 12
|
||||
mosaicPosition: {x: 1266, y: 869}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Wheel_RL
|
||||
spriteName: Wheel_RL
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 92d779dabe4abc1449070e159e16f374
|
||||
layerID: 14
|
||||
mosaicPosition: {x: 1491, y: 4}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: FuelTank_R
|
||||
spriteName: FuelTank_R
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: d73ec417b1fbb7740a07656cad779ef2
|
||||
layerID: 16
|
||||
mosaicPosition: {x: 1700, y: 4}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: FuelTank_L
|
||||
spriteName: FuelTank_L
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: a93cb5906f19e4f4984ab1cc6f8605d4
|
||||
layerID: 18
|
||||
mosaicPosition: {x: 1812, y: 4}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Bumper
|
||||
spriteName: Bumper
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 7e67b0d3c5dfa1e4bb0078317e63ad12
|
||||
layerID: 20
|
||||
mosaicPosition: {x: 1491, y: 273}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Cooler
|
||||
spriteName: Cooler
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: f64d6eb9a2d7bc8499da8df9432b7f3b
|
||||
layerID: 24
|
||||
mosaicPosition: {x: 1922, y: 4}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Layer 3
|
||||
spriteName: Layer 3
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 6ccfde867c43bbf46a18f423979bd489
|
||||
layerID: 28
|
||||
mosaicPosition: {x: 1491, y: 401}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Engine
|
||||
spriteName: Engine
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 14369f1f908ddd44c954eee16a044c41
|
||||
layerID: 22
|
||||
mosaicPosition: {x: 1266, y: 4}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Body
|
||||
spriteName: Body
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 900c3908f26b44046841cb05283ab51c
|
||||
layerID: 10
|
||||
mosaicPosition: {x: 4, y: 1266}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
- name: Layer 2
|
||||
spriteName: Layer 2
|
||||
isGroup: 0
|
||||
parentIndex: -1
|
||||
spriteID: 100b593d2b80c2e459502c020f443c60
|
||||
layerID: 5
|
||||
mosaicPosition: {x: 4, y: 4}
|
||||
flatten: 0
|
||||
isImported: 1
|
||||
isVisible: 1
|
||||
mosaicPSDLayers: []
|
||||
rigPSDLayers: []
|
||||
sharedRigPSDLayers: []
|
||||
importFileNodeState: 1
|
||||
platformSettingsDirtyTick: 0
|
||||
spriteSizeExpandChanged: 0
|
||||
generateGOHierarchy: 0
|
||||
textureAssetName:
|
||||
prefabAssetName:
|
||||
spriteLibAssetName:
|
||||
skeletonAssetName:
|
||||
secondarySpriteTextures: []
|
||||
Binary file not shown.
@ -1,23 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 913d8a886d245de4990489f960596b1e
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 8
|
||||
defaultSettings:
|
||||
serializedVersion: 2
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
preloadAudioData: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,23 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 45d84e15e1dc9ba4c9c98c338a4145b2
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 8
|
||||
defaultSettings:
|
||||
serializedVersion: 2
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
preloadAudioData: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,23 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7416f0cbb9cb08641b85fe5f89726245
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 8
|
||||
defaultSettings:
|
||||
serializedVersion: 2
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
preloadAudioData: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d6bcac2507ddd5e448851a12c20f7eaa
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,769 +0,0 @@
|
||||
# Race Fields Architecture
|
||||
|
||||
Этот документ фиксирует текущую архитектуру проекта по фактическим сценам, prefab'ам и скриптам.
|
||||
|
||||
Главная цель: видеть не просто граф зависимостей, а слои проекта, ответственность каждого блока и места, где архитектура сейчас хрупкая.
|
||||
|
||||
## Как Читать Диаграммы
|
||||
|
||||
Главная диаграмма читается сверху вниз:
|
||||
|
||||
1. `Entry / Scene Layer` - откуда стартует игра.
|
||||
2. `Scene Bootstrap Layer` - кто собирает игровую сцену.
|
||||
3. `Runtime Entity Layer` - реальные игровые объекты.
|
||||
4. `Subsystem Layer` - системы, которые обслуживают player/enemies.
|
||||
5. `Asset / Data Layer` - prefab'ы, sprites, render textures, static state.
|
||||
|
||||
Связи на главной диаграмме показывают только важные runtime-зависимости. Детальные связи вынесены ниже в отдельные диаграммы.
|
||||
|
||||
## Current Architecture Overview
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph L1["ENTRY / SCENE LAYER"]
|
||||
SelectionScene["Selection Scene"]
|
||||
DemoScene["Demo Scene"]
|
||||
end
|
||||
|
||||
subgraph L2["SCENE BOOTSTRAP LAYER"]
|
||||
SelectionMenu["SelectionMenuController\nвыбор машины / режима / карты"]
|
||||
SelectedVehicleSpawner["SelectedVehicleSpawner\nсоздает player и биндует сцену"]
|
||||
end
|
||||
|
||||
subgraph L3["RUNTIME ENTITY LAYER"]
|
||||
Player["Player Vehicle Instance\nBuggy prefab clone"]
|
||||
Harvester["Harvester Enemy\nHarvester prefab instance"]
|
||||
Terrain["Terrain\nTerrainCollider"]
|
||||
end
|
||||
|
||||
subgraph L4["PLAYER SUBSYSTEMS"]
|
||||
VehicleControl["ArcadeBuggyController\ninput + physics + wheels + sound + effects"]
|
||||
WheelRig["WheelColliders / WheelVisuals"]
|
||||
DamageCore["VehicleDamageController\nмодули здоровья"]
|
||||
ImpactDamage["VehicleImpactDamageReceiver\nterrain / landing / collision damage"]
|
||||
DamageHitboxes["DamageHitbox\nзоны урона"]
|
||||
end
|
||||
|
||||
subgraph L5["SCENE SUBSYSTEMS"]
|
||||
FollowCamera["BuggyFollowCamera"]
|
||||
RearViewCamera["RearViewMirrorCamera"]
|
||||
DamageHUD["VehicleDamageHud"]
|
||||
HarvesterAI["HarvesterChaseController"]
|
||||
BladeDamage["BladeDamageSource"]
|
||||
BladeVisual["HarvesterBladeSpinner"]
|
||||
end
|
||||
|
||||
subgraph L6["ASSET / DATA LAYER"]
|
||||
GameSelectionState["GameSelectionState static\nвыбор между сценами"]
|
||||
VehiclePrefabs["Player Vehicle Prefabs\nBuggy / Buggy_1 / Buggy_Player"]
|
||||
HarvesterPrefab["HarvesterEnemy Prefab"]
|
||||
DamageUISprites["MDP_Buggy_1.psb\nHUD base + overlay sprites"]
|
||||
RearViewRT["RearViewMirror RenderTexture"]
|
||||
end
|
||||
|
||||
SelectionScene --> SelectionMenu
|
||||
SelectionMenu --> GameSelectionState
|
||||
SelectionMenu --> DemoScene
|
||||
|
||||
DemoScene --> SelectedVehicleSpawner
|
||||
DemoScene --> Terrain
|
||||
DemoScene --> Harvester
|
||||
|
||||
SelectedVehicleSpawner --> GameSelectionState
|
||||
SelectedVehicleSpawner --> VehiclePrefabs
|
||||
SelectedVehicleSpawner --> Player
|
||||
SelectedVehicleSpawner --> FollowCamera
|
||||
SelectedVehicleSpawner --> RearViewCamera
|
||||
SelectedVehicleSpawner --> DamageHUD
|
||||
|
||||
VehiclePrefabs --> Player
|
||||
Player --> VehicleControl
|
||||
Player --> WheelRig
|
||||
Player --> DamageCore
|
||||
Player --> ImpactDamage
|
||||
Player --> DamageHitboxes
|
||||
|
||||
VehicleControl --> WheelRig
|
||||
ImpactDamage --> DamageCore
|
||||
ImpactDamage --> WheelRig
|
||||
DamageHitboxes --> DamageCore
|
||||
DamageCore --> DamageHUD
|
||||
DamageUISprites --> DamageHUD
|
||||
|
||||
HarvesterPrefab --> Harvester
|
||||
Harvester --> HarvesterAI
|
||||
Harvester --> BladeVisual
|
||||
Harvester --> BladeDamage
|
||||
HarvesterAI --> Player
|
||||
BladeDamage --> DamageHitboxes
|
||||
|
||||
FollowCamera --> Player
|
||||
RearViewCamera --> Player
|
||||
RearViewCamera --> RearViewRT
|
||||
```
|
||||
|
||||
## Main Runtime Flow
|
||||
|
||||
Это основной путь от выбора машины до gameplay.
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant PlayerInput as Player Input
|
||||
participant SelectionMenu as SelectionMenuController
|
||||
participant SelectionState as GameSelectionState
|
||||
participant UnityScene as Unity SceneManager
|
||||
participant DemoScene as Demo Scene
|
||||
participant Spawner as SelectedVehicleSpawner
|
||||
participant Vehicle as Player Vehicle
|
||||
participant Camera as Cameras
|
||||
participant HUD as VehicleDamageHud
|
||||
participant Enemy as Harvester
|
||||
|
||||
PlayerInput->>SelectionMenu: left/right/space
|
||||
SelectionMenu->>SelectionMenu: choose vehicle, mode, map
|
||||
SelectionMenu->>SelectionState: SetSelection(vehiclePrefab, mode, sceneName)
|
||||
SelectionMenu->>UnityScene: LoadScene(sceneName)
|
||||
UnityScene->>DemoScene: load gameplay scene
|
||||
DemoScene->>Spawner: Start()
|
||||
Spawner->>SelectionState: read selected prefab
|
||||
Spawner->>Vehicle: Instantiate(prefab at spawn point)
|
||||
Spawner->>Camera: SetTarget(vehicle)
|
||||
Spawner->>HUD: Bind(vehicle.VehicleDamageController)
|
||||
Enemy->>Vehicle: auto find / chase target
|
||||
```
|
||||
|
||||
Проблема этого flow:
|
||||
|
||||
- `GameSelectionState` - static.
|
||||
- `SelectedVehicleSpawner` уже не просто spawner, а bootstrap сцены.
|
||||
- Камеры, HUD и враг частично умеют искать player сами, частично получают его от spawner.
|
||||
|
||||
## Scene Composition
|
||||
|
||||
### Selection Scene
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph SelectionScene["Selection Scene"]
|
||||
MainCamera["Main Camera"]
|
||||
Light["Directional Light"]
|
||||
PreviewRoot["VehiclePreviewRoot"]
|
||||
PreviewFloor["Preview Floor"]
|
||||
Canvas["Selection Canvas"]
|
||||
EventSystem["EventSystem\nInputSystemUIInputModule"]
|
||||
Menu["SelectionMenuController"]
|
||||
end
|
||||
|
||||
Menu --> PreviewRoot
|
||||
Menu --> Canvas
|
||||
Menu -->|"spawns preview prefab"| PreviewVehicle["Runtime Preview Vehicle"]
|
||||
Menu -->|"writes selected data"| GameSelectionState["GameSelectionState"]
|
||||
Menu -->|"loads selected map"| SceneManager["SceneManager.LoadScene"]
|
||||
```
|
||||
|
||||
Что важно:
|
||||
|
||||
- Preview использует настоящий gameplay prefab.
|
||||
- После spawn preview отключаются gameplay-компоненты.
|
||||
- Это быстро, но preview и gameplay связаны слишком плотно.
|
||||
|
||||
### Demo Scene
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph DemoScene["Demo Scene"]
|
||||
Terrain["Terrain + TerrainCollider"]
|
||||
ExistingBuggy["Buggy_1 scene instance\nтестовый объект"]
|
||||
SpawnPoint["Selected Vehicle Spawn Point"]
|
||||
Spawner["SelectedVehicleSpawner"]
|
||||
FollowCamera["Buggy_ThirdPersonCamera"]
|
||||
RearCamera["RearViewMirrorCamera"]
|
||||
HudCanvas["Gameplay HUD Canvas"]
|
||||
Harvester["Harvester"]
|
||||
MachineGun["MachineGun"]
|
||||
end
|
||||
|
||||
Spawner --> SpawnPoint
|
||||
Spawner -->|"destroys existing ArcadeBuggyController if enabled"| ExistingBuggy
|
||||
Spawner -->|"spawns selected prefab"| SpawnedPlayer["Buggy(Clone)"]
|
||||
Spawner --> FollowCamera
|
||||
Spawner --> RearCamera
|
||||
Spawner --> HudCanvas
|
||||
Harvester -->|"chases"| SpawnedPlayer
|
||||
```
|
||||
|
||||
Что важно:
|
||||
|
||||
- В сцене есть и тестовая машина `Buggy_1`, и spawner.
|
||||
- Spawner может удалить старую машину и создать выбранную.
|
||||
- Для финальной архитектуры лучше оставить один путь создания player.
|
||||
|
||||
## Vehicle Prefab Composition
|
||||
|
||||
Все три player-prefab'а сейчас должны иметь одну и ту же структуру:
|
||||
|
||||
- `Buggy.prefab`
|
||||
- `Buggy_1.prefab`
|
||||
- `Buggy_Player.prefab`
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph VehicleRoot["PLAYER VEHICLE PREFAB ROOT"]
|
||||
Transform["Transform"]
|
||||
Rigidbody["Rigidbody"]
|
||||
BoxCollider["BoxCollider"]
|
||||
end
|
||||
|
||||
subgraph Control["CONTROL / PHYSICS"]
|
||||
ArcadeBuggyController["ArcadeBuggyController"]
|
||||
BuggyWheelSetup["BuggyWheelSetup"]
|
||||
WheelColliders["WheelCollider_FL / FR / RL / RR"]
|
||||
WheelVisuals["Wheel visuals"]
|
||||
VehicleAudio["EngineSound / TireScreechSound"]
|
||||
VehicleVFX["Smoke / Skid Trails"]
|
||||
end
|
||||
|
||||
subgraph Damage["DAMAGE"]
|
||||
VehicleDamageController["VehicleDamageController"]
|
||||
VehicleImpactDamageReceiver["VehicleImpactDamageReceiver"]
|
||||
DamageModules["DamageModules"]
|
||||
DamageHitboxes["DamageHitboxes"]
|
||||
end
|
||||
|
||||
subgraph Modules["MODULES"]
|
||||
Body["Body Module"]
|
||||
Engine["Engine Module"]
|
||||
FL["FrontLeftWheel Module"]
|
||||
FR["FrontRightWheel Module"]
|
||||
RL["RearLeftWheel Module"]
|
||||
RR["RearRightWheel Module"]
|
||||
end
|
||||
|
||||
subgraph Hitboxes["HITBOXES"]
|
||||
BodyBox["Body Hitbox"]
|
||||
EngineBox["Engine Hitbox"]
|
||||
FLBox["FrontLeftWheel Hitbox"]
|
||||
FRBox["FrontRightWheel Hitbox"]
|
||||
RLBox["RearLeftWheel Hitbox"]
|
||||
RRBox["RearRightWheel Hitbox"]
|
||||
end
|
||||
|
||||
VehicleRoot --> Control
|
||||
VehicleRoot --> Damage
|
||||
|
||||
ArcadeBuggyController --> WheelColliders
|
||||
ArcadeBuggyController --> WheelVisuals
|
||||
ArcadeBuggyController --> VehicleAudio
|
||||
ArcadeBuggyController --> VehicleVFX
|
||||
BuggyWheelSetup --> WheelColliders
|
||||
|
||||
VehicleDamageController --> DamageModules
|
||||
DamageModules --> Modules
|
||||
DamageHitboxes --> Hitboxes
|
||||
DamageHitboxes --> VehicleDamageController
|
||||
VehicleImpactDamageReceiver --> VehicleDamageController
|
||||
VehicleImpactDamageReceiver --> ArcadeBuggyController
|
||||
|
||||
FL -->|"destroyed"| ArcadeBuggyController
|
||||
FR -->|"destroyed"| ArcadeBuggyController
|
||||
RL -->|"destroyed"| ArcadeBuggyController
|
||||
RR -->|"destroyed"| ArcadeBuggyController
|
||||
```
|
||||
|
||||
Ключевая проблема:
|
||||
|
||||
`Damage` зависит от `ArcadeBuggyController`. Это работает только пока все машины устроены как багги. Для нормальной архитектуры нужен wheel adapter/interface.
|
||||
|
||||
## Damage Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph DamageInput["DAMAGE INPUT SOURCES"]
|
||||
BladeDamageSource["BladeDamageSource\ntrigger damage"]
|
||||
ImpactReceiver["VehicleImpactDamageReceiver\nterrain / landing / collision"]
|
||||
FutureWeapons["Future Weapons\nbullets / mines / rockets"]
|
||||
end
|
||||
|
||||
subgraph Routing["DAMAGE ROUTING"]
|
||||
DamageHitbox["DamageHitbox\nexternal hit -> module type"]
|
||||
DamageHit["DamageHit\namount / type / point / direction / source"]
|
||||
end
|
||||
|
||||
subgraph State["DAMAGE STATE"]
|
||||
DamageController["VehicleDamageController"]
|
||||
ModuleBase["DamageableVehicleModule"]
|
||||
WheelModule["VehicleWheelDamageModule"]
|
||||
end
|
||||
|
||||
subgraph Output["DAMAGE OUTPUT"]
|
||||
Hud["VehicleDamageHud"]
|
||||
WheelDetach["Wheel detach\nvisual + collider + rigidbody"]
|
||||
ControllerEffect["ArcadeBuggyController.SetWheelEnabled(false)"]
|
||||
end
|
||||
|
||||
BladeDamageSource --> DamageHitbox
|
||||
FutureWeapons --> DamageHitbox
|
||||
DamageHitbox --> DamageHit
|
||||
ImpactReceiver --> DamageHit
|
||||
DamageHit --> DamageController
|
||||
DamageController --> ModuleBase
|
||||
ModuleBase --> WheelModule
|
||||
DamageController --> Hud
|
||||
WheelModule --> WheelDetach
|
||||
WheelModule --> ControllerEffect
|
||||
```
|
||||
|
||||
### Damage Rules Сейчас
|
||||
|
||||
External damage:
|
||||
|
||||
- `BladeDamageSource` ищет `DamageHitbox`.
|
||||
- `DamageHitbox` знает `VehicleModuleType`.
|
||||
- `VehicleDamageController` передает damage в конкретный module.
|
||||
|
||||
Terrain / impact damage:
|
||||
|
||||
- `VehicleImpactDamageReceiver` висит на root машины.
|
||||
- Считает collision damage через `OnCollisionEnter`.
|
||||
- Считает landing damage по каждому `WheelCollider`.
|
||||
- Отправляет damage напрямую в `VehicleDamageController`.
|
||||
|
||||
HUD:
|
||||
|
||||
- `VehicleDamageHud` слушает `VehicleDamageController.ModuleStateChanged`.
|
||||
- Красит overlay:
|
||||
- healthy - transparent;
|
||||
- damaged - red;
|
||||
- destroyed/detached - black.
|
||||
|
||||
## Enemy Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph HarvesterPrefab["HARVESTER PREFAB"]
|
||||
HarvesterRoot["Root\nRigidbody + BoxCollider"]
|
||||
Chase["HarvesterChaseController"]
|
||||
HarvesterWheels["WheelColliders + WheelVisuals"]
|
||||
Blades["Blades"]
|
||||
Spinner["HarvesterBladeSpinner"]
|
||||
BladeDamage["BladeDamageSource"]
|
||||
end
|
||||
|
||||
subgraph Target["TARGET"]
|
||||
PlayerVehicle["ArcadeBuggyController player"]
|
||||
PlayerHitboxes["Player DamageHitboxes"]
|
||||
end
|
||||
|
||||
Chase --> HarvesterWheels
|
||||
Chase -->|"FindFirstObjectByType / target"| PlayerVehicle
|
||||
Blades --> Spinner
|
||||
Blades --> BladeDamage
|
||||
BladeDamage --> PlayerHitboxes
|
||||
```
|
||||
|
||||
Проблема:
|
||||
|
||||
- Harvester сам ищет player.
|
||||
- Нет `EnemyDirector`.
|
||||
- Нет единого `TargetProvider`.
|
||||
- При нескольких машинах враг может выбрать не ту.
|
||||
|
||||
## Camera And HUD Binding
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
Spawner["SelectedVehicleSpawner"]
|
||||
Player["Spawned Player Vehicle"]
|
||||
|
||||
subgraph CameraSystem["CAMERA SYSTEM"]
|
||||
FollowCamera["BuggyFollowCamera"]
|
||||
RearViewCamera["RearViewMirrorCamera"]
|
||||
RearViewRT["RearViewMirror RenderTexture"]
|
||||
RearViewImage["Rear View UI Image"]
|
||||
end
|
||||
|
||||
subgraph HUDSystem["HUD SYSTEM"]
|
||||
DamageHud["VehicleDamageHud"]
|
||||
HudBase["DamageHUD_BaseLayers"]
|
||||
HudOverlays["DamageHUD_DamageOverlays"]
|
||||
end
|
||||
|
||||
Spawner --> Player
|
||||
Spawner -->|"SetTarget"| FollowCamera
|
||||
Spawner -->|"SetTarget"| RearViewCamera
|
||||
RearViewCamera --> RearViewRT
|
||||
RearViewRT --> RearViewImage
|
||||
|
||||
Player -->|"VehicleDamageController"| DamageHud
|
||||
DamageHud --> HudBase
|
||||
DamageHud --> HudOverlays
|
||||
```
|
||||
|
||||
Проблема:
|
||||
|
||||
- Камеры и HUD умеют искать player сами.
|
||||
- Spawner тоже задает им player.
|
||||
- Нужно выбрать один путь. Лучше: bind только через bootstrap.
|
||||
|
||||
## Current Dependency Table
|
||||
|
||||
| System | Owns | Depends On | Problem |
|
||||
|---|---|---|---|
|
||||
| `SelectionMenuController` | UI выбора, preview, load scene | `GameSelectionState`, real vehicle prefab | Preview завязан на gameplay prefab |
|
||||
| `GameSelectionState` | выбранная машина/режим/карта | static global state | нет lifecycle, нет reset/session |
|
||||
| `SelectedVehicleSpawner` | spawn player, bind camera/HUD | `GameSelectionState`, cameras, HUD, damage | делает больше, чем spawner |
|
||||
| `ArcadeBuggyController` | input, drive, wheels, audio, VFX | wheel objects, audio, particles | слишком широкий класс |
|
||||
| `VehicleDamageController` | health modules | modules array | ок, но нужен profile/config |
|
||||
| `VehicleImpactDamageReceiver` | terrain/collision damage | `ArcadeBuggyController`, `VehicleDamageController` | damage зависит от конкретной машины |
|
||||
| `VehicleWheelDamageModule` | wheel destruction | `ArcadeBuggyController` | damage знает controller |
|
||||
| `VehicleDamageHud` | module damage UI | `VehicleDamageController`, scene UI sprites | mapping зашит в scene |
|
||||
| `HarvesterChaseController` | enemy movement | player search, wheel colliders | нет EnemyDirector |
|
||||
| `BladeDamageSource` | blade damage | `DamageHitbox` | нормальная связь для source damage |
|
||||
| `BuggyFollowCamera` | follow camera | player search or external target | два способа binding |
|
||||
| `RearViewMirrorCamera` | rear view | player search or external target | два способа binding |
|
||||
|
||||
## Architecture Problems To Fix Before Scaling
|
||||
|
||||
### 1. Нужен GameBootstrap
|
||||
|
||||
Сейчас gameplay-сцена собирается через `SelectedVehicleSpawner`, но по факту он уже делает bootstrap.
|
||||
|
||||
Нужно:
|
||||
|
||||
```text
|
||||
GameBootstrap
|
||||
-> read session request
|
||||
-> create player
|
||||
-> bind cameras
|
||||
-> bind HUD
|
||||
-> start enemies
|
||||
-> start game mode
|
||||
```
|
||||
|
||||
### 2. Нужен GameSession
|
||||
|
||||
Сейчас состояние между сценами хранится в static `GameSelectionState`.
|
||||
|
||||
Нужно:
|
||||
|
||||
```text
|
||||
GameSession
|
||||
selected vehicle
|
||||
selected map
|
||||
selected game mode
|
||||
player instance
|
||||
active enemies
|
||||
session state
|
||||
```
|
||||
|
||||
### 3. Нужен VehicleDefinition
|
||||
|
||||
Сейчас selection хранит `GameObject prefab`.
|
||||
|
||||
Лучше:
|
||||
|
||||
```text
|
||||
VehicleDefinition
|
||||
display name
|
||||
gameplay prefab
|
||||
preview settings
|
||||
damage profile
|
||||
HUD damage layout
|
||||
audio profile
|
||||
```
|
||||
|
||||
### 4. Нужен Wheel Rig Adapter
|
||||
|
||||
Damage не должен знать `ArcadeBuggyController`.
|
||||
|
||||
Нужно:
|
||||
|
||||
```csharp
|
||||
public interface IVehicleWheelRig
|
||||
{
|
||||
WheelCollider GetWheelCollider(WheelSlot slot);
|
||||
Transform GetWheelVisual(WheelSlot slot);
|
||||
void SetWheelEnabled(WheelSlot slot, bool enabled);
|
||||
bool IsWheelGrounded(WheelSlot slot);
|
||||
}
|
||||
```
|
||||
|
||||
Тогда:
|
||||
|
||||
- `VehicleImpactDamageReceiver` зависит от `IVehicleWheelRig`;
|
||||
- `VehicleWheelDamageModule` зависит от `IVehicleWheelRig`;
|
||||
- конкретная багги просто предоставляет реализацию.
|
||||
|
||||
### 5. Нужен Input Layer
|
||||
|
||||
Сейчас `ArcadeBuggyController` сам читает keyboard.
|
||||
|
||||
Нужно:
|
||||
|
||||
```text
|
||||
IPlayerInputSource
|
||||
Throttle
|
||||
Steering
|
||||
Handbrake
|
||||
|
||||
KeyboardInputSource
|
||||
GamepadInputSource
|
||||
ArcadeCabinetInputSource
|
||||
AIInputSource
|
||||
```
|
||||
|
||||
### 6. Нужны Game Modes
|
||||
|
||||
Сейчас есть enum:
|
||||
|
||||
- `Arena`
|
||||
- `SurvivalRace`
|
||||
|
||||
Но нет runtime-режимов.
|
||||
|
||||
Нужно:
|
||||
|
||||
```text
|
||||
IGameMode
|
||||
ArenaMode
|
||||
SurvivalRaceMode
|
||||
```
|
||||
|
||||
Game mode должен отвечать за:
|
||||
|
||||
- правила старта;
|
||||
- enemy spawn rules;
|
||||
- win/lose;
|
||||
- scoring;
|
||||
- timer;
|
||||
- map-specific logic.
|
||||
|
||||
## Target Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph Entry["ENTRY"]
|
||||
Selection["Selection Scene"]
|
||||
SessionRequest["GameSessionRequest"]
|
||||
end
|
||||
|
||||
subgraph Data["DATA / DEFINITIONS"]
|
||||
VehicleDefinition["VehicleDefinition"]
|
||||
MapDefinition["MapDefinition"]
|
||||
GameModeDefinition["GameModeDefinition"]
|
||||
DamageProfile["VehicleDamageProfile"]
|
||||
HudDefinition["VehicleHudDefinition"]
|
||||
end
|
||||
|
||||
subgraph Bootstrap["GAMEPLAY BOOTSTRAP"]
|
||||
GameBootstrap["GameBootstrap"]
|
||||
GameSession["GameSession"]
|
||||
VehicleFactory["VehicleFactory"]
|
||||
CameraBinder["CameraRigBinder"]
|
||||
HudBinder["HudBinder"]
|
||||
EnemyDirector["EnemyDirector"]
|
||||
GameModeRunner["GameModeRunner"]
|
||||
end
|
||||
|
||||
subgraph Runtime["RUNTIME OBJECTS"]
|
||||
Player["Player Vehicle"]
|
||||
Enemies["Enemies"]
|
||||
World["Map / Terrain / Hazards"]
|
||||
end
|
||||
|
||||
subgraph VehicleSystems["VEHICLE SYSTEMS"]
|
||||
InputSource["IPlayerInputSource"]
|
||||
VehicleController["IVehicleController"]
|
||||
WheelRig["IVehicleWheelRig"]
|
||||
DamageController["VehicleDamageController"]
|
||||
ImpactReceiver["VehicleImpactDamageReceiver"]
|
||||
VehicleAudio["VehicleAudioController"]
|
||||
VehicleVFX["VehicleEffectsController"]
|
||||
end
|
||||
|
||||
Selection --> SessionRequest
|
||||
SessionRequest --> GameBootstrap
|
||||
|
||||
GameBootstrap --> GameSession
|
||||
GameBootstrap --> VehicleFactory
|
||||
GameBootstrap --> CameraBinder
|
||||
GameBootstrap --> HudBinder
|
||||
GameBootstrap --> EnemyDirector
|
||||
GameBootstrap --> GameModeRunner
|
||||
|
||||
GameSession --> VehicleDefinition
|
||||
GameSession --> MapDefinition
|
||||
GameSession --> GameModeDefinition
|
||||
|
||||
VehicleDefinition --> DamageProfile
|
||||
VehicleDefinition --> HudDefinition
|
||||
VehicleFactory --> Player
|
||||
|
||||
Player --> InputSource
|
||||
Player --> VehicleController
|
||||
Player --> WheelRig
|
||||
Player --> DamageController
|
||||
Player --> ImpactReceiver
|
||||
Player --> VehicleAudio
|
||||
Player --> VehicleVFX
|
||||
|
||||
EnemyDirector --> Enemies
|
||||
GameModeRunner --> Enemies
|
||||
GameModeRunner --> World
|
||||
CameraBinder --> Player
|
||||
HudBinder --> Player
|
||||
HudBinder --> HudDefinition
|
||||
```
|
||||
|
||||
## Recommended Refactor Plan
|
||||
|
||||
### Step 1 - Rename / Split Spawner
|
||||
|
||||
Current:
|
||||
|
||||
```text
|
||||
SelectedVehicleSpawner
|
||||
```
|
||||
|
||||
Target:
|
||||
|
||||
```text
|
||||
GameBootstrap
|
||||
VehicleFactory
|
||||
CameraRigBinder
|
||||
HudBinder
|
||||
```
|
||||
|
||||
Minimum first change:
|
||||
|
||||
- оставить spawn в `SelectedVehicleSpawner`;
|
||||
- вынести camera/HUD binding в отдельные компоненты;
|
||||
- или переименовать `SelectedVehicleSpawner` в `GameBootstrap` и явно признать его ответственность.
|
||||
|
||||
### Step 2 - Replace Static Selection With Session Request
|
||||
|
||||
Current:
|
||||
|
||||
```text
|
||||
GameSelectionState static
|
||||
```
|
||||
|
||||
Target:
|
||||
|
||||
```text
|
||||
GameSessionRequest
|
||||
GameSession
|
||||
```
|
||||
|
||||
### Step 3 - Introduce VehicleDefinition
|
||||
|
||||
Current:
|
||||
|
||||
```text
|
||||
SelectionMenuController.VehicleOption -> GameObject prefab
|
||||
```
|
||||
|
||||
Target:
|
||||
|
||||
```text
|
||||
SelectionMenuController.VehicleOption -> VehicleDefinition
|
||||
VehicleDefinition -> gameplay prefab / preview / damage / HUD / audio
|
||||
```
|
||||
|
||||
### Step 4 - Decouple Damage From ArcadeBuggyController
|
||||
|
||||
Current:
|
||||
|
||||
```text
|
||||
VehicleImpactDamageReceiver -> ArcadeBuggyController
|
||||
VehicleWheelDamageModule -> ArcadeBuggyController
|
||||
```
|
||||
|
||||
Target:
|
||||
|
||||
```text
|
||||
VehicleImpactDamageReceiver -> IVehicleWheelRig
|
||||
VehicleWheelDamageModule -> IVehicleWheelRig
|
||||
ArcadeBuggyController or BuggyWheelRig -> IVehicleWheelRig
|
||||
```
|
||||
|
||||
### Step 5 - Split ArcadeBuggyController
|
||||
|
||||
Current:
|
||||
|
||||
```text
|
||||
ArcadeBuggyController
|
||||
input
|
||||
physics
|
||||
wheel visuals
|
||||
audio
|
||||
VFX
|
||||
wheel API for damage
|
||||
```
|
||||
|
||||
Target:
|
||||
|
||||
```text
|
||||
ArcadeBuggyController / VehicleMotor
|
||||
VehicleInputSource
|
||||
VehicleWheelVisuals
|
||||
VehicleAudioController
|
||||
VehicleEffectsController
|
||||
BuggyWheelRig
|
||||
```
|
||||
|
||||
## What Is Safe To Add Now
|
||||
|
||||
Можно добавлять без сильного риска:
|
||||
|
||||
- tuning параметров машины;
|
||||
- tuning damage thresholds;
|
||||
- улучшение HUD;
|
||||
- настройка harvester movement;
|
||||
- новые визуальные эффекты;
|
||||
- простые hazards, если они наносят урон через `DamageHitbox`.
|
||||
|
||||
## What Should Wait
|
||||
|
||||
Лучше не добавлять до bootstrap/session/refactor:
|
||||
|
||||
- оружие;
|
||||
- несколько видов enemies;
|
||||
- power-ups;
|
||||
- полноценные game modes;
|
||||
- scoring/results;
|
||||
- несколько player vehicles;
|
||||
- сохранение прогресса;
|
||||
- arcade cabinet input;
|
||||
- VR-specific gameplay.
|
||||
|
||||
Причина: все это сейчас будет цепляться к static state, scene object search и прямым ссылкам.
|
||||
|
||||
## Summary
|
||||
|
||||
Текущая архитектура рабочая для prototype, но главный риск уже виден:
|
||||
|
||||
```text
|
||||
Нет единого runtime-контекста.
|
||||
```
|
||||
|
||||
Сейчас обязанности размазаны между:
|
||||
|
||||
- `GameSelectionState`;
|
||||
- `SelectedVehicleSpawner`;
|
||||
- камерами, которые сами ищут player;
|
||||
- harvester, который сам ищет player;
|
||||
- HUD, который сам ищет damage controller.
|
||||
|
||||
Нормальная точка сборки должна выглядеть так:
|
||||
|
||||
```text
|
||||
Selection Scene
|
||||
-> GameSessionRequest
|
||||
-> Demo Scene
|
||||
-> GameBootstrap
|
||||
-> GameSession
|
||||
-> Player / Cameras / HUD / Enemies / GameMode
|
||||
```
|
||||
|
||||
После этого новые системы будут подключаться через session/bootstrap, а не случайно искать друг друга по сцене.
|
||||
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: de5a8a5be1a98c64f8ae57f7dbad8078
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,650 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3339298741944017579
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2341523906103846636}
|
||||
- component: {fileID: 2501443832293603630}
|
||||
m_Layer: 0
|
||||
m_Name: WheelCollider_FR
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2341523906103846636
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3339298741944017579}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1.9216186, y: 0.17657976, z: 0.7350356}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 6862259535214135144}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!146 &2501443832293603630
|
||||
WheelCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3339298741944017579}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 1
|
||||
m_SuspensionSpring:
|
||||
spring: 65000
|
||||
damper: 8500
|
||||
targetPosition: 0.55
|
||||
m_SuspensionDistance: 0.35
|
||||
m_ForceAppPointDistance: 0.15
|
||||
m_Mass: 220
|
||||
m_WheelDampingRate: 1.2
|
||||
m_ForwardFriction:
|
||||
m_ExtremumSlip: 0.35
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.8
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.35
|
||||
m_SidewaysFriction:
|
||||
m_ExtremumSlip: 0.28
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.65
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.25
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &3650619672134271181
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 9043762048047890421}
|
||||
- component: {fileID: 5585513332569899037}
|
||||
m_Layer: 0
|
||||
m_Name: WheelCollider_FL
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &9043762048047890421
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3650619672134271181}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -1.7403082, y: 0.16376202, z: 0.7350353}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 6862259535214135144}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!146 &5585513332569899037
|
||||
WheelCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3650619672134271181}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 1
|
||||
m_SuspensionSpring:
|
||||
spring: 65000
|
||||
damper: 8500
|
||||
targetPosition: 0.55
|
||||
m_SuspensionDistance: 0.35
|
||||
m_ForceAppPointDistance: 0.15
|
||||
m_Mass: 220
|
||||
m_WheelDampingRate: 1.2
|
||||
m_ForwardFriction:
|
||||
m_ExtremumSlip: 0.35
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.8
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.35
|
||||
m_SidewaysFriction:
|
||||
m_ExtremumSlip: 0.28
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.65
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.25
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &4220187751944662163
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6862259535214135144}
|
||||
m_Layer: 0
|
||||
m_Name: WheelColliders
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6862259535214135144
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4220187751944662163}
|
||||
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: 9043762048047890421}
|
||||
- {fileID: 2341523906103846636}
|
||||
- {fileID: 5185461955860110645}
|
||||
- {fileID: 8105902962228665843}
|
||||
m_Father: {fileID: 7508790823005770425}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &5060349281540240539
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8105902962228665843}
|
||||
- component: {fileID: 2169601261042596014}
|
||||
m_Layer: 0
|
||||
m_Name: WheelCollider_RR
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8105902962228665843
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060349281540240539}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1.9163063, y: 0.16070208, z: -1.7646651}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 6862259535214135144}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!146 &2169601261042596014
|
||||
WheelCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060349281540240539}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 0.835
|
||||
m_SuspensionSpring:
|
||||
spring: 65000
|
||||
damper: 8500
|
||||
targetPosition: 0.55
|
||||
m_SuspensionDistance: 0.29224998
|
||||
m_ForceAppPointDistance: 0.15
|
||||
m_Mass: 220
|
||||
m_WheelDampingRate: 1.2
|
||||
m_ForwardFriction:
|
||||
m_ExtremumSlip: 0.35
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.8
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.35
|
||||
m_SidewaysFriction:
|
||||
m_ExtremumSlip: 0.28
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.65
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.25
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &6901689348553057335
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5185461955860110645}
|
||||
- component: {fileID: 3545069760759377831}
|
||||
m_Layer: 0
|
||||
m_Name: WheelCollider_RL
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5185461955860110645
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6901689348553057335}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -1.744715, y: 0.1364725, z: -1.7646654}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 6862259535214135144}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!146 &3545069760759377831
|
||||
WheelCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6901689348553057335}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 0.835
|
||||
m_SuspensionSpring:
|
||||
spring: 65000
|
||||
damper: 8500
|
||||
targetPosition: 0.55
|
||||
m_SuspensionDistance: 0.29224998
|
||||
m_ForceAppPointDistance: 0.15
|
||||
m_Mass: 220
|
||||
m_WheelDampingRate: 1.2
|
||||
m_ForwardFriction:
|
||||
m_ExtremumSlip: 0.35
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.8
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.35
|
||||
m_SidewaysFriction:
|
||||
m_ExtremumSlip: 0.28
|
||||
m_ExtremumValue: 1
|
||||
m_AsymptoteSlip: 0.65
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1.25
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1001 &8051921584296146258
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 163.4559
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0.7491313
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 104.04857
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8122145627593432382, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
- target: {fileID: -7664728788398519507, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 8e3501dfb51fb04479ac17d08a801b01, type: 2}
|
||||
- target: {fileID: -2021238142412837144, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 536d0e1e844825b40be6a4e05f331ff3, type: 2}
|
||||
- target: {fileID: -1120989108687609925, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 8e3501dfb51fb04479ac17d08a801b01, type: 2}
|
||||
- target: {fileID: -887049932902998247, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
- target: {fileID: 919132149155446097, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: HarvesterEnemy
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1572452237337188096, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1572452237337188096, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1572452237337188096, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1572452237337188096, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1572452237337188096, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1986983560156708314, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
- target: {fileID: 4438303694591376117, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 2559ea3811cbaba40b8e47dadd6a7b9a, type: 2}
|
||||
- target: {fileID: 6008359057637615197, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
- target: {fileID: 6846309238722795712, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: bd7a4fcb0f71b9846aeb33b4d16c9459, type: 2}
|
||||
- target: {fileID: 8004537395834564576, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 536d0e1e844825b40be6a4e05f331ff3, type: 2}
|
||||
- target: {fileID: 8666396105146483402, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 536d0e1e844825b40be6a4e05f331ff3, type: 2}
|
||||
- target: {fileID: 9002406800346883408, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 2559ea3811cbaba40b8e47dadd6a7b9a, type: 2}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects:
|
||||
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 6862259535214135144}
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 309838903600352088}
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4013279782791818711}
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4587263311667884763}
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 6917201045494101815}
|
||||
- targetCorrespondingSourceObject: {fileID: 4177302620104308133, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 3524664443606531945}
|
||||
- targetCorrespondingSourceObject: {fileID: 4177302620104308133, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 5132510599987276558}
|
||||
- targetCorrespondingSourceObject: {fileID: 4177302620104308133, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 8479407567185228081}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
--- !u!4 &3259800674814833756 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 4792691420746940686, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
m_PrefabInstance: {fileID: 8051921584296146258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &3958912292318364215 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -2788064876795922587, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
m_PrefabInstance: {fileID: 8051921584296146258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &6216918693069553911 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 4177302620104308133, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
m_PrefabInstance: {fileID: 8051921584296146258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &3524664443606531945
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6216918693069553911}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 314cfddae3eb4784ca1f6c04a3ac82f5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Harvesters.Visuals.HarvesterBladeSpinner
|
||||
rotationSpeed: 720
|
||||
rotationSpace: 1
|
||||
--- !u!114 &5132510599987276558
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6216918693069553911}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5483916f7ebff2c448991626172509ea, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.BladeDamageSource
|
||||
damagePerSecond: 45
|
||||
tickInterval: 0.25
|
||||
activationDelay: 1.25
|
||||
--- !u!65 &8479407567185228081
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6216918693069553911}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.065, y: 0.014, z: 0.014}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &7169525912848336899 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
m_PrefabInstance: {fileID: 8051921584296146258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!54 &309838903600352088
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7169525912848336899}
|
||||
serializedVersion: 5
|
||||
m_Mass: 2500
|
||||
m_LinearDamping: 0.03
|
||||
m_AngularDamping: 1.2
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 1
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 2
|
||||
--- !u!114 &4013279782791818711
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7169525912848336899}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4d8c0e258b3d5b74e8d179d4cc96c122, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Harvesters.AI.HarvesterChaseController
|
||||
target: {fileID: 0}
|
||||
autoFindPlayer: 1
|
||||
targetSearchInterval: 0.35
|
||||
frontLeftCollider: {fileID: 5585513332569899037}
|
||||
frontRightCollider: {fileID: 2501443832293603630}
|
||||
rearLeftCollider: {fileID: 3545069760759377831}
|
||||
rearRightCollider: {fileID: 2169601261042596014}
|
||||
frontLeftVisual: {fileID: 7676333813219013543}
|
||||
frontRightVisual: {fileID: 3958912292318364215}
|
||||
rearLeftVisual: {fileID: 7543941119015121129}
|
||||
rearRightVisual: {fileID: 3259800674814833756}
|
||||
maxSpeedKmh: 55
|
||||
motorTorque: 30000
|
||||
brakeTorque: 6500
|
||||
maxSteerAngle: 28
|
||||
steeringResponse: 4
|
||||
stoppingDistance: 1.4
|
||||
reverseDistance: 0.7
|
||||
downforce: 45
|
||||
centerOfMass: {x: 0, y: -0.65, z: 0.2}
|
||||
--- !u!65 &4587263311667884763
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7169525912848336899}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 2.6, y: 2.3, z: 4.8}
|
||||
m_Center: {x: 0.08, y: 1.65, z: -0.05}
|
||||
--- !u!114 &6917201045494101815
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7169525912848336899}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b84a36537942ca148a8bc4a133d96e93, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.SimpleDamageReceiver
|
||||
maxHealth: 100
|
||||
destroyOnDeath: 1
|
||||
destroyDelay: 0
|
||||
--- !u!4 &7508790823005770425 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
m_PrefabInstance: {fileID: 8051921584296146258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7543941119015121129 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 508724786338088379, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
m_PrefabInstance: {fileID: 8051921584296146258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7676333813219013543 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8846761903566321931, guid: b1dfea447adb74843b8085dbe3a6bd24, type: 3}
|
||||
m_PrefabInstance: {fileID: 8051921584296146258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9291a3f8ca3422546ae45ab051e89b2b
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,287 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &5060312022363176025
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4449135132298046214}
|
||||
- component: {fileID: 455824722436531212}
|
||||
- component: {fileID: 5609845134334554891}
|
||||
- component: {fileID: 8172290100206215017}
|
||||
- component: {fileID: 3755552695787435108}
|
||||
- component: {fileID: 5767152562348033804}
|
||||
- component: {fileID: 4256604062628749703}
|
||||
m_Layer: 0
|
||||
m_Name: BulletProjectile
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4449135132298046214
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060312022363176025}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.07, y: 0.07, z: 0.07}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &455824722436531212
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060312022363176025}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!135 &5609845134334554891
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060312022363176025}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &8172290100206215017
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060312022363176025}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: e4f0cefa7e5ef2640b0cf25b80ee3520, type: 2}
|
||||
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: 1
|
||||
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_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!54 &3755552695787435108
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060312022363176025}
|
||||
serializedVersion: 5
|
||||
m_Mass: 0.03
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 0
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 1
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 2
|
||||
--- !u!114 &5767152562348033804
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060312022363176025}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9a787488e597d6a4ca2a4d452e6ee62a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BulletProjectile
|
||||
damage: 8
|
||||
impactForce: 25
|
||||
lifeTime: 2.5
|
||||
--- !u!96 &4256604062628749703
|
||||
TrailRenderer:
|
||||
serializedVersion: 4
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5060312022363176025}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 0
|
||||
m_LightProbeUsage: 0
|
||||
m_ReflectionProbeUsage: 0
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 10754, 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_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Time: 3
|
||||
m_PreviewTimeScale: 1
|
||||
m_Parameters:
|
||||
serializedVersion: 3
|
||||
widthMultiplier: 1
|
||||
widthCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0.21352497
|
||||
inSlope: -0.070786595
|
||||
outSlope: -0.070786595
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.942857
|
||||
- serializedVersion: 3
|
||||
time: 0.29931217
|
||||
value: 0.12369752
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 0.65615445
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
colorGradient:
|
||||
serializedVersion: 2
|
||||
key0: {r: 1, g: 0.94832873, b: 0, a: 1}
|
||||
key1: {r: 1, g: 1, b: 1, a: 1}
|
||||
key2: {r: 0, g: 0, b: 0, a: 0}
|
||||
key3: {r: 0, g: 0, b: 0, a: 0}
|
||||
key4: {r: 0, g: 0, b: 0, a: 0}
|
||||
key5: {r: 0, g: 0, b: 0, a: 0}
|
||||
key6: {r: 0, g: 0, b: 0, a: 0}
|
||||
key7: {r: 0, g: 0, b: 0, a: 0}
|
||||
ctime0: 0
|
||||
ctime1: 65535
|
||||
ctime2: 0
|
||||
ctime3: 0
|
||||
ctime4: 0
|
||||
ctime5: 0
|
||||
ctime6: 0
|
||||
ctime7: 0
|
||||
atime0: 24865
|
||||
atime1: 65535
|
||||
atime2: 0
|
||||
atime3: 0
|
||||
atime4: 0
|
||||
atime5: 0
|
||||
atime6: 0
|
||||
atime7: 0
|
||||
m_Mode: 0
|
||||
m_ColorSpace: 0
|
||||
m_NumColorKeys: 2
|
||||
m_NumAlphaKeys: 2
|
||||
numCornerVertices: 0
|
||||
numCapVertices: 0
|
||||
alignment: 0
|
||||
textureMode: 0
|
||||
textureScale: {x: 1, y: 1}
|
||||
shadowBias: 0.5
|
||||
generateLightingData: 0
|
||||
m_MinVertexDistance: 0.1
|
||||
m_Autodestruct: 0
|
||||
m_Emitting: 1
|
||||
m_ApplyActiveColorSpace: 1
|
||||
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b53989f2534110c459cbd05c3562861f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,42 +1,5 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &678851920617152828
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4308219931449687786}
|
||||
m_Layer: 0
|
||||
m_Name: DamageModules
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4308219931449687786
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 678851920617152828}
|
||||
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: 5203170617531134041}
|
||||
- {fileID: 4039219305083098774}
|
||||
- {fileID: 917869650534139438}
|
||||
- {fileID: 513069921206777595}
|
||||
- {fileID: 5030994328003929438}
|
||||
- {fileID: 1490784618976174324}
|
||||
m_Father: {fileID: 6187829236652007928}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &904516071749555836
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -80,7 +43,7 @@ AudioSource:
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 0}
|
||||
m_Resource: {fileID: 8300000, guid: 45d84e15e1dc9ba4c9c98c338a4145b2, type: 3}
|
||||
m_Resource: {fileID: 8300000, guid: f632e2ace80a32e47a2c531f64901a50, type: 3}
|
||||
m_PlayOnAwake: 0
|
||||
m_Volume: 0.4
|
||||
m_Pitch: 1
|
||||
@ -166,374 +129,6 @@ AudioSource:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
--- !u!1 &980107703586752827
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1490784618976174324}
|
||||
m_Layer: 0
|
||||
m_Name: DamageModule_RearRightWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1490784618976174324
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 980107703586752827}
|
||||
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: 4308219931449687786}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &985278927905599597
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 509780127314561339}
|
||||
- component: {fileID: 4949023128094988400}
|
||||
- component: {fileID: 4617614898393773024}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_RearRightWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &509780127314561339
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 985278927905599597}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1.0023823, y: 0.42134243, z: -0.4222711}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5756100871681110291}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &4949023128094988400
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 985278927905599597}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.60740626
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &4617614898393773024
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 985278927905599597}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 4162358059794313232}
|
||||
moduleType: 5
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1 &1522199945063803671
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 165765137459173630}
|
||||
- component: {fileID: 5518850499844772572}
|
||||
- component: {fileID: 9097829637973307076}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_RearLeftWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &165765137459173630
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1522199945063803671}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -1.0329266, y: 0.42649394, z: -0.42227113}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5756100871681110291}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &5518850499844772572
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1522199945063803671}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.60405797
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &9097829637973307076
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1522199945063803671}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 4162358059794313232}
|
||||
moduleType: 4
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1 &2033152002869285067
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5756100871681110291}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitboxes
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5756100871681110291
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2033152002869285067}
|
||||
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: 5784468902436153891}
|
||||
- {fileID: 4254540126733534658}
|
||||
- {fileID: 6456890869576959319}
|
||||
- {fileID: 4314062963670830293}
|
||||
- {fileID: 165765137459173630}
|
||||
- {fileID: 509780127314561339}
|
||||
m_Father: {fileID: 6187829236652007928}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &2087479700153931477
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 917869650534139438}
|
||||
m_Layer: 0
|
||||
m_Name: DamageModule_FrontLeftWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &917869650534139438
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2087479700153931477}
|
||||
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: 4308219931449687786}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &2134887713512700918
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6456890869576959319}
|
||||
- component: {fileID: 3641632203635272221}
|
||||
- component: {fileID: 7977274247077034901}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_FrontLeftWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6456890869576959319
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2134887713512700918}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.98700947, y: 0.42516497, z: 1.7977297}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5756100871681110291}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &3641632203635272221
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2134887713512700918}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.60405797
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7977274247077034901
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2134887713512700918}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 4162358059794313232}
|
||||
moduleType: 2
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1 &2236652310159055060
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 513069921206777595}
|
||||
m_Layer: 0
|
||||
m_Name: DamageModule_FrontRightWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &513069921206777595
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2236652310159055060}
|
||||
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: 4308219931449687786}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &3142864022589553855
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4039219305083098774}
|
||||
m_Layer: 0
|
||||
m_Name: DamageModule_Engine
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4039219305083098774
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3142864022589553855}
|
||||
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: 4308219931449687786}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &3869626763326721352
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -560,7 +155,7 @@ Transform:
|
||||
m_GameObject: {fileID: 3869626763326721352}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -0.98700947, y: 0.42516497, z: 1.7977297}
|
||||
m_LocalPosition: {x: -0.9870148, y: 0.42516497, z: 1.7977295}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
@ -631,7 +226,7 @@ Transform:
|
||||
m_GameObject: {fileID: 4325012347455046819}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 1.0023823, y: 0.42134243, z: -0.4222711}
|
||||
m_LocalPosition: {x: 1.0023804, y: 0.42134243, z: -0.42227173}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
@ -676,75 +271,6 @@ WheelCollider:
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &4474454028331496979
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4254540126733534658}
|
||||
- component: {fileID: 6151096057021924048}
|
||||
- component: {fileID: 4665106538739430254}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_Engine
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4254540126733534658
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4474454028331496979}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.01256505, y: 0.50707626, z: 2.269475}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5756100871681110291}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &6151096057021924048
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4474454028331496979}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1.2245655, y: 0.75567365, z: 1.1007986}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &4665106538739430254
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4474454028331496979}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 4162358059794313232}
|
||||
moduleType: 1
|
||||
damageMultiplier: 1.2
|
||||
--- !u!1 &4777080315795762327
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -780,75 +306,6 @@ Transform:
|
||||
- {fileID: 7660429726624174055}
|
||||
m_Father: {fileID: 6187829236652007928}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &5074150975273399011
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5784468902436153891}
|
||||
- component: {fileID: 6844973523226333809}
|
||||
- component: {fileID: 5764655060026937901}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_Body
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5784468902436153891
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5074150975273399011}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.015743494, y: 0.76463735, z: 0.6496234}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5756100871681110291}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &6844973523226333809
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5074150975273399011}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 2.0409427, y: 1.0075649, z: 2.5554254}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5764655060026937901
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5074150975273399011}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 4162358059794313232}
|
||||
moduleType: 0
|
||||
damageMultiplier: 1
|
||||
--- !u!1 &5884228197934813945
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -875,7 +332,7 @@ Transform:
|
||||
m_GameObject: {fileID: 5884228197934813945}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -1.0329266, y: 0.42649394, z: -0.42227113}
|
||||
m_LocalPosition: {x: -1.0329285, y: 0.42649394, z: -0.42227173}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
@ -946,7 +403,7 @@ Transform:
|
||||
m_GameObject: {fileID: 6536870136428842500}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 1.0023823, y: 0.42134243, z: 1.7977293}
|
||||
m_LocalPosition: {x: 1.0023804, y: 0.42134243, z: 1.7977295}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
@ -1024,137 +481,6 @@ Transform:
|
||||
- {fileID: 7146618632555308886}
|
||||
m_Father: {fileID: 6187829236652007928}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &8221003576484659173
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5030994328003929438}
|
||||
m_Layer: 0
|
||||
m_Name: DamageModule_RearLeftWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5030994328003929438
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8221003576484659173}
|
||||
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: 4308219931449687786}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &8344515166698737873
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5203170617531134041}
|
||||
m_Layer: 0
|
||||
m_Name: DamageModule_Body
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5203170617531134041
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8344515166698737873}
|
||||
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: 4308219931449687786}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &8357043864206736957
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4314062963670830293}
|
||||
- component: {fileID: 4207657310940732640}
|
||||
- component: {fileID: 3830794235451668251}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_FrontRightWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4314062963670830293
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8357043864206736957}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1.0023823, y: 0.42134243, z: 1.7977293}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5756100871681110291}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &4207657310940732640
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8357043864206736957}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.60740626
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &3830794235451668251
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8357043864206736957}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 4162358059794313232}
|
||||
moduleType: 3
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1 &8546225698448467078
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1198,7 +524,7 @@ AudioSource:
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 0}
|
||||
m_Resource: {fileID: 8300000, guid: 7416f0cbb9cb08641b85fe5f89726245, type: 3}
|
||||
m_Resource: {fileID: 8300000, guid: 771ce407ce807b74885ec23ebd1e6647, type: 3}
|
||||
m_PlayOnAwake: 0
|
||||
m_Volume: 0.65
|
||||
m_Pitch: 1
|
||||
@ -1428,15 +754,15 @@ PrefabInstance:
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
value: 155.19724
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
value: 0.033763755
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
value: 82.28427
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
@ -1527,12 +853,6 @@ PrefabInstance:
|
||||
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 9122830728132778127}
|
||||
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4308219931449687786}
|
||||
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 5756100871681110291}
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
insertIndex: -1
|
||||
@ -1545,7 +865,7 @@ PrefabInstance:
|
||||
addedObject: {fileID: 6756632559856253266}
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4162358059794313232}
|
||||
addedObject: {fileID: 4292201610895144585}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||
--- !u!4 &18073668855899836 stripped
|
||||
Transform:
|
||||
@ -1663,7 +983,7 @@ MonoBehaviour:
|
||||
useSounds: 1
|
||||
engineSound: {fileID: 4106908681420802530}
|
||||
tireScreechSound: {fileID: 5596619143633281226}
|
||||
--- !u!114 &4162358059794313232
|
||||
--- !u!114 &4292201610895144585
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@ -1672,23 +992,21 @@ MonoBehaviour:
|
||||
m_GameObject: {fileID: 6815148326285687618}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 23a901881a64d704fbdbdf8716ec0229, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: 5f00271deee9d014d92d5672e1fe2baa, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.VehicleDamageController
|
||||
moduleHealth: []
|
||||
spawnGraceTime: 1
|
||||
minCollisionSpeed: 11
|
||||
collisionDamagePerSpeed: 4.5
|
||||
maxCollisionDamage: 95
|
||||
collisionCooldown: 0.25
|
||||
minAirTimeForLandingDamage: 0.45
|
||||
minLandingDownSpeed: 9
|
||||
landingDamagePerSpeed: 4
|
||||
maxLandingDamage: 75
|
||||
landingWheelDamageShare: 0.65
|
||||
landingBodyDamageShare: 0.35
|
||||
logDamage: 0
|
||||
lastDamageDebug:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Vehicles.BuggyWheelSetup
|
||||
frontLeftWheelName: Wheel_FL
|
||||
frontRightWheelName: Wheel_FR
|
||||
rearLeftWheelName: Wheel_RL
|
||||
rearRightWheelName: Wheel_RR
|
||||
frontLeftColliderName: WheelCollider_FL
|
||||
frontRightColliderName: WheelCollider_FR
|
||||
rearLeftColliderName: WheelCollider_RL
|
||||
rearRightColliderName: WheelCollider_RR
|
||||
radiusMultiplier: 0.5
|
||||
minimumRadius: 0.12
|
||||
suspensionDistance: 0.28
|
||||
wheelMass: 20
|
||||
--- !u!1001 &6985207696866215891
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 28b4b793ebceaa84ba0cce962ec564c1
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -175,75 +175,6 @@ WheelCollider:
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &1666953206663730719
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4479990610205060349}
|
||||
- component: {fileID: 5825399517747744468}
|
||||
- component: {fileID: 2024650573028944834}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_RearLeftWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4479990610205060349
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1666953206663730719}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.8716712, y: 0.27369422, z: -0.42227113}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9194943108169963881}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &5825399517747744468
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1666953206663730719}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.51565677
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2024650573028944834
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1666953206663730719}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 1251155925191827369}
|
||||
moduleType: 4
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1 &2599938933167188421
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -322,7 +253,7 @@ AudioSource:
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 0}
|
||||
m_Resource: {fileID: 8300000, guid: 45d84e15e1dc9ba4c9c98c338a4145b2, type: 3}
|
||||
m_Resource: {fileID: 8300000, guid: f632e2ace80a32e47a2c531f64901a50, type: 3}
|
||||
m_PlayOnAwake: 0
|
||||
m_Volume: 0.4
|
||||
m_Pitch: 1
|
||||
@ -408,75 +339,6 @@ AudioSource:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
--- !u!1 &4256784020541811601
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8855745749561159609}
|
||||
- component: {fileID: 5035463054206016886}
|
||||
- component: {fileID: 6076283664317587352}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_FrontLeftWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8855745749561159609
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4256784020541811601}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.8716712, y: 0.27369422, z: 1.8148861}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9194943108169963881}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &5035463054206016886
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4256784020541811601}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5156568
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &6076283664317587352
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4256784020541811601}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 1251155925191827369}
|
||||
moduleType: 2
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1 &5725176332190465528
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -520,7 +382,7 @@ AudioSource:
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 0}
|
||||
m_Resource: {fileID: 8300000, guid: 913d8a886d245de4990489f960596b1e, type: 3}
|
||||
m_Resource: {fileID: 8300000, guid: 771ce407ce807b74885ec23ebd1e6647, type: 3}
|
||||
m_PlayOnAwake: 0
|
||||
m_Volume: 0.65
|
||||
m_Pitch: 1
|
||||
@ -606,43 +468,6 @@ AudioSource:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
--- !u!1 &5972247958471006541
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 9194943108169963881}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitboxes
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &9194943108169963881
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5972247958471006541}
|
||||
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: 5036353294958251943}
|
||||
- {fileID: 383979774159315010}
|
||||
- {fileID: 8855745749561159609}
|
||||
- {fileID: 8988962712716943782}
|
||||
- {fileID: 4479990610205060349}
|
||||
- {fileID: 6809863583008423600}
|
||||
m_Father: {fileID: 4772777578382570152}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &6741570655071805230
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -714,75 +539,6 @@ WheelCollider:
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &6879061424484390238
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8988962712716943782}
|
||||
- component: {fileID: 5441599143552244572}
|
||||
- component: {fileID: 2059777941910514618}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_FrontRightWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8988962712716943782
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6879061424484390238}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.87719953, y: 0.2736943, z: 1.8148861}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9194943108169963881}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &5441599143552244572
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6879061424484390238}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5156568
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2059777941910514618
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6879061424484390238}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 1251155925191827369}
|
||||
moduleType: 3
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1 &6884068289341648401
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -795,7 +551,7 @@ GameObject:
|
||||
- component: {fileID: 5167617291018270}
|
||||
- component: {fileID: 582127618437854756}
|
||||
- component: {fileID: 302156863843409177}
|
||||
- component: {fileID: 1251155925191827369}
|
||||
- component: {fileID: 8664118715040108722}
|
||||
m_Layer: 0
|
||||
m_Name: Buggy_Player
|
||||
m_TagString: Untagged
|
||||
@ -823,7 +579,6 @@ Transform:
|
||||
- {fileID: 279644236469480577}
|
||||
- {fileID: 7863987729731623420}
|
||||
- {fileID: 9114007139308049182}
|
||||
- {fileID: 9194943108169963881}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!54 &5167617291018270
|
||||
@ -912,7 +667,7 @@ MonoBehaviour:
|
||||
useSounds: 1
|
||||
engineSound: {fileID: 2872479692476395633}
|
||||
tireScreechSound: {fileID: 5164767240841886004}
|
||||
--- !u!114 &1251155925191827369
|
||||
--- !u!114 &8664118715040108722
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@ -921,161 +676,21 @@ MonoBehaviour:
|
||||
m_GameObject: {fileID: 6884068289341648401}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 23a901881a64d704fbdbdf8716ec0229, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: 5f00271deee9d014d92d5672e1fe2baa, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.VehicleDamageController
|
||||
moduleHealth: []
|
||||
spawnGraceTime: 1
|
||||
minCollisionSpeed: 11
|
||||
collisionDamagePerSpeed: 4.5
|
||||
maxCollisionDamage: 95
|
||||
collisionCooldown: 0.25
|
||||
minAirTimeForLandingDamage: 0.45
|
||||
minLandingDownSpeed: 9
|
||||
landingDamagePerSpeed: 4
|
||||
maxLandingDamage: 75
|
||||
landingWheelDamageShare: 0.65
|
||||
landingBodyDamageShare: 0.35
|
||||
logDamage: 0
|
||||
lastDamageDebug:
|
||||
--- !u!1 &7144028055245717426
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5036353294958251943}
|
||||
- component: {fileID: 1424654091887393660}
|
||||
- component: {fileID: 5944958387327624743}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_Body
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5036353294958251943
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7144028055245717426}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.03496194, y: 0.68061024, z: 0.6465633}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9194943108169963881}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &1424654091887393660
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7144028055245717426}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1.6176045, y: 1.1486375, z: 2.1729183}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5944958387327624743
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7144028055245717426}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 1251155925191827369}
|
||||
moduleType: 0
|
||||
damageMultiplier: 1
|
||||
--- !u!1 &7584916029984392318
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 383979774159315010}
|
||||
- component: {fileID: 488353336899379031}
|
||||
- component: {fileID: 7381166954967654850}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_Engine
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &383979774159315010
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7584916029984392318}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.0027641654, y: 0.36941406, z: 2.2160401}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9194943108169963881}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &488353336899379031
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7584916029984392318}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.9705627, y: 0.8614781, z: 0.9360264}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7381166954967654850
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7584916029984392318}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 1251155925191827369}
|
||||
moduleType: 1
|
||||
damageMultiplier: 1.2
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Vehicles.BuggyWheelSetup
|
||||
frontLeftWheelName: F_L
|
||||
frontRightWheelName: F_R
|
||||
rearLeftWheelName: B_L
|
||||
rearRightWheelName: B_R
|
||||
frontLeftColliderName: WheelCollider_FL
|
||||
frontRightColliderName: WheelCollider_FR
|
||||
rearLeftColliderName: WheelCollider_RL
|
||||
rearRightColliderName: WheelCollider_RR
|
||||
radiusMultiplier: 0.5
|
||||
minimumRadius: 0.12
|
||||
suspensionDistance: 0.28
|
||||
wheelMass: 20
|
||||
--- !u!1 &7631946534788984040
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1147,75 +762,6 @@ WheelCollider:
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &8672086566250455480
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6809863583008423600}
|
||||
- component: {fileID: 718638615359961317}
|
||||
- component: {fileID: 813588334617030112}
|
||||
m_Layer: 0
|
||||
m_Name: DamageHitbox_RearRightWheel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6809863583008423600
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8672086566250455480}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.87719953, y: 0.2736943, z: -0.42227113}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9194943108169963881}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!135 &718638615359961317
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8672086566250455480}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 1
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.51565677
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &813588334617030112
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8672086566250455480}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 18014f9b0dee6a9498473614a3e522d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.DamageHitbox
|
||||
damageController: {fileID: 1251155925191827369}
|
||||
moduleType: 5
|
||||
damageMultiplier: 1.1
|
||||
--- !u!1001 &2782393766222725750
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1540,30 +1086,10 @@ PrefabInstance:
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -6652725513331149018, guid: 77247b62c3b41bf4d95ff56d18001c8e, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 2559ea3811cbaba40b8e47dadd6a7b9a, type: 2}
|
||||
- target: {fileID: -4637639816175188393, guid: 77247b62c3b41bf4d95ff56d18001c8e, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
- target: {fileID: 919132149155446097, guid: 77247b62c3b41bf4d95ff56d18001c8e, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Buggy_Model
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3106450020594354929, guid: 77247b62c3b41bf4d95ff56d18001c8e, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
- target: {fileID: 3568648316528729963, guid: 77247b62c3b41bf4d95ff56d18001c8e, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
- target: {fileID: 4460325758958146913, guid: 77247b62c3b41bf4d95ff56d18001c8e, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: b3e837478d85f9e4d804bf34d748b479, type: 2}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
|
||||
@ -1,242 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2619232887283984616
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1973944076214827591}
|
||||
m_Layer: 0
|
||||
m_Name: Muzzle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1973944076214827591
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2619232887283984616}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.13739058, y: 1.8283, z: 0.4653}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 7534708747585793477}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &4284098897898543534
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7934938654016177134}
|
||||
m_Layer: 0
|
||||
m_Name: pivot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7934938654016177134
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4284098897898543534}
|
||||
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: 7534708747585793477}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &6304765452993946667
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4132040617390652714}
|
||||
m_Layer: 0
|
||||
m_Name: GameObject
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4132040617390652714
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6304765452993946667}
|
||||
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: 7789081065401008525}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &7403242231905148394
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3107816258632120782}
|
||||
m_Layer: 0
|
||||
m_Name: GameObject
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &3107816258632120782
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7403242231905148394}
|
||||
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: 623600404198432679}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1001 &8005729781991361070
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: MachineGun_prefab
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects:
|
||||
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
insertIndex: 4
|
||||
addedObject: {fileID: 7934938654016177134}
|
||||
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 1973944076214827591}
|
||||
- targetCorrespondingSourceObject: {fileID: -9006549272062162013, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4132040617390652714}
|
||||
- targetCorrespondingSourceObject: {fileID: -1748125006957259383, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 3107816258632120782}
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 4293301573341011267}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
--- !u!4 &623600404198432679 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -1748125006957259383, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
m_PrefabInstance: {fileID: 8005729781991361070}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &7195477887394346879 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
m_PrefabInstance: {fileID: 8005729781991361070}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &4293301573341011267
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7195477887394346879}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d3422cd562818d448a78afdc747d8166, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::MachineGunWeapon
|
||||
aimPivot: {fileID: 7534708747585793477}
|
||||
muzzle: {fileID: 1973944076214827591}
|
||||
projectilePrefab: {fileID: 5767152562348033804, guid: b53989f2534110c459cbd05c3562861f, type: 3}
|
||||
muzzleFlash: {fileID: 0}
|
||||
targetSearchRadius: 80
|
||||
targetHeightOffset: 1.1
|
||||
aimTurnSpeed: 18
|
||||
fireRate: 12
|
||||
damagePerShot: 8
|
||||
projectileSpeed: 70
|
||||
projectileLifeTime: 2.5
|
||||
spreadAngle: 1.2
|
||||
--- !u!4 &7534708747585793477 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
m_PrefabInstance: {fileID: 8005729781991361070}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!4 &7789081065401008525 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -9006549272062162013, guid: e10ef6ed1df1f9445b52c82622b4ad31, type: 3}
|
||||
m_PrefabInstance: {fileID: 8005729781991361070}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b387817969384b45bb9bc5ceb9fb9e8
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3e661d7a89960a149a0041a0a0ccc044
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,39 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!84 &8400000
|
||||
RenderTexture:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: RearViewMirror
|
||||
m_ImageContentsHash:
|
||||
serializedVersion: 2
|
||||
Hash: 00000000000000000000000000000000
|
||||
m_IsAlphaChannelOptional: 0
|
||||
serializedVersion: 6
|
||||
m_Width: 512
|
||||
m_Height: 192
|
||||
m_AntiAliasing: 2
|
||||
m_MipCount: -1
|
||||
m_DepthStencilFormat: 90
|
||||
m_ColorFormat: 4
|
||||
m_MipMap: 0
|
||||
m_GenerateMips: 1
|
||||
m_SRGB: 1
|
||||
m_UseDynamicScale: 0
|
||||
m_UseDynamicScaleExplicit: 0
|
||||
m_BindMS: 0
|
||||
m_EnableCompatibleFormat: 1
|
||||
m_EnableRandomWrite: 0
|
||||
m_TextureSettings:
|
||||
serializedVersion: 2
|
||||
m_FilterMode: 1
|
||||
m_Aniso: 0
|
||||
m_MipBias: 0
|
||||
m_WrapU: 1
|
||||
m_WrapV: 1
|
||||
m_WrapW: 1
|
||||
m_Dimension: 2
|
||||
m_VolumeDepth: 1
|
||||
m_ShadowSamplingMode: 2
|
||||
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50bdd4d765aea2146ad9c6ecff404b7e
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 8400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2a4579adec0226449b62f9ce4a0edd1b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f71317cc2bc384141adf6b3ba7b14528
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,70 +0,0 @@
|
||||
using RaceFields.Vehicles;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.CameraSystem
|
||||
{
|
||||
[RequireComponent(typeof(Camera))]
|
||||
public sealed class RearViewMirrorCamera : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private Transform target;
|
||||
[SerializeField] private bool autoFindTarget = true;
|
||||
[SerializeField] private float targetSearchInterval = 0.35f;
|
||||
[SerializeField] private Vector3 localOffset = new Vector3(0f, 2.1f, 0.6f);
|
||||
[SerializeField] private float lookUpBias = 0.08f;
|
||||
[SerializeField] private float positionLerp = 18f;
|
||||
[SerializeField] private float rotationLerp = 18f;
|
||||
|
||||
private Camera mirrorCamera;
|
||||
private float nextTargetSearchTime;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
mirrorCamera = GetComponent<Camera>();
|
||||
mirrorCamera.enabled = true;
|
||||
}
|
||||
|
||||
private void LateUpdate()
|
||||
{
|
||||
ResolveTarget();
|
||||
if (target == null)
|
||||
return;
|
||||
|
||||
Vector3 desiredPosition = target.TransformPoint(localOffset);
|
||||
Vector3 lookDirection = -target.forward + Vector3.up * lookUpBias;
|
||||
Quaternion desiredRotation = Quaternion.LookRotation(lookDirection.normalized, Vector3.up);
|
||||
|
||||
float positionStep = 1f - Mathf.Exp(-positionLerp * Time.deltaTime);
|
||||
float rotationStep = 1f - Mathf.Exp(-rotationLerp * Time.deltaTime);
|
||||
transform.position = Vector3.Lerp(transform.position, desiredPosition, positionStep);
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, desiredRotation, rotationStep);
|
||||
}
|
||||
|
||||
public void SetTarget(Transform newTarget, bool snap)
|
||||
{
|
||||
target = newTarget;
|
||||
if (snap && target != null)
|
||||
SnapToTarget();
|
||||
}
|
||||
|
||||
private void SnapToTarget()
|
||||
{
|
||||
transform.position = target.TransformPoint(localOffset);
|
||||
Vector3 lookDirection = -target.forward + Vector3.up * lookUpBias;
|
||||
transform.rotation = Quaternion.LookRotation(lookDirection.normalized, Vector3.up);
|
||||
}
|
||||
|
||||
private void ResolveTarget()
|
||||
{
|
||||
if (target != null || !autoFindTarget)
|
||||
return;
|
||||
|
||||
if (Time.unscaledTime < nextTargetSearchTime)
|
||||
return;
|
||||
|
||||
nextTargetSearchTime = Time.unscaledTime + targetSearchInterval;
|
||||
ArcadeBuggyController controller = Object.FindFirstObjectByType<ArcadeBuggyController>();
|
||||
if (controller != null)
|
||||
SetTarget(controller.transform, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b009635d9fed79946bb577254278da61
|
||||
@ -12,10 +12,8 @@ namespace RaceFields.CameraSystem
|
||||
[SerializeField] private float positionSmoothTime = 0.12f;
|
||||
[SerializeField] private float rotationLerp = 12f;
|
||||
[SerializeField] private bool autoFindTarget = true;
|
||||
[SerializeField] private float targetSearchInterval = 0.25f;
|
||||
|
||||
private Vector3 velocity;
|
||||
private float nextTargetSearchTime;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
@ -49,24 +47,11 @@ namespace RaceFields.CameraSystem
|
||||
velocity = Vector3.zero;
|
||||
}
|
||||
|
||||
public void SetTarget(Transform newTarget, bool snap)
|
||||
{
|
||||
target = newTarget;
|
||||
velocity = Vector3.zero;
|
||||
|
||||
if (snap)
|
||||
SnapToTarget();
|
||||
}
|
||||
|
||||
private void ResolveTarget()
|
||||
{
|
||||
if (target != null || !autoFindTarget)
|
||||
return;
|
||||
|
||||
if (Time.unscaledTime < nextTargetSearchTime)
|
||||
return;
|
||||
|
||||
nextTargetSearchTime = Time.unscaledTime + targetSearchInterval;
|
||||
ArcadeBuggyController controller = Object.FindFirstObjectByType<ArcadeBuggyController>();
|
||||
if (controller != null)
|
||||
target = controller.transform;
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using RaceFields.Damage.VehicleDamage;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Damage
|
||||
{
|
||||
public sealed class BladeDamageSource : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private float damagePerSecond = 80f;
|
||||
[SerializeField] private float tickInterval = 0.2f;
|
||||
[SerializeField] private float activationDelay = 0.75f;
|
||||
|
||||
private readonly Dictionary<DamageHitbox, float> nextDamageTimes = new Dictionary<DamageHitbox, float>();
|
||||
private float activeAtTime;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
activeAtTime = Time.time + activationDelay;
|
||||
nextDamageTimes.Clear();
|
||||
}
|
||||
|
||||
private void OnTriggerStay(Collider other)
|
||||
{
|
||||
if (Time.time < activeAtTime)
|
||||
return;
|
||||
|
||||
DamageHitbox hitbox = other.GetComponentInParent<DamageHitbox>();
|
||||
if (hitbox == null)
|
||||
return;
|
||||
|
||||
float time = Time.time;
|
||||
if (nextDamageTimes.TryGetValue(hitbox, out float nextTime) && time < nextTime)
|
||||
return;
|
||||
|
||||
nextDamageTimes[hitbox] = time + tickInterval;
|
||||
Vector3 direction = (other.transform.position - transform.position).normalized;
|
||||
float damage = damagePerSecond * tickInterval;
|
||||
hitbox.ApplyDamage(new DamageHit(damage, DamageType.Blade, other.ClosestPoint(transform.position), direction, gameObject));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5483916f7ebff2c448991626172509ea
|
||||
@ -1,29 +0,0 @@
|
||||
using RaceFields.Damage.VehicleDamage;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Damage
|
||||
{
|
||||
[RequireComponent(typeof(Rigidbody))]
|
||||
public sealed class CollisionDamageSource : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private float minRelativeSpeed = 7f;
|
||||
[SerializeField] private float damagePerSpeed = 4f;
|
||||
[SerializeField] private float maxDamage = 85f;
|
||||
[SerializeField] private DamageType damageType = DamageType.Collision;
|
||||
|
||||
private void OnCollisionEnter(Collision collision)
|
||||
{
|
||||
float relativeSpeed = collision.relativeVelocity.magnitude;
|
||||
if (relativeSpeed < minRelativeSpeed)
|
||||
return;
|
||||
|
||||
DamageHitbox hitbox = collision.collider.GetComponentInParent<DamageHitbox>();
|
||||
if (hitbox == null)
|
||||
return;
|
||||
|
||||
ContactPoint contact = collision.GetContact(0);
|
||||
float amount = Mathf.Min(maxDamage, (relativeSpeed - minRelativeSpeed) * damagePerSpeed);
|
||||
hitbox.ApplyDamage(new DamageHit(amount, damageType, contact.point, collision.relativeVelocity.normalized, gameObject));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 27d1127628814c242afa8c0cafd1d278
|
||||
@ -1,46 +0,0 @@
|
||||
namespace RaceFields.Damage
|
||||
{
|
||||
public enum DamageType
|
||||
{
|
||||
Collision,
|
||||
Blade,
|
||||
Projectile,
|
||||
Debug
|
||||
}
|
||||
|
||||
public enum VehicleModuleType
|
||||
{
|
||||
Body,
|
||||
Engine,
|
||||
FrontLeftWheel,
|
||||
FrontRightWheel,
|
||||
RearLeftWheel,
|
||||
RearRightWheel
|
||||
}
|
||||
|
||||
public enum VehicleModuleState
|
||||
{
|
||||
Healthy,
|
||||
Damaged,
|
||||
Destroyed,
|
||||
Detached
|
||||
}
|
||||
|
||||
public readonly struct DamageHit
|
||||
{
|
||||
public readonly float Amount;
|
||||
public readonly DamageType Type;
|
||||
public readonly UnityEngine.Vector3 Point;
|
||||
public readonly UnityEngine.Vector3 Direction;
|
||||
public readonly UnityEngine.GameObject Source;
|
||||
|
||||
public DamageHit(float amount, DamageType type, UnityEngine.Vector3 point, UnityEngine.Vector3 direction, UnityEngine.GameObject source)
|
||||
{
|
||||
Amount = amount;
|
||||
Type = type;
|
||||
Point = point;
|
||||
Direction = direction;
|
||||
Source = source;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: afdd389aa3e96af428bc9a2dc1a28b50
|
||||
@ -1,33 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Damage
|
||||
{
|
||||
public sealed class SimpleDamageReceiver : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private float maxHealth = 100f;
|
||||
[SerializeField] private bool destroyOnDeath = true;
|
||||
[SerializeField] private float destroyDelay;
|
||||
|
||||
public float CurrentHealth { get; private set; }
|
||||
public bool IsDead { get; private set; }
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
CurrentHealth = Mathf.Max(1f, maxHealth);
|
||||
}
|
||||
|
||||
public void ApplyDamage(float amount, Vector3 point, Vector3 direction, GameObject source)
|
||||
{
|
||||
if (IsDead)
|
||||
return;
|
||||
|
||||
CurrentHealth = Mathf.Max(0f, CurrentHealth - Mathf.Max(0f, amount));
|
||||
if (CurrentHealth > 0f)
|
||||
return;
|
||||
|
||||
IsDead = true;
|
||||
if (destroyOnDeath)
|
||||
Destroy(gameObject, destroyDelay);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b84a36537942ca148a8bc4a133d96e93
|
||||
@ -1,28 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Damage.VehicleDamage
|
||||
{
|
||||
public sealed class DamageHitbox : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private VehicleDamageController damageController;
|
||||
[SerializeField] private VehicleModuleType moduleType = VehicleModuleType.Body;
|
||||
[SerializeField] private float damageMultiplier = 1f;
|
||||
|
||||
public VehicleModuleType ModuleType => moduleType;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (damageController == null)
|
||||
damageController = GetComponentInParent<VehicleDamageController>();
|
||||
}
|
||||
|
||||
public void ApplyDamage(DamageHit hit)
|
||||
{
|
||||
if (damageController == null)
|
||||
return;
|
||||
|
||||
DamageHit scaledHit = new DamageHit(hit.Amount * damageMultiplier, hit.Type, hit.Point, hit.Direction, hit.Source);
|
||||
damageController.ApplyDamage(moduleType, scaledHit);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 18014f9b0dee6a9498473614a3e522d8
|
||||
@ -1,384 +0,0 @@
|
||||
using System;
|
||||
using RaceFields.Vehicles;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Damage.VehicleDamage
|
||||
{
|
||||
[RequireComponent(typeof(Rigidbody))]
|
||||
[RequireComponent(typeof(ArcadeBuggyController))]
|
||||
public sealed class VehicleDamageController : MonoBehaviour
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class VehicleModule
|
||||
{
|
||||
[SerializeField] private VehicleModuleType moduleType = VehicleModuleType.Body;
|
||||
[SerializeField] private string displayName = "Module";
|
||||
[SerializeField] private float maxHealth = 100f;
|
||||
[SerializeField, Range(0f, 1f)] private float damagedHealthRatio = 0.5f;
|
||||
[SerializeField] private WheelSlot wheelSlot;
|
||||
[SerializeField] private bool detachWheelVisualOnDestroyed;
|
||||
[SerializeField] private float detachImpulse = 2f;
|
||||
[SerializeField] private float currentHealth;
|
||||
[SerializeField] private VehicleModuleState state = VehicleModuleState.Healthy;
|
||||
|
||||
public VehicleModuleType ModuleType => moduleType;
|
||||
public string DisplayName => displayName;
|
||||
public float MaxHealth => maxHealth;
|
||||
public float CurrentHealth => currentHealth;
|
||||
public VehicleModuleState State => state;
|
||||
public WheelSlot WheelSlot => wheelSlot;
|
||||
public bool DetachWheelVisualOnDestroyed => detachWheelVisualOnDestroyed;
|
||||
public float DetachImpulse => detachImpulse;
|
||||
public float NormalizedHealth => maxHealth <= 0f ? 0f : Mathf.Clamp01(currentHealth / maxHealth);
|
||||
|
||||
public VehicleModule(VehicleModuleType moduleType, string displayName, float maxHealth)
|
||||
{
|
||||
this.moduleType = moduleType;
|
||||
this.displayName = displayName;
|
||||
this.maxHealth = maxHealth;
|
||||
}
|
||||
|
||||
public VehicleModule WithWheel(WheelSlot slot, bool detachVisual)
|
||||
{
|
||||
wheelSlot = slot;
|
||||
detachWheelVisualOnDestroyed = detachVisual;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void ResetHealth()
|
||||
{
|
||||
currentHealth = Mathf.Max(1f, maxHealth);
|
||||
state = VehicleModuleState.Healthy;
|
||||
}
|
||||
|
||||
public bool ApplyDamage(float amount)
|
||||
{
|
||||
if (state == VehicleModuleState.Destroyed || state == VehicleModuleState.Detached)
|
||||
return false;
|
||||
|
||||
VehicleModuleState previous = state;
|
||||
currentHealth = Mathf.Max(0f, currentHealth - Mathf.Max(0f, amount));
|
||||
state = ResolveState();
|
||||
return previous != state;
|
||||
}
|
||||
|
||||
public void MarkDetached()
|
||||
{
|
||||
currentHealth = 0f;
|
||||
state = VehicleModuleState.Detached;
|
||||
}
|
||||
|
||||
private VehicleModuleState ResolveState()
|
||||
{
|
||||
if (currentHealth <= 0f)
|
||||
return VehicleModuleState.Destroyed;
|
||||
|
||||
return NormalizedHealth <= damagedHealthRatio
|
||||
? VehicleModuleState.Damaged
|
||||
: VehicleModuleState.Healthy;
|
||||
}
|
||||
}
|
||||
|
||||
[Header("Modules")]
|
||||
[SerializeField] private VehicleModule[] moduleHealth;
|
||||
|
||||
[Header("Startup")]
|
||||
[SerializeField] private float spawnGraceTime = 1f;
|
||||
|
||||
[Header("Collision Damage")]
|
||||
[SerializeField] private float minCollisionSpeed = 11f;
|
||||
[SerializeField] private float collisionDamagePerSpeed = 4.5f;
|
||||
[SerializeField] private float maxCollisionDamage = 95f;
|
||||
[SerializeField] private float collisionCooldown = 0.25f;
|
||||
|
||||
[Header("Landing Damage")]
|
||||
[SerializeField] private float minAirTimeForLandingDamage = 0.45f;
|
||||
[SerializeField] private float minLandingDownSpeed = 9f;
|
||||
[SerializeField] private float landingDamagePerSpeed = 4f;
|
||||
[SerializeField] private float maxLandingDamage = 75f;
|
||||
[SerializeField, Range(0f, 1f)] private float landingWheelDamageShare = 0.65f;
|
||||
[SerializeField, Range(0f, 1f)] private float landingBodyDamageShare = 0.35f;
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField] private bool logDamage;
|
||||
[SerializeField] private string lastDamageDebug;
|
||||
|
||||
public event Action<VehicleModule> ModuleStateChanged;
|
||||
|
||||
public VehicleModule[] Modules => moduleHealth;
|
||||
public string LastDamageDebug => lastDamageDebug;
|
||||
|
||||
private ArcadeBuggyController buggyController;
|
||||
private Rigidbody body;
|
||||
private float ignoreDamageUntil;
|
||||
private float nextCollisionDamageTime;
|
||||
private WheelImpactState frontLeftState;
|
||||
private WheelImpactState frontRightState;
|
||||
private WheelImpactState rearLeftState;
|
||||
private WheelImpactState rearRightState;
|
||||
|
||||
private struct WheelImpactState
|
||||
{
|
||||
public bool WasGrounded;
|
||||
public float AirborneStartTime;
|
||||
public float MaxDownSpeed;
|
||||
}
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
moduleHealth = CreateDefaultModules();
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
buggyController = GetComponent<ArcadeBuggyController>();
|
||||
body = GetComponent<Rigidbody>();
|
||||
EnsureModules();
|
||||
ResetModuleHealth();
|
||||
ignoreDamageUntil = Time.time + spawnGraceTime;
|
||||
frontLeftState.WasGrounded = true;
|
||||
frontRightState.WasGrounded = true;
|
||||
rearLeftState.WasGrounded = true;
|
||||
rearRightState.WasGrounded = true;
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (Time.time < ignoreDamageUntil)
|
||||
return;
|
||||
|
||||
UpdateWheelLanding(WheelSlot.FrontLeft, VehicleModuleType.FrontLeftWheel, ref frontLeftState);
|
||||
UpdateWheelLanding(WheelSlot.FrontRight, VehicleModuleType.FrontRightWheel, ref frontRightState);
|
||||
UpdateWheelLanding(WheelSlot.RearLeft, VehicleModuleType.RearLeftWheel, ref rearLeftState);
|
||||
UpdateWheelLanding(WheelSlot.RearRight, VehicleModuleType.RearRightWheel, ref rearRightState);
|
||||
}
|
||||
|
||||
private void OnCollisionEnter(Collision collision)
|
||||
{
|
||||
if (Time.time < ignoreDamageUntil || Time.time < nextCollisionDamageTime)
|
||||
return;
|
||||
|
||||
if (collision.contactCount == 0)
|
||||
return;
|
||||
|
||||
ContactPoint contact = collision.GetContact(0);
|
||||
float impactSpeed = Mathf.Abs(Vector3.Dot(collision.relativeVelocity, contact.normal));
|
||||
if (impactSpeed < minCollisionSpeed)
|
||||
return;
|
||||
|
||||
VehicleModuleType moduleType = ResolveImpactModule(contact.point);
|
||||
float damage = Mathf.Min(maxCollisionDamage, (impactSpeed - minCollisionSpeed) * collisionDamagePerSpeed);
|
||||
ApplyDamage(moduleType, new DamageHit(damage, DamageType.Collision, contact.point, collision.relativeVelocity.normalized, gameObject));
|
||||
nextCollisionDamageTime = Time.time + collisionCooldown;
|
||||
}
|
||||
|
||||
public void ApplyDamage(VehicleModuleType moduleType, DamageHit hit)
|
||||
{
|
||||
VehicleModule module = GetModule(moduleType);
|
||||
if (module == null)
|
||||
return;
|
||||
|
||||
bool changed = module.ApplyDamage(hit.Amount);
|
||||
lastDamageDebug = $"{hit.Type}: {hit.Amount:F1} -> {moduleType}";
|
||||
|
||||
if (module.State == VehicleModuleState.Destroyed && IsWheelModule(module.ModuleType))
|
||||
DisableDestroyedWheel(module);
|
||||
|
||||
if (logDamage)
|
||||
Debug.Log($"{name} {lastDamageDebug}", this);
|
||||
|
||||
if (changed)
|
||||
ModuleStateChanged?.Invoke(module);
|
||||
}
|
||||
|
||||
public VehicleModule GetModule(VehicleModuleType moduleType)
|
||||
{
|
||||
EnsureModules();
|
||||
|
||||
for (int i = 0; i < moduleHealth.Length; i++)
|
||||
{
|
||||
if (moduleHealth[i] != null && moduleHealth[i].ModuleType == moduleType)
|
||||
return moduleHealth[i];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public VehicleModuleState GetModuleState(VehicleModuleType moduleType)
|
||||
{
|
||||
VehicleModule module = GetModule(moduleType);
|
||||
return module != null ? module.State : VehicleModuleState.Healthy;
|
||||
}
|
||||
|
||||
public void RepairAll()
|
||||
{
|
||||
EnsureModules();
|
||||
|
||||
for (int i = 0; i < moduleHealth.Length; i++)
|
||||
{
|
||||
if (moduleHealth[i] == null)
|
||||
continue;
|
||||
|
||||
moduleHealth[i].ResetHealth();
|
||||
ModuleStateChanged?.Invoke(moduleHealth[i]);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateWheelLanding(WheelSlot slot, VehicleModuleType moduleType, ref WheelImpactState state)
|
||||
{
|
||||
WheelCollider wheel = buggyController.GetWheelCollider(slot);
|
||||
if (wheel == null || !wheel.enabled)
|
||||
return;
|
||||
|
||||
bool grounded = wheel.isGrounded;
|
||||
if (!grounded)
|
||||
{
|
||||
if (state.WasGrounded)
|
||||
{
|
||||
state.AirborneStartTime = Time.time;
|
||||
state.MaxDownSpeed = 0f;
|
||||
}
|
||||
|
||||
state.WasGrounded = false;
|
||||
Vector3 gravityDirection = Physics.gravity.sqrMagnitude > 0f ? -Physics.gravity.normalized : Vector3.down;
|
||||
float downSpeed = Vector3.Dot(body.GetPointVelocity(wheel.transform.position), gravityDirection);
|
||||
state.MaxDownSpeed = Mathf.Max(state.MaxDownSpeed, Mathf.Max(0f, downSpeed));
|
||||
return;
|
||||
}
|
||||
|
||||
if (state.WasGrounded)
|
||||
return;
|
||||
|
||||
float airTime = Time.time - state.AirborneStartTime;
|
||||
float maxDownSpeed = state.MaxDownSpeed;
|
||||
state.WasGrounded = true;
|
||||
state.AirborneStartTime = 0f;
|
||||
state.MaxDownSpeed = 0f;
|
||||
|
||||
if (airTime < minAirTimeForLandingDamage || maxDownSpeed < minLandingDownSpeed)
|
||||
return;
|
||||
|
||||
float totalDamage = Mathf.Min(maxLandingDamage, (maxDownSpeed - minLandingDownSpeed) * landingDamagePerSpeed);
|
||||
ApplyDamage(moduleType, new DamageHit(totalDamage * landingWheelDamageShare, DamageType.Collision, wheel.transform.position, Vector3.down, gameObject));
|
||||
|
||||
float bodyDamage = totalDamage * landingBodyDamageShare * 0.25f;
|
||||
if (bodyDamage > 0f)
|
||||
ApplyDamage(VehicleModuleType.Body, new DamageHit(bodyDamage, DamageType.Collision, wheel.transform.position, Vector3.down, gameObject));
|
||||
}
|
||||
|
||||
private VehicleModuleType ResolveImpactModule(Vector3 worldPoint)
|
||||
{
|
||||
if (TryResolveWheelImpact(worldPoint, out WheelSlot closestWheel))
|
||||
return WheelSlotToModule(closestWheel);
|
||||
|
||||
Vector3 localPoint = transform.InverseTransformPoint(worldPoint);
|
||||
return localPoint.z > 0.65f ? VehicleModuleType.Engine : VehicleModuleType.Body;
|
||||
}
|
||||
|
||||
private bool TryResolveWheelImpact(Vector3 worldPoint, out WheelSlot closestWheel)
|
||||
{
|
||||
closestWheel = WheelSlot.FrontLeft;
|
||||
float bestDistance = float.MaxValue;
|
||||
bool found = false;
|
||||
|
||||
CheckWheelDistance(WheelSlot.FrontLeft, worldPoint, ref closestWheel, ref bestDistance, ref found);
|
||||
CheckWheelDistance(WheelSlot.FrontRight, worldPoint, ref closestWheel, ref bestDistance, ref found);
|
||||
CheckWheelDistance(WheelSlot.RearLeft, worldPoint, ref closestWheel, ref bestDistance, ref found);
|
||||
CheckWheelDistance(WheelSlot.RearRight, worldPoint, ref closestWheel, ref bestDistance, ref found);
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
private void CheckWheelDistance(WheelSlot slot, Vector3 worldPoint, ref WheelSlot closestWheel, ref float bestDistance, ref bool found)
|
||||
{
|
||||
WheelCollider wheel = buggyController.GetWheelCollider(slot);
|
||||
if (wheel == null || !wheel.enabled)
|
||||
return;
|
||||
|
||||
float limit = Mathf.Max(0.45f, wheel.radius * 1.8f);
|
||||
float distance = Vector3.Distance(worldPoint, wheel.transform.position);
|
||||
if (distance > limit || distance >= bestDistance)
|
||||
return;
|
||||
|
||||
closestWheel = slot;
|
||||
bestDistance = distance;
|
||||
found = true;
|
||||
}
|
||||
|
||||
private void DisableDestroyedWheel(VehicleModule module)
|
||||
{
|
||||
buggyController.SetWheelEnabled(module.WheelSlot, false);
|
||||
|
||||
if (!module.DetachWheelVisualOnDestroyed)
|
||||
return;
|
||||
|
||||
Transform visual = buggyController.GetWheelVisual(module.WheelSlot);
|
||||
if (visual == null)
|
||||
return;
|
||||
|
||||
visual.SetParent(null, true);
|
||||
|
||||
Collider wheelCollider = visual.GetComponent<Collider>();
|
||||
if (wheelCollider == null)
|
||||
wheelCollider = visual.gameObject.AddComponent<SphereCollider>();
|
||||
|
||||
Rigidbody wheelBody = visual.GetComponent<Rigidbody>();
|
||||
if (wheelBody == null)
|
||||
wheelBody = visual.gameObject.AddComponent<Rigidbody>();
|
||||
|
||||
wheelBody.mass = 18f;
|
||||
wheelBody.interpolation = RigidbodyInterpolation.Interpolate;
|
||||
wheelBody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
|
||||
wheelBody.AddForce((visual.right + Vector3.up * 0.35f) * module.DetachImpulse, ForceMode.Impulse);
|
||||
module.MarkDetached();
|
||||
}
|
||||
|
||||
private void EnsureModules()
|
||||
{
|
||||
if (moduleHealth == null || moduleHealth.Length == 0)
|
||||
moduleHealth = CreateDefaultModules();
|
||||
}
|
||||
|
||||
private void ResetModuleHealth()
|
||||
{
|
||||
for (int i = 0; i < moduleHealth.Length; i++)
|
||||
{
|
||||
if (moduleHealth[i] != null)
|
||||
moduleHealth[i].ResetHealth();
|
||||
}
|
||||
}
|
||||
|
||||
private static VehicleModule[] CreateDefaultModules()
|
||||
{
|
||||
return new[]
|
||||
{
|
||||
new VehicleModule(VehicleModuleType.Body, "Body", 180f),
|
||||
new VehicleModule(VehicleModuleType.Engine, "Engine", 120f),
|
||||
new VehicleModule(VehicleModuleType.FrontLeftWheel, "Front Left Wheel", 70f).WithWheel(WheelSlot.FrontLeft, true),
|
||||
new VehicleModule(VehicleModuleType.FrontRightWheel, "Front Right Wheel", 70f).WithWheel(WheelSlot.FrontRight, true),
|
||||
new VehicleModule(VehicleModuleType.RearLeftWheel, "Rear Left Wheel", 70f).WithWheel(WheelSlot.RearLeft, true),
|
||||
new VehicleModule(VehicleModuleType.RearRightWheel, "Rear Right Wheel", 70f).WithWheel(WheelSlot.RearRight, true)
|
||||
};
|
||||
}
|
||||
|
||||
private static bool IsWheelModule(VehicleModuleType moduleType)
|
||||
{
|
||||
return moduleType == VehicleModuleType.FrontLeftWheel ||
|
||||
moduleType == VehicleModuleType.FrontRightWheel ||
|
||||
moduleType == VehicleModuleType.RearLeftWheel ||
|
||||
moduleType == VehicleModuleType.RearRightWheel;
|
||||
}
|
||||
|
||||
private static VehicleModuleType WheelSlotToModule(WheelSlot slot)
|
||||
{
|
||||
return slot switch
|
||||
{
|
||||
WheelSlot.FrontLeft => VehicleModuleType.FrontLeftWheel,
|
||||
WheelSlot.FrontRight => VehicleModuleType.FrontRightWheel,
|
||||
WheelSlot.RearLeft => VehicleModuleType.RearLeftWheel,
|
||||
WheelSlot.RearRight => VehicleModuleType.RearRightWheel,
|
||||
_ => VehicleModuleType.Body
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 23a901881a64d704fbdbdf8716ec0229
|
||||
@ -1,5 +1,4 @@
|
||||
using RaceFields.CameraSystem;
|
||||
using RaceFields.Damage.VehicleDamage;
|
||||
using RaceFields.Vehicles;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
@ -25,7 +24,7 @@ namespace RaceFields.EditorTools
|
||||
EnsureComponent<Rigidbody>(root, ConfigureBody);
|
||||
EnsureComponent<BoxCollider>(root, collider => ConfigureBodyCollider(root, collider));
|
||||
ArcadeBuggyController controller = EnsureComponent<ArcadeBuggyController>(root, null);
|
||||
EnsureComponent<VehicleDamageController>(root, null);
|
||||
BuggyWheelSetup wheelSetup = EnsureComponent<BuggyWheelSetup>(root, ConfigureWheelSetup);
|
||||
|
||||
SetupWheel(root.transform, "Wheel_FL", "WheelCollider_FL");
|
||||
SetupWheel(root.transform, "Wheel_FR", "WheelCollider_FR");
|
||||
@ -35,6 +34,8 @@ namespace RaceFields.EditorTools
|
||||
SetupEffects(root.transform, controller);
|
||||
SetupSounds(root.transform, controller);
|
||||
|
||||
wheelSetup.AlignAllWheels();
|
||||
|
||||
PrefabUtility.SaveAsPrefabAsset(root, BuggyPrefabPath);
|
||||
}
|
||||
finally
|
||||
@ -171,6 +172,20 @@ namespace RaceFields.EditorTools
|
||||
wheelCollider.suspensionSpring = spring;
|
||||
}
|
||||
|
||||
private static void ConfigureWheelSetup(BuggyWheelSetup setup)
|
||||
{
|
||||
SerializedObject serializedSetup = new SerializedObject(setup);
|
||||
serializedSetup.FindProperty("frontLeftWheelName").stringValue = "Wheel_FL";
|
||||
serializedSetup.FindProperty("frontRightWheelName").stringValue = "Wheel_FR";
|
||||
serializedSetup.FindProperty("rearLeftWheelName").stringValue = "Wheel_RL";
|
||||
serializedSetup.FindProperty("rearRightWheelName").stringValue = "Wheel_RR";
|
||||
serializedSetup.FindProperty("frontLeftColliderName").stringValue = "WheelCollider_FL";
|
||||
serializedSetup.FindProperty("frontRightColliderName").stringValue = "WheelCollider_FR";
|
||||
serializedSetup.FindProperty("rearLeftColliderName").stringValue = "WheelCollider_RL";
|
||||
serializedSetup.FindProperty("rearRightColliderName").stringValue = "WheelCollider_RR";
|
||||
serializedSetup.ApplyModifiedPropertiesWithoutUndo();
|
||||
}
|
||||
|
||||
private static void SetupControllerReferences(Transform root, ArcadeBuggyController controller)
|
||||
{
|
||||
SerializedObject serializedController = new SerializedObject(controller);
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.GameFlow
|
||||
{
|
||||
public enum SelectedGameMode
|
||||
{
|
||||
Arena,
|
||||
SurvivalRace
|
||||
}
|
||||
|
||||
public static class GameSelectionState
|
||||
{
|
||||
public static GameObject VehiclePrefab { get; private set; }
|
||||
public static string VehicleName { get; private set; }
|
||||
public static SelectedGameMode GameMode { get; private set; }
|
||||
public static string MapSceneName { get; private set; }
|
||||
|
||||
public static void SetSelection(GameObject vehiclePrefab, string vehicleName, SelectedGameMode gameMode, string mapSceneName)
|
||||
{
|
||||
VehiclePrefab = vehiclePrefab;
|
||||
VehicleName = vehicleName;
|
||||
GameMode = gameMode;
|
||||
MapSceneName = mapSceneName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3fae561f4c80ba7459a48addd977d04d
|
||||
@ -1,62 +0,0 @@
|
||||
using RaceFields.CameraSystem;
|
||||
using RaceFields.Damage.VehicleDamage;
|
||||
using RaceFields.UI.HUD;
|
||||
using RaceFields.Vehicles;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.GameFlow
|
||||
{
|
||||
public sealed class SelectedVehicleSpawner : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private Transform spawnPoint;
|
||||
[SerializeField] private GameObject fallbackVehiclePrefab;
|
||||
[SerializeField] private bool destroyExistingVehicles = true;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
GameObject prefab = GameSelectionState.VehiclePrefab != null ? GameSelectionState.VehiclePrefab : fallbackVehiclePrefab;
|
||||
if (prefab == null)
|
||||
return;
|
||||
|
||||
if (destroyExistingVehicles)
|
||||
DestroyExistingVehicleControllers();
|
||||
|
||||
Transform targetSpawn = spawnPoint != null ? spawnPoint : transform;
|
||||
GameObject vehicle = Instantiate(prefab, targetSpawn.position, targetSpawn.rotation);
|
||||
AssignCameraTarget(vehicle.transform);
|
||||
AssignDamageHud(vehicle);
|
||||
}
|
||||
|
||||
private static void AssignCameraTarget(Transform vehicle)
|
||||
{
|
||||
BuggyFollowCamera followCamera = FindAnyObjectByType<BuggyFollowCamera>();
|
||||
if (followCamera != null)
|
||||
followCamera.SetTarget(vehicle, true);
|
||||
|
||||
RearViewMirrorCamera rearViewCamera = FindAnyObjectByType<RearViewMirrorCamera>();
|
||||
if (rearViewCamera != null)
|
||||
rearViewCamera.SetTarget(vehicle, true);
|
||||
}
|
||||
|
||||
private static void AssignDamageHud(GameObject vehicle)
|
||||
{
|
||||
VehicleDamageController damageController = vehicle.GetComponentInChildren<VehicleDamageController>();
|
||||
if (damageController == null)
|
||||
return;
|
||||
|
||||
VehicleDamageHud damageHud = FindAnyObjectByType<VehicleDamageHud>();
|
||||
if (damageHud != null)
|
||||
damageHud.Bind(damageController);
|
||||
}
|
||||
|
||||
private static void DestroyExistingVehicleControllers()
|
||||
{
|
||||
ArcadeBuggyController[] existingVehicles = FindObjectsByType<ArcadeBuggyController>(FindObjectsInactive.Exclude);
|
||||
for (int i = 0; i < existingVehicles.Length; i++)
|
||||
{
|
||||
if (existingVehicles[i] != null)
|
||||
Destroy(existingVehicles[i].gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 387521603e66df147a3042280acf4f66
|
||||
@ -1,384 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
#if ENABLE_INPUT_SYSTEM
|
||||
using UnityEngine.InputSystem;
|
||||
#endif
|
||||
|
||||
namespace RaceFields.GameFlow
|
||||
{
|
||||
public sealed class SelectionMenuController : MonoBehaviour
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class VehicleOption
|
||||
{
|
||||
public string displayName = "BUGGY";
|
||||
public GameObject prefab;
|
||||
public Vector3 previewRotation = new Vector3(0f, 145f, 0f);
|
||||
public float previewScale = 1f;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public sealed class MapOption
|
||||
{
|
||||
public string displayName = "DEMO SCENE";
|
||||
public string sceneName = "Demo Scene";
|
||||
public SelectedGameMode mode = SelectedGameMode.Arena;
|
||||
}
|
||||
|
||||
private enum Step
|
||||
{
|
||||
Vehicle,
|
||||
Mode,
|
||||
Map
|
||||
}
|
||||
|
||||
[Header("Content")]
|
||||
[SerializeField] private VehicleOption[] vehicles;
|
||||
[SerializeField] private MapOption[] maps;
|
||||
|
||||
[Header("Preview")]
|
||||
[SerializeField] private Transform previewRoot;
|
||||
[SerializeField] private float previewRotationSpeed = 28f;
|
||||
|
||||
[Header("Panels")]
|
||||
[SerializeField] private GameObject vehiclePanel;
|
||||
[SerializeField] private GameObject modePanel;
|
||||
[SerializeField] private GameObject mapPanel;
|
||||
|
||||
[Header("Texts")]
|
||||
[SerializeField] private Text titleText;
|
||||
[SerializeField] private Text subtitleText;
|
||||
[SerializeField] private Text vehicleNameText;
|
||||
[SerializeField] private Text vehicleClassText;
|
||||
[SerializeField] private Text[] modeLabels;
|
||||
[SerializeField] private Text[] mapLabels;
|
||||
|
||||
private readonly string[] modeNames =
|
||||
{
|
||||
"\u0410\u0420\u0415\u041d\u0410",
|
||||
"\u0413\u041e\u041d\u041a\u0410 \u041d\u0410 \u0412\u042b\u0416\u0418\u0412\u0410\u041d\u0418\u0415"
|
||||
};
|
||||
|
||||
private Step currentStep;
|
||||
private GameObject currentPreview;
|
||||
private int vehicleIndex;
|
||||
private int modeIndex;
|
||||
private int mapIndex;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (previewRoot == null)
|
||||
previewRoot = transform;
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
currentStep = Step.Vehicle;
|
||||
ShowVehicle(vehicleIndex);
|
||||
RefreshUi();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
RotatePreview();
|
||||
HandleKeyboard();
|
||||
}
|
||||
|
||||
public void SelectPrevious()
|
||||
{
|
||||
MoveSelection(-1);
|
||||
}
|
||||
|
||||
public void SelectNext()
|
||||
{
|
||||
MoveSelection(1);
|
||||
}
|
||||
|
||||
public void Confirm()
|
||||
{
|
||||
if (currentStep == Step.Vehicle)
|
||||
{
|
||||
currentStep = Step.Mode;
|
||||
RefreshUi();
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentStep == Step.Mode)
|
||||
{
|
||||
mapIndex = 0;
|
||||
currentStep = Step.Map;
|
||||
RefreshUi();
|
||||
return;
|
||||
}
|
||||
|
||||
StartSelectedMap();
|
||||
}
|
||||
|
||||
public void ChooseArena()
|
||||
{
|
||||
modeIndex = 0;
|
||||
mapIndex = 0;
|
||||
currentStep = Step.Map;
|
||||
RefreshUi();
|
||||
}
|
||||
|
||||
public void ChooseSurvivalRace()
|
||||
{
|
||||
modeIndex = 1;
|
||||
mapIndex = 0;
|
||||
currentStep = Step.Map;
|
||||
RefreshUi();
|
||||
}
|
||||
|
||||
public void ChooseCurrentMap()
|
||||
{
|
||||
StartSelectedMap();
|
||||
}
|
||||
|
||||
public void Back()
|
||||
{
|
||||
if (currentStep == Step.Map)
|
||||
currentStep = Step.Mode;
|
||||
else if (currentStep == Step.Mode)
|
||||
currentStep = Step.Vehicle;
|
||||
|
||||
RefreshUi();
|
||||
}
|
||||
|
||||
private void HandleKeyboard()
|
||||
{
|
||||
#if ENABLE_INPUT_SYSTEM
|
||||
Keyboard keyboard = Keyboard.current;
|
||||
if (keyboard == null)
|
||||
return;
|
||||
|
||||
if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame)
|
||||
SelectPrevious();
|
||||
else if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame)
|
||||
SelectNext();
|
||||
|
||||
if (keyboard.spaceKey.wasPressedThisFrame || keyboard.enterKey.wasPressedThisFrame || keyboard.numpadEnterKey.wasPressedThisFrame)
|
||||
Confirm();
|
||||
else if (keyboard.escapeKey.wasPressedThisFrame || keyboard.backspaceKey.wasPressedThisFrame)
|
||||
Back();
|
||||
#endif
|
||||
}
|
||||
|
||||
private void MoveSelection(int direction)
|
||||
{
|
||||
if (currentStep == Step.Vehicle)
|
||||
{
|
||||
int length = vehicles != null ? vehicles.Length : 0;
|
||||
vehicleIndex = Wrap(vehicleIndex + direction, length);
|
||||
ShowVehicle(vehicleIndex);
|
||||
}
|
||||
else if (currentStep == Step.Mode)
|
||||
{
|
||||
modeIndex = Wrap(modeIndex + direction, modeNames.Length);
|
||||
}
|
||||
else if (currentStep == Step.Map)
|
||||
{
|
||||
int length = GetMapCountForCurrentMode();
|
||||
mapIndex = Wrap(mapIndex + direction, length);
|
||||
}
|
||||
|
||||
RefreshUi();
|
||||
}
|
||||
|
||||
private void ShowVehicle(int index)
|
||||
{
|
||||
if (currentPreview != null)
|
||||
Destroy(currentPreview);
|
||||
|
||||
if (vehicles == null || vehicles.Length == 0 || vehicles[index] == null || vehicles[index].prefab == null)
|
||||
return;
|
||||
|
||||
VehicleOption option = vehicles[index];
|
||||
currentPreview = Instantiate(option.prefab, previewRoot.position, Quaternion.Euler(option.previewRotation), previewRoot);
|
||||
currentPreview.name = "Runtime Preview - " + option.displayName;
|
||||
currentPreview.transform.localPosition = Vector3.zero;
|
||||
currentPreview.transform.localRotation = Quaternion.Euler(option.previewRotation);
|
||||
currentPreview.transform.localScale = Vector3.one * Mathf.Max(0.01f, option.previewScale);
|
||||
DisableGameplayComponents(currentPreview);
|
||||
}
|
||||
|
||||
private void DisableGameplayComponents(GameObject root)
|
||||
{
|
||||
Rigidbody[] bodies = root.GetComponentsInChildren<Rigidbody>(true);
|
||||
for (int i = 0; i < bodies.Length; i++)
|
||||
{
|
||||
bodies[i].isKinematic = true;
|
||||
bodies[i].useGravity = false;
|
||||
}
|
||||
|
||||
Collider[] colliders = root.GetComponentsInChildren<Collider>(true);
|
||||
for (int i = 0; i < colliders.Length; i++)
|
||||
colliders[i].enabled = false;
|
||||
|
||||
MonoBehaviour[] behaviours = root.GetComponentsInChildren<MonoBehaviour>(true);
|
||||
for (int i = 0; i < behaviours.Length; i++)
|
||||
behaviours[i].enabled = false;
|
||||
|
||||
AudioSource[] audioSources = root.GetComponentsInChildren<AudioSource>(true);
|
||||
for (int i = 0; i < audioSources.Length; i++)
|
||||
{
|
||||
audioSources[i].Stop();
|
||||
audioSources[i].enabled = false;
|
||||
}
|
||||
|
||||
ParticleSystem[] particles = root.GetComponentsInChildren<ParticleSystem>(true);
|
||||
for (int i = 0; i < particles.Length; i++)
|
||||
particles[i].Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
|
||||
|
||||
TrailRenderer[] trails = root.GetComponentsInChildren<TrailRenderer>(true);
|
||||
for (int i = 0; i < trails.Length; i++)
|
||||
trails[i].emitting = false;
|
||||
}
|
||||
|
||||
private void RotatePreview()
|
||||
{
|
||||
if (currentPreview == null)
|
||||
return;
|
||||
|
||||
currentPreview.transform.Rotate(Vector3.up, previewRotationSpeed * Time.deltaTime, Space.World);
|
||||
}
|
||||
|
||||
private void RefreshUi()
|
||||
{
|
||||
if (vehiclePanel != null)
|
||||
vehiclePanel.SetActive(currentStep == Step.Vehicle);
|
||||
if (modePanel != null)
|
||||
modePanel.SetActive(currentStep == Step.Mode);
|
||||
if (mapPanel != null)
|
||||
mapPanel.SetActive(currentStep == Step.Map);
|
||||
|
||||
if (titleText != null)
|
||||
titleText.text = GetTitle();
|
||||
if (subtitleText != null)
|
||||
subtitleText.text = GetSubtitle();
|
||||
if (vehicleNameText != null)
|
||||
vehicleNameText.text = GetVehicleName();
|
||||
if (vehicleClassText != null)
|
||||
vehicleClassText.text = (vehicleIndex + 1) + " / " + Mathf.Max(vehicles != null ? vehicles.Length : 0, 1);
|
||||
|
||||
RefreshModeLabels();
|
||||
RefreshMapLabels();
|
||||
}
|
||||
|
||||
private void RefreshModeLabels()
|
||||
{
|
||||
if (modeLabels == null)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < modeLabels.Length && i < modeNames.Length; i++)
|
||||
{
|
||||
if (modeLabels[i] != null)
|
||||
modeLabels[i].text = i == modeIndex ? "< " + modeNames[i] + " >" : modeNames[i];
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshMapLabels()
|
||||
{
|
||||
if (mapLabels == null)
|
||||
return;
|
||||
|
||||
MapOption selectedMap = GetMapForCurrentMode(mapIndex);
|
||||
for (int i = 0; i < mapLabels.Length; i++)
|
||||
{
|
||||
if (mapLabels[i] != null)
|
||||
mapLabels[i].text = selectedMap != null ? selectedMap.displayName : "NO MAPS";
|
||||
}
|
||||
}
|
||||
|
||||
private string GetTitle()
|
||||
{
|
||||
if (currentStep == Step.Mode)
|
||||
return "\u0420\u0415\u0416\u0418\u041c \u0418\u0413\u0420\u042b";
|
||||
if (currentStep == Step.Map)
|
||||
return "\u0412\u042b\u0411\u041e\u0420 \u041a\u0410\u0420\u0422\u042b";
|
||||
|
||||
return "\u0412\u042b\u0411\u041e\u0420 \u041c\u0410\u0428\u0418\u041d\u042b";
|
||||
}
|
||||
|
||||
private string GetSubtitle()
|
||||
{
|
||||
if (currentStep == Step.Vehicle)
|
||||
return "\u0421\u0422\u0420\u0415\u041b\u041a\u0418 / A-D - \u041c\u0410\u0428\u0418\u041d\u0410 SPACE - \u0412\u042b\u0411\u0420\u0410\u0422\u042c";
|
||||
if (currentStep == Step.Mode)
|
||||
return "\u0421\u0422\u0420\u0415\u041b\u041a\u0418 / A-D - \u0420\u0415\u0416\u0418\u041c SPACE - \u0414\u0410\u041b\u042c\u0428\u0415 ESC - \u041d\u0410\u0417\u0410\u0414";
|
||||
|
||||
return "\u0421\u0422\u0420\u0415\u041b\u041a\u0418 / A-D - \u041a\u0410\u0420\u0422\u0410 SPACE - \u0421\u0422\u0410\u0420\u0422 ESC - \u041d\u0410\u0417\u0410\u0414";
|
||||
}
|
||||
|
||||
private string GetVehicleName()
|
||||
{
|
||||
if (vehicles == null || vehicles.Length == 0 || vehicles[vehicleIndex] == null)
|
||||
return "NO VEHICLE";
|
||||
|
||||
return string.IsNullOrWhiteSpace(vehicles[vehicleIndex].displayName) ? vehicles[vehicleIndex].prefab.name : vehicles[vehicleIndex].displayName;
|
||||
}
|
||||
|
||||
private void StartSelectedMap()
|
||||
{
|
||||
MapOption selectedMap = GetMapForCurrentMode(mapIndex);
|
||||
if (selectedMap == null || string.IsNullOrWhiteSpace(selectedMap.sceneName))
|
||||
{
|
||||
Debug.LogWarning("No map is configured for selected game mode.");
|
||||
return;
|
||||
}
|
||||
|
||||
SelectedGameMode selectedMode = modeIndex == 0 ? SelectedGameMode.Arena : SelectedGameMode.SurvivalRace;
|
||||
GameObject selectedPrefab = vehicles != null && vehicles.Length > 0 ? vehicles[vehicleIndex].prefab : null;
|
||||
GameSelectionState.SetSelection(selectedPrefab, GetVehicleName(), selectedMode, selectedMap.sceneName);
|
||||
SceneManager.LoadScene(selectedMap.sceneName);
|
||||
}
|
||||
|
||||
private MapOption GetMapForCurrentMode(int filteredIndex)
|
||||
{
|
||||
if (maps == null || maps.Length == 0)
|
||||
return null;
|
||||
|
||||
SelectedGameMode selectedMode = modeIndex == 0 ? SelectedGameMode.Arena : SelectedGameMode.SurvivalRace;
|
||||
int currentFilteredIndex = 0;
|
||||
for (int i = 0; i < maps.Length; i++)
|
||||
{
|
||||
if (maps[i] == null || maps[i].mode != selectedMode)
|
||||
continue;
|
||||
|
||||
if (currentFilteredIndex == filteredIndex)
|
||||
return maps[i];
|
||||
|
||||
currentFilteredIndex++;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private int GetMapCountForCurrentMode()
|
||||
{
|
||||
if (maps == null || maps.Length == 0)
|
||||
return 0;
|
||||
|
||||
SelectedGameMode selectedMode = modeIndex == 0 ? SelectedGameMode.Arena : SelectedGameMode.SurvivalRace;
|
||||
int count = 0;
|
||||
for (int i = 0; i < maps.Length; i++)
|
||||
{
|
||||
if (maps[i] != null && maps[i].mode == selectedMode)
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
private static int Wrap(int value, int length)
|
||||
{
|
||||
if (length <= 0)
|
||||
return 0;
|
||||
|
||||
value %= length;
|
||||
return value < 0 ? value + length : value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5d1a3f92bb756c4d8237587a81bc651
|
||||
@ -1,225 +0,0 @@
|
||||
using RaceFields.Vehicles;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Harvesters.AI
|
||||
{
|
||||
[RequireComponent(typeof(Rigidbody))]
|
||||
public sealed class HarvesterChaseController : MonoBehaviour
|
||||
{
|
||||
[Header("Target")]
|
||||
[SerializeField] private Transform target;
|
||||
[SerializeField] private bool autoFindPlayer = true;
|
||||
[SerializeField] private float targetSearchInterval = 0.35f;
|
||||
|
||||
[Header("Wheel Colliders")]
|
||||
[SerializeField] private WheelCollider frontLeftCollider;
|
||||
[SerializeField] private WheelCollider frontRightCollider;
|
||||
[SerializeField] private WheelCollider rearLeftCollider;
|
||||
[SerializeField] private WheelCollider rearRightCollider;
|
||||
|
||||
[Header("Wheel Visuals")]
|
||||
[SerializeField] private Transform frontLeftVisual;
|
||||
[SerializeField] private Transform frontRightVisual;
|
||||
[SerializeField] private Transform rearLeftVisual;
|
||||
[SerializeField] private Transform rearRightVisual;
|
||||
|
||||
[Header("Movement")]
|
||||
[SerializeField] private float maxSpeedKmh = 55f;
|
||||
[SerializeField] private float motorTorque = 30000f;
|
||||
[SerializeField] private float brakeTorque = 6500f;
|
||||
[SerializeField] private float maxSteerAngle = 28f;
|
||||
[SerializeField] private float steeringResponse = 4f;
|
||||
[SerializeField] private float stoppingDistance = 1.4f;
|
||||
[SerializeField] private float reverseDistance = 0.7f;
|
||||
[SerializeField] private float downforce = 45f;
|
||||
|
||||
[Header("Stability")]
|
||||
[SerializeField] private Vector3 centerOfMass = new Vector3(0f, -0.65f, 0.2f);
|
||||
|
||||
private Rigidbody body;
|
||||
private float nextTargetSearchTime;
|
||||
private float currentSteerAngle;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
body = GetComponent<Rigidbody>();
|
||||
AutoFindReferences();
|
||||
|
||||
body.centerOfMass = centerOfMass;
|
||||
body.interpolation = RigidbodyInterpolation.Interpolate;
|
||||
body.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
ResolveTarget();
|
||||
UpdateDriving();
|
||||
ApplyDownforce();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
UpdateWheelVisuals();
|
||||
}
|
||||
|
||||
public void SetTarget(Transform newTarget)
|
||||
{
|
||||
target = newTarget;
|
||||
nextTargetSearchTime = Time.time + targetSearchInterval;
|
||||
}
|
||||
|
||||
private void UpdateDriving()
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
ApplyBrake(brakeTorque);
|
||||
ApplyMotor(0f);
|
||||
SetSteering(0f);
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 localTarget = transform.InverseTransformPoint(target.position);
|
||||
localTarget.y = 0f;
|
||||
float distance = localTarget.magnitude;
|
||||
if (distance < 0.1f)
|
||||
{
|
||||
ApplyBrake(brakeTorque);
|
||||
ApplyMotor(0f);
|
||||
return;
|
||||
}
|
||||
|
||||
float speedKmh = body.linearVelocity.magnitude * 3.6f;
|
||||
float targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg;
|
||||
float desiredSteer = Mathf.Clamp(targetAngle, -maxSteerAngle, maxSteerAngle);
|
||||
if (localTarget.z < 0f && Mathf.Abs(localTarget.x) < 0.5f)
|
||||
desiredSteer = currentSteerAngle >= 0f ? maxSteerAngle : -maxSteerAngle;
|
||||
|
||||
SetSteering(desiredSteer);
|
||||
|
||||
if (distance <= reverseDistance)
|
||||
{
|
||||
ApplyBrake(0f);
|
||||
ApplyMotor(-motorTorque * 0.45f);
|
||||
return;
|
||||
}
|
||||
|
||||
if (distance <= stoppingDistance)
|
||||
{
|
||||
ApplyBrake(brakeTorque);
|
||||
ApplyMotor(0f);
|
||||
return;
|
||||
}
|
||||
|
||||
float angleFactor = Mathf.Clamp(1f - Mathf.Abs(targetAngle) / 130f * 0.5f, 0.65f, 1f);
|
||||
float speedFactor = speedKmh < maxSpeedKmh ? 1f : 0f;
|
||||
float torque = motorTorque * angleFactor * speedFactor;
|
||||
|
||||
ApplyBrake(0f);
|
||||
ApplyMotor(torque);
|
||||
}
|
||||
|
||||
private void SetSteering(float desiredAngle)
|
||||
{
|
||||
currentSteerAngle = Mathf.Lerp(currentSteerAngle, desiredAngle, steeringResponse * Time.fixedDeltaTime);
|
||||
if (frontLeftCollider != null)
|
||||
frontLeftCollider.steerAngle = currentSteerAngle;
|
||||
if (frontRightCollider != null)
|
||||
frontRightCollider.steerAngle = currentSteerAngle;
|
||||
}
|
||||
|
||||
private void ApplyMotor(float torque)
|
||||
{
|
||||
SetMotorTorque(frontLeftCollider, torque * 0.5f);
|
||||
SetMotorTorque(frontRightCollider, torque * 0.5f);
|
||||
SetMotorTorque(rearLeftCollider, torque);
|
||||
SetMotorTorque(rearRightCollider, torque);
|
||||
}
|
||||
|
||||
private void ApplyBrake(float torque)
|
||||
{
|
||||
SetBrakeTorque(frontLeftCollider, torque);
|
||||
SetBrakeTorque(frontRightCollider, torque);
|
||||
SetBrakeTorque(rearLeftCollider, torque);
|
||||
SetBrakeTorque(rearRightCollider, torque);
|
||||
}
|
||||
|
||||
private void ApplyDownforce()
|
||||
{
|
||||
body.AddForce(-transform.up * downforce * body.linearVelocity.magnitude, ForceMode.Force);
|
||||
}
|
||||
|
||||
private void UpdateWheelVisuals()
|
||||
{
|
||||
SyncWheelVisual(frontLeftCollider, frontLeftVisual);
|
||||
SyncWheelVisual(frontRightCollider, frontRightVisual);
|
||||
SyncWheelVisual(rearLeftCollider, rearLeftVisual);
|
||||
SyncWheelVisual(rearRightCollider, rearRightVisual);
|
||||
}
|
||||
|
||||
private void ResolveTarget()
|
||||
{
|
||||
if (target != null || !autoFindPlayer)
|
||||
return;
|
||||
|
||||
if (Time.time < nextTargetSearchTime)
|
||||
return;
|
||||
|
||||
nextTargetSearchTime = Time.time + targetSearchInterval;
|
||||
ArcadeBuggyController player = Object.FindFirstObjectByType<ArcadeBuggyController>();
|
||||
if (player != null)
|
||||
target = player.transform;
|
||||
}
|
||||
|
||||
private void AutoFindReferences()
|
||||
{
|
||||
frontLeftCollider ??= FindChildComponent<WheelCollider>("WheelCollider_FL");
|
||||
frontRightCollider ??= FindChildComponent<WheelCollider>("WheelCollider_FR");
|
||||
rearLeftCollider ??= FindChildComponent<WheelCollider>("WheelCollider_RL");
|
||||
rearRightCollider ??= FindChildComponent<WheelCollider>("WheelCollider_RR");
|
||||
|
||||
frontLeftVisual ??= FindChildTransform("H_Wheel_FL");
|
||||
frontRightVisual ??= FindChildTransform("H_Wheel_FR");
|
||||
rearLeftVisual ??= FindChildTransform("H_Wheel_RL");
|
||||
rearRightVisual ??= FindChildTransform("H_Wheel_RR");
|
||||
}
|
||||
|
||||
private T FindChildComponent<T>(string childName) where T : Component
|
||||
{
|
||||
Transform child = FindChildTransform(childName);
|
||||
return child != null ? child.GetComponent<T>() : null;
|
||||
}
|
||||
|
||||
private Transform FindChildTransform(string childName)
|
||||
{
|
||||
Transform[] children = GetComponentsInChildren<Transform>(true);
|
||||
for (int i = 0; i < children.Length; i++)
|
||||
{
|
||||
if (children[i].name == childName)
|
||||
return children[i];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void SetMotorTorque(WheelCollider wheel, float torque)
|
||||
{
|
||||
if (wheel != null)
|
||||
wheel.motorTorque = torque;
|
||||
}
|
||||
|
||||
private static void SetBrakeTorque(WheelCollider wheel, float torque)
|
||||
{
|
||||
if (wheel != null)
|
||||
wheel.brakeTorque = torque;
|
||||
}
|
||||
|
||||
private static void SyncWheelVisual(WheelCollider collider, Transform visual)
|
||||
{
|
||||
if (collider == null || visual == null)
|
||||
return;
|
||||
|
||||
collider.GetWorldPose(out Vector3 position, out Quaternion rotation);
|
||||
visual.SetPositionAndRotation(position, rotation);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4d8c0e258b3d5b74e8d179d4cc96c122
|
||||
@ -1,15 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Harvesters.Visuals
|
||||
{
|
||||
public sealed class HarvesterBladeSpinner : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private float rotationSpeed = 720f;
|
||||
[SerializeField] private Space rotationSpace = Space.Self;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
transform.Rotate(Vector3.right, rotationSpeed * Time.deltaTime, rotationSpace);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 314cfddae3eb4784ca1f6c04a3ac82f5
|
||||
@ -1,20 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class WeaponPickup : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private GameObject pickupPrefab;
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (pickupPrefab == null)
|
||||
return;
|
||||
|
||||
VehicleWeaponInventory inventory = other.GetComponentInParent<VehicleWeaponInventory>();
|
||||
if (inventory == null)
|
||||
return;
|
||||
|
||||
inventory.AddWeapon(pickupPrefab);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9ba2d729446c7924fae0c23b6f68a343
|
||||
@ -1,127 +0,0 @@
|
||||
using RaceFields.Damage;
|
||||
using RaceFields.Damage.VehicleDamage;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace RaceFields.UI.HUD
|
||||
{
|
||||
public sealed class VehicleDamageHud : MonoBehaviour
|
||||
{
|
||||
[System.Serializable]
|
||||
public sealed class ModuleImage
|
||||
{
|
||||
public VehicleModuleType moduleType;
|
||||
public Image image;
|
||||
}
|
||||
|
||||
[SerializeField] private VehicleDamageController target;
|
||||
[SerializeField] private bool autoFindTarget = true;
|
||||
[SerializeField] private float targetSearchInterval = 0.35f;
|
||||
[SerializeField] private Image fullVehicleImage;
|
||||
[SerializeField] private ModuleImage[] moduleImages;
|
||||
[SerializeField] private Color healthyColor = new Color(1f, 1f, 1f, 0f);
|
||||
[SerializeField] private Color damagedColor = new Color(1f, 0f, 0f, 0.7f);
|
||||
[SerializeField] private Color destroyedColor = new Color(0f, 0f, 0f, 0.85f);
|
||||
|
||||
private VehicleDamageController boundTarget;
|
||||
private float nextTargetSearchTime;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
Bind(target);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
Unbind();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (target != null || !autoFindTarget)
|
||||
return;
|
||||
|
||||
if (Time.unscaledTime < nextTargetSearchTime)
|
||||
return;
|
||||
|
||||
nextTargetSearchTime = Time.unscaledTime + targetSearchInterval;
|
||||
Bind(Object.FindAnyObjectByType<VehicleDamageController>());
|
||||
}
|
||||
|
||||
public void Bind(VehicleDamageController newTarget)
|
||||
{
|
||||
if (boundTarget == newTarget)
|
||||
{
|
||||
target = newTarget;
|
||||
RefreshAll();
|
||||
return;
|
||||
}
|
||||
|
||||
Unbind();
|
||||
target = newTarget;
|
||||
boundTarget = newTarget;
|
||||
if (boundTarget != null)
|
||||
boundTarget.ModuleStateChanged += HandleModuleStateChanged;
|
||||
|
||||
RefreshAll();
|
||||
}
|
||||
|
||||
private void Unbind()
|
||||
{
|
||||
if (boundTarget != null)
|
||||
boundTarget.ModuleStateChanged -= HandleModuleStateChanged;
|
||||
|
||||
boundTarget = null;
|
||||
}
|
||||
|
||||
private void HandleModuleStateChanged(VehicleDamageController.VehicleModule module)
|
||||
{
|
||||
RefreshModule(module);
|
||||
}
|
||||
|
||||
private void RefreshAll()
|
||||
{
|
||||
if (fullVehicleImage != null)
|
||||
{
|
||||
fullVehicleImage.enabled = true;
|
||||
fullVehicleImage.color = Color.white;
|
||||
}
|
||||
|
||||
if (moduleImages == null)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < moduleImages.Length; i++)
|
||||
{
|
||||
VehicleDamageController.VehicleModule module = target != null ? target.GetModule(moduleImages[i].moduleType) : null;
|
||||
SetModuleImage(moduleImages[i], module != null ? module.State : VehicleModuleState.Healthy);
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshModule(VehicleDamageController.VehicleModule module)
|
||||
{
|
||||
if (moduleImages == null || module == null)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < moduleImages.Length; i++)
|
||||
{
|
||||
if (moduleImages[i].moduleType == module.ModuleType)
|
||||
SetModuleImage(moduleImages[i], module.State);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetModuleImage(ModuleImage moduleImage, VehicleModuleState state)
|
||||
{
|
||||
if (moduleImage == null || moduleImage.image == null)
|
||||
return;
|
||||
|
||||
moduleImage.image.enabled = true;
|
||||
moduleImage.image.color = state switch
|
||||
{
|
||||
VehicleModuleState.Damaged => damagedColor,
|
||||
VehicleModuleState.Destroyed => destroyedColor,
|
||||
VehicleModuleState.Detached => destroyedColor,
|
||||
_ => healthyColor
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0bfd334c2a5c6d34b95197adeff4252e
|
||||
@ -42,7 +42,7 @@ namespace RaceFields.Vehicles
|
||||
[SerializeField] private TrailRenderer rearRightSkid;
|
||||
|
||||
[Header("Sounds")]
|
||||
[SerializeField] private bool useSounds = true;
|
||||
[SerializeField] private bool useSounds;
|
||||
[SerializeField] private AudioSource engineSound;
|
||||
[SerializeField] private AudioSource tireScreechSound;
|
||||
|
||||
@ -50,42 +50,6 @@ namespace RaceFields.Vehicles
|
||||
public bool IsDrifting { get; private set; }
|
||||
public bool IsTractionLocked { get; private set; }
|
||||
|
||||
public WheelCollider GetWheelCollider(WheelSlot slot)
|
||||
{
|
||||
return slot switch
|
||||
{
|
||||
WheelSlot.FrontLeft => frontLeftCollider,
|
||||
WheelSlot.FrontRight => frontRightCollider,
|
||||
WheelSlot.RearLeft => rearLeftCollider,
|
||||
WheelSlot.RearRight => rearRightCollider,
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
|
||||
public Transform GetWheelVisual(WheelSlot slot)
|
||||
{
|
||||
return slot switch
|
||||
{
|
||||
WheelSlot.FrontLeft => frontLeftVisual,
|
||||
WheelSlot.FrontRight => frontRightVisual,
|
||||
WheelSlot.RearLeft => rearLeftVisual,
|
||||
WheelSlot.RearRight => rearRightVisual,
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
|
||||
public void SetWheelEnabled(WheelSlot slot, bool enabled)
|
||||
{
|
||||
WheelCollider wheel = GetWheelCollider(slot);
|
||||
if (wheel != null)
|
||||
{
|
||||
wheel.motorTorque = 0f;
|
||||
wheel.brakeTorque = enabled ? 0f : brakeForce;
|
||||
wheel.steerAngle = 0f;
|
||||
wheel.enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
private const float TorquePerAccelerationStep = 50f;
|
||||
private const float DriftVelocityThreshold = 2.5f;
|
||||
private const float SkidVelocityThreshold = 5f;
|
||||
@ -119,7 +83,7 @@ namespace RaceFields.Vehicles
|
||||
private void Awake()
|
||||
{
|
||||
body = GetComponent<Rigidbody>();
|
||||
ValidateRequiredReferences();
|
||||
AutoFindReferences();
|
||||
CacheVisualRotationOffsets();
|
||||
CacheWheelFriction();
|
||||
|
||||
@ -161,15 +125,9 @@ namespace RaceFields.Vehicles
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if ENABLE_LEGACY_INPUT_MANAGER
|
||||
throttleInput = Input.GetAxisRaw("Vertical");
|
||||
steeringInput = Input.GetAxisRaw("Horizontal");
|
||||
handbrakeInput = Input.GetKey(KeyCode.Space);
|
||||
#else
|
||||
throttleInput = 0f;
|
||||
steeringInput = 0f;
|
||||
handbrakeInput = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
private void UpdateTelemetry()
|
||||
@ -233,7 +191,7 @@ namespace RaceFields.Vehicles
|
||||
throttleAxis = Mathf.MoveTowards(throttleAxis, 0f, Time.fixedDeltaTime * 10f);
|
||||
ApplyMotorTorque(0f);
|
||||
|
||||
if (!handbrakeInput && IsAnyWheelGrounded())
|
||||
if (!handbrakeInput)
|
||||
{
|
||||
ApplyBrakeTorque(0f);
|
||||
body.linearVelocity *= 1f / (1f + 0.025f * decelerationMultiplier);
|
||||
@ -265,9 +223,6 @@ namespace RaceFields.Vehicles
|
||||
|
||||
private void ApplyDownforce()
|
||||
{
|
||||
if (!IsAnyWheelGrounded())
|
||||
return;
|
||||
|
||||
body.AddForce(-transform.up * downforce * body.linearVelocity.magnitude, ForceMode.Force);
|
||||
}
|
||||
|
||||
@ -282,7 +237,7 @@ namespace RaceFields.Vehicles
|
||||
|
||||
if (engineSound != null)
|
||||
{
|
||||
if (engineSound.clip != null && !engineSound.isPlaying)
|
||||
if (!engineSound.isPlaying)
|
||||
engineSound.Play();
|
||||
|
||||
engineSound.pitch = initialEnginePitch + body.linearVelocity.magnitude / 25f;
|
||||
@ -292,7 +247,7 @@ namespace RaceFields.Vehicles
|
||||
bool shouldScreech = rearWheelsGrounded && (IsDrifting || (IsTractionLocked && SpeedKmh > EffectsMinSpeedKmh));
|
||||
if (tireScreechSound != null)
|
||||
{
|
||||
if (shouldScreech && tireScreechSound.clip != null && !tireScreechSound.isPlaying)
|
||||
if (shouldScreech && !tireScreechSound.isPlaying)
|
||||
tireScreechSound.Play();
|
||||
else if (!shouldScreech && tireScreechSound.isPlaying)
|
||||
tireScreechSound.Stop();
|
||||
@ -349,7 +304,7 @@ namespace RaceFields.Vehicles
|
||||
|
||||
private void ApplySidewaysFriction(WheelCollider wheel, ref WheelFrictionCurve friction, float defaultExtremumSlip, float drift)
|
||||
{
|
||||
if (wheel == null || !wheel.enabled)
|
||||
if (wheel == null)
|
||||
return;
|
||||
|
||||
float driftExtremumSlip = defaultExtremumSlip * handbrakeDriftMultiplier;
|
||||
@ -375,25 +330,25 @@ namespace RaceFields.Vehicles
|
||||
|
||||
private static void SetSteerAngle(WheelCollider wheel, float angle, float lerp)
|
||||
{
|
||||
if (wheel != null && wheel.enabled)
|
||||
if (wheel != null)
|
||||
wheel.steerAngle = Mathf.Lerp(wheel.steerAngle, angle, lerp);
|
||||
}
|
||||
|
||||
private static void SetDriveTorque(WheelCollider wheel, float torque)
|
||||
{
|
||||
if (wheel != null && wheel.enabled)
|
||||
if (wheel != null)
|
||||
wheel.motorTorque = torque;
|
||||
}
|
||||
|
||||
private static void SetBrakeTorque(WheelCollider wheel, float torque)
|
||||
{
|
||||
if (wheel != null && wheel.enabled)
|
||||
if (wheel != null)
|
||||
wheel.brakeTorque = torque;
|
||||
}
|
||||
|
||||
private static void SyncWheelVisual(WheelCollider collider, Transform visual, Quaternion visualRotationOffset)
|
||||
{
|
||||
if (collider == null || !collider.enabled || visual == null)
|
||||
if (collider == null || visual == null)
|
||||
return;
|
||||
|
||||
collider.GetWorldPose(out Vector3 position, out Quaternion rotation);
|
||||
@ -427,15 +382,7 @@ namespace RaceFields.Vehicles
|
||||
|
||||
private static bool IsWheelGrounded(WheelCollider wheel)
|
||||
{
|
||||
return wheel != null && wheel.enabled && wheel.isGrounded;
|
||||
}
|
||||
|
||||
private bool IsAnyWheelGrounded()
|
||||
{
|
||||
return IsWheelGrounded(frontLeftCollider) ||
|
||||
IsWheelGrounded(frontRightCollider) ||
|
||||
IsWheelGrounded(rearLeftCollider) ||
|
||||
IsWheelGrounded(rearRightCollider);
|
||||
return wheel != null && wheel.isGrounded;
|
||||
}
|
||||
|
||||
private static void StopAudio(AudioSource source)
|
||||
@ -444,13 +391,22 @@ namespace RaceFields.Vehicles
|
||||
source.Stop();
|
||||
}
|
||||
|
||||
private void ValidateRequiredReferences()
|
||||
private void AutoFindReferences()
|
||||
{
|
||||
if (frontLeftCollider != null && frontRightCollider != null && rearLeftCollider != null && rearRightCollider != null)
|
||||
return;
|
||||
frontLeftCollider ??= FindChildComponent<WheelCollider>("WheelCollider_FL");
|
||||
frontRightCollider ??= FindChildComponent<WheelCollider>("WheelCollider_FR");
|
||||
rearLeftCollider ??= FindChildComponent<WheelCollider>("WheelCollider_RL");
|
||||
rearRightCollider ??= FindChildComponent<WheelCollider>("WheelCollider_RR");
|
||||
|
||||
Debug.LogError($"{name} is missing one or more wheel collider references.", this);
|
||||
enabled = false;
|
||||
frontLeftVisual ??= FindFirstChildTransform("F_L", "WheelVisual_FL");
|
||||
frontRightVisual ??= FindFirstChildTransform("F_R", "WheelVisual_FR");
|
||||
rearLeftVisual ??= FindFirstChildTransform("B_L", "WheelVisual_RL");
|
||||
rearRightVisual ??= FindFirstChildTransform("B_R", "WheelVisual_RR");
|
||||
|
||||
rearLeftSmoke ??= FindChildComponent<ParticleSystem>("LeftTireSmoke_PS");
|
||||
rearRightSmoke ??= FindChildComponent<ParticleSystem>("RightTireSmoke_PS");
|
||||
rearLeftSkid ??= FindChildComponent<TrailRenderer>("LeftTireSkid");
|
||||
rearRightSkid ??= FindChildComponent<TrailRenderer>("RightTireSkid");
|
||||
}
|
||||
|
||||
private void CacheVisualRotationOffsets()
|
||||
@ -469,5 +425,34 @@ namespace RaceFields.Vehicles
|
||||
return Quaternion.Inverse(collider.transform.rotation) * visual.rotation;
|
||||
}
|
||||
|
||||
private T FindChildComponent<T>(string childName) where T : Component
|
||||
{
|
||||
Transform child = FindChildTransform(childName);
|
||||
return child != null ? child.GetComponent<T>() : null;
|
||||
}
|
||||
|
||||
private Transform FindChildTransform(string childName)
|
||||
{
|
||||
Transform[] children = GetComponentsInChildren<Transform>(true);
|
||||
for (int i = 0; i < children.Length; i++)
|
||||
{
|
||||
if (children[i].name == childName)
|
||||
return children[i];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private Transform FindFirstChildTransform(params string[] childNames)
|
||||
{
|
||||
for (int i = 0; i < childNames.Length; i++)
|
||||
{
|
||||
Transform child = FindChildTransform(childNames[i]);
|
||||
if (child != null)
|
||||
return child;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
89
Assets/_Project/Scripts/Vehicles/Wheels/BuggyWheelSetup.cs
Normal file
89
Assets/_Project/Scripts/Vehicles/Wheels/BuggyWheelSetup.cs
Normal file
@ -0,0 +1,89 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RaceFields.Vehicles
|
||||
{
|
||||
[ExecuteAlways]
|
||||
public sealed class BuggyWheelSetup : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private string frontLeftWheelName = "F_L";
|
||||
[SerializeField] private string frontRightWheelName = "F_R";
|
||||
[SerializeField] private string rearLeftWheelName = "B_L";
|
||||
[SerializeField] private string rearRightWheelName = "B_R";
|
||||
|
||||
[SerializeField] private string frontLeftColliderName = "WheelCollider_FL";
|
||||
[SerializeField] private string frontRightColliderName = "WheelCollider_FR";
|
||||
[SerializeField] private string rearLeftColliderName = "WheelCollider_RL";
|
||||
[SerializeField] private string rearRightColliderName = "WheelCollider_RR";
|
||||
|
||||
[SerializeField] private float radiusMultiplier = 0.5f;
|
||||
[SerializeField] private float minimumRadius = 0.12f;
|
||||
[SerializeField] private float suspensionDistance = 0.28f;
|
||||
[SerializeField] private float wheelMass = 20f;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
AlignAllWheels();
|
||||
}
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
AlignAllWheels();
|
||||
}
|
||||
|
||||
[ContextMenu("Align Wheel Colliders")]
|
||||
public void AlignAllWheels()
|
||||
{
|
||||
AlignWheel(frontLeftWheelName, frontLeftColliderName);
|
||||
AlignWheel(frontRightWheelName, frontRightColliderName);
|
||||
AlignWheel(rearLeftWheelName, rearLeftColliderName);
|
||||
AlignWheel(rearRightWheelName, rearRightColliderName);
|
||||
}
|
||||
|
||||
private void AlignWheel(string visualName, string colliderName)
|
||||
{
|
||||
Transform visual = FindChild(visualName);
|
||||
WheelCollider wheelCollider = FindWheelCollider(colliderName);
|
||||
|
||||
if (visual == null || wheelCollider == null)
|
||||
return;
|
||||
|
||||
wheelCollider.transform.position = visual.position;
|
||||
wheelCollider.transform.rotation = transform.rotation;
|
||||
wheelCollider.transform.localScale = Vector3.one;
|
||||
|
||||
wheelCollider.mass = wheelMass;
|
||||
wheelCollider.radius = Mathf.Max(minimumRadius, EstimateWheelRadius(visual) * radiusMultiplier);
|
||||
wheelCollider.suspensionDistance = suspensionDistance;
|
||||
wheelCollider.forceAppPointDistance = 0.05f;
|
||||
wheelCollider.wheelDampingRate = 0.35f;
|
||||
}
|
||||
|
||||
private float EstimateWheelRadius(Transform visual)
|
||||
{
|
||||
Renderer renderer = visual.GetComponentInChildren<Renderer>();
|
||||
if (renderer == null)
|
||||
return minimumRadius;
|
||||
|
||||
Vector3 size = renderer.bounds.size;
|
||||
return Mathf.Max(size.y, size.z);
|
||||
}
|
||||
|
||||
private WheelCollider FindWheelCollider(string colliderName)
|
||||
{
|
||||
Transform child = FindChild(colliderName);
|
||||
return child != null ? child.GetComponent<WheelCollider>() : null;
|
||||
}
|
||||
|
||||
private Transform FindChild(string childName)
|
||||
{
|
||||
Transform[] children = GetComponentsInChildren<Transform>(true);
|
||||
for (int i = 0; i < children.Length; i++)
|
||||
{
|
||||
if (children[i].name == childName)
|
||||
return children[i];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5f00271deee9d014d92d5672e1fe2baa
|
||||
@ -1,10 +0,0 @@
|
||||
namespace RaceFields.Vehicles
|
||||
{
|
||||
public enum WheelSlot
|
||||
{
|
||||
FrontLeft,
|
||||
FrontRight,
|
||||
RearLeft,
|
||||
RearRight
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 56b479bfe048d174ab8a31e6e5ffb13c
|
||||
@ -1,26 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class VehicleWeaponInventory : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private GameObject currentWeapon;
|
||||
[SerializeField] private Transform spawnPoint;
|
||||
|
||||
public void AddWeapon(GameObject weaponPrefab)
|
||||
{
|
||||
if (weaponPrefab == null)
|
||||
return;
|
||||
|
||||
if (currentWeapon != null)
|
||||
Destroy(currentWeapon);
|
||||
|
||||
Transform parent = spawnPoint != null ? spawnPoint : transform;
|
||||
currentWeapon = Instantiate(weaponPrefab, parent);
|
||||
currentWeapon.transform.localPosition = Vector3.zero;
|
||||
currentWeapon.transform.localRotation = Quaternion.identity;
|
||||
|
||||
MachineGunWeapon machineGun = currentWeapon.GetComponentInChildren<MachineGunWeapon>();
|
||||
if (machineGun != null)
|
||||
machineGun.SetOwner(transform);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89aedc67121ea4f4c98085bc8c9ad0d4
|
||||
@ -1,81 +0,0 @@
|
||||
using RaceFields.Damage;
|
||||
using RaceFields.Damage.VehicleDamage;
|
||||
using UnityEngine;
|
||||
|
||||
public sealed class BulletProjectile : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private float damage = 8f;
|
||||
[SerializeField] private float impactForce = 25f;
|
||||
[SerializeField] private float lifeTime = 2.5f;
|
||||
|
||||
private Transform ownerRoot;
|
||||
private Rigidbody body;
|
||||
private bool hasHit;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
body = GetComponent<Rigidbody>();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
hasHit = false;
|
||||
}
|
||||
|
||||
public void Launch(Vector3 velocity, float shotDamage, float shotLifeTime, Transform owner)
|
||||
{
|
||||
damage = shotDamage;
|
||||
lifeTime = Mathf.Max(0.05f, shotLifeTime);
|
||||
ownerRoot = owner != null ? owner.root : null;
|
||||
|
||||
if (body == null)
|
||||
body = GetComponent<Rigidbody>();
|
||||
|
||||
if (body != null)
|
||||
body.linearVelocity = velocity;
|
||||
|
||||
Destroy(gameObject, lifeTime);
|
||||
}
|
||||
|
||||
private void OnCollisionEnter(Collision collision)
|
||||
{
|
||||
if (collision.collider == null)
|
||||
return;
|
||||
|
||||
Vector3 point = collision.contactCount > 0 ? collision.GetContact(0).point : transform.position;
|
||||
HandleHit(collision.collider, point, body != null ? body.linearVelocity.normalized : transform.forward, collision.rigidbody);
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
HandleHit(other, transform.position, body != null ? body.linearVelocity.normalized : transform.forward, other.attachedRigidbody);
|
||||
}
|
||||
|
||||
private void HandleHit(Collider hitCollider, Vector3 point, Vector3 direction, Rigidbody hitBody)
|
||||
{
|
||||
if (hasHit || hitCollider == null)
|
||||
return;
|
||||
|
||||
if (ownerRoot != null && hitCollider.transform.root == ownerRoot)
|
||||
return;
|
||||
|
||||
hasHit = true;
|
||||
|
||||
DamageHitbox hitbox = hitCollider.GetComponentInParent<DamageHitbox>();
|
||||
if (hitbox != null)
|
||||
{
|
||||
hitbox.ApplyDamage(new DamageHit(damage, DamageType.Projectile, point, direction, gameObject));
|
||||
}
|
||||
else
|
||||
{
|
||||
SimpleDamageReceiver damageReceiver = hitCollider.GetComponentInParent<SimpleDamageReceiver>();
|
||||
if (damageReceiver != null)
|
||||
damageReceiver.ApplyDamage(damage, point, direction, gameObject);
|
||||
}
|
||||
|
||||
if (hitBody != null && (ownerRoot == null || hitBody.transform.root != ownerRoot))
|
||||
hitBody.AddForceAtPosition(direction * impactForce, point, ForceMode.Impulse);
|
||||
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a787488e597d6a4ca2a4d452e6ee62a
|
||||
@ -1,151 +0,0 @@
|
||||
using RaceFields.Harvesters.AI;
|
||||
using UnityEngine;
|
||||
#if ENABLE_INPUT_SYSTEM
|
||||
using UnityEngine.InputSystem;
|
||||
#endif
|
||||
|
||||
public sealed class MachineGunWeapon : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private Transform aimPivot;
|
||||
[SerializeField] private Transform muzzle;
|
||||
[SerializeField] private BulletProjectile projectilePrefab;
|
||||
[SerializeField] private ParticleSystem muzzleFlash;
|
||||
|
||||
[Header("Targeting")]
|
||||
[SerializeField] private float targetSearchRadius = 80f;
|
||||
[SerializeField] private float targetHeightOffset = 1.1f;
|
||||
[SerializeField] private float aimTurnSpeed = 18f;
|
||||
|
||||
[Header("Shooting")]
|
||||
[SerializeField] private float fireRate = 12f;
|
||||
[SerializeField] private float damagePerShot = 8f;
|
||||
[SerializeField] private float projectileSpeed = 70f;
|
||||
[SerializeField] private float projectileLifeTime = 2.5f;
|
||||
[SerializeField] private float spreadAngle = 1.2f;
|
||||
|
||||
private Transform ownerRoot;
|
||||
private Transform currentTarget;
|
||||
private float nextShotTime;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (aimPivot == null)
|
||||
aimPivot = transform;
|
||||
if (muzzle == null)
|
||||
muzzle = transform;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
nextShotTime = 0f;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
AcquireTarget();
|
||||
AimAtTarget();
|
||||
|
||||
if (IsFireHeld())
|
||||
TryShoot();
|
||||
}
|
||||
|
||||
public void SetOwner(Transform owner)
|
||||
{
|
||||
ownerRoot = owner != null ? owner.root : null;
|
||||
}
|
||||
|
||||
private void AcquireTarget()
|
||||
{
|
||||
if (IsValidTarget(currentTarget))
|
||||
return;
|
||||
|
||||
currentTarget = null;
|
||||
HarvesterChaseController[] enemies = Object.FindObjectsByType<HarvesterChaseController>(FindObjectsInactive.Exclude, FindObjectsSortMode.None);
|
||||
float bestDistanceSqr = targetSearchRadius * targetSearchRadius;
|
||||
Vector3 origin = transform.position;
|
||||
|
||||
for (int i = 0; i < enemies.Length; i++)
|
||||
{
|
||||
if (enemies[i] == null)
|
||||
continue;
|
||||
|
||||
Transform candidate = enemies[i].transform;
|
||||
float distanceSqr = (candidate.position - origin).sqrMagnitude;
|
||||
if (distanceSqr >= bestDistanceSqr)
|
||||
continue;
|
||||
|
||||
currentTarget = candidate;
|
||||
bestDistanceSqr = distanceSqr;
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsValidTarget(Transform target)
|
||||
{
|
||||
if (target == null || !target.gameObject.activeInHierarchy)
|
||||
return false;
|
||||
|
||||
return (target.position - transform.position).sqrMagnitude <= targetSearchRadius * targetSearchRadius;
|
||||
}
|
||||
|
||||
private void AimAtTarget()
|
||||
{
|
||||
if (currentTarget == null || aimPivot == null)
|
||||
return;
|
||||
|
||||
Vector3 targetPoint = currentTarget.position + Vector3.up * targetHeightOffset;
|
||||
Vector3 direction = targetPoint - aimPivot.position;
|
||||
if (direction.sqrMagnitude < 0.001f)
|
||||
return;
|
||||
|
||||
Quaternion targetRotation = Quaternion.LookRotation(direction.normalized, Vector3.up);
|
||||
aimPivot.rotation = Quaternion.Slerp(aimPivot.rotation, targetRotation, aimTurnSpeed * Time.deltaTime);
|
||||
}
|
||||
|
||||
private void TryShoot()
|
||||
{
|
||||
if (Time.time < nextShotTime || projectilePrefab == null)
|
||||
return;
|
||||
|
||||
nextShotTime = Time.time + 1f / Mathf.Max(0.01f, fireRate);
|
||||
ShootProjectile();
|
||||
}
|
||||
|
||||
private void ShootProjectile()
|
||||
{
|
||||
Vector3 direction = ApplySpread(muzzle.forward);
|
||||
BulletProjectile projectile = Instantiate(projectilePrefab, muzzle.position, Quaternion.LookRotation(direction, Vector3.up));
|
||||
projectile.Launch(direction * projectileSpeed, damagePerShot, projectileLifeTime, ownerRoot);
|
||||
|
||||
if (muzzleFlash != null)
|
||||
muzzleFlash.Play();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private Vector3 ApplySpread(Vector3 direction)
|
||||
{
|
||||
if (spreadAngle <= 0f)
|
||||
return direction.normalized;
|
||||
|
||||
Quaternion spread = Quaternion.Euler(
|
||||
Random.Range(-spreadAngle, spreadAngle),
|
||||
Random.Range(-spreadAngle, spreadAngle),
|
||||
0f);
|
||||
return (spread * direction).normalized;
|
||||
}
|
||||
|
||||
private static bool IsFireHeld()
|
||||
{
|
||||
#if ENABLE_INPUT_SYSTEM
|
||||
if (Mouse.current != null)
|
||||
return Mouse.current.leftButton.isPressed;
|
||||
#endif
|
||||
#if ENABLE_LEGACY_INPUT_MANAGER
|
||||
return Input.GetMouseButton(0);
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3422cd562818d448a78afdc747d8166
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bafbd2a0515a0f9428d348bd954e9327
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,7 +1,6 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"com.coplaydev.unity-mcp": "https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main",
|
||||
"com.unity.2d.psdimporter": "14.0.3",
|
||||
"com.unity.2d.sprite": "1.0.0",
|
||||
"com.unity.ai.navigation": "2.0.13",
|
||||
"com.unity.collab-proxy": "2.12.4",
|
||||
|
||||
@ -17,47 +17,12 @@
|
||||
},
|
||||
"hash": "11836003a5e2ffcb7715ecec7e1fbb9d9cdb5bb8"
|
||||
},
|
||||
"com.unity.2d.common": {
|
||||
"version": "14.0.1",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.burst": "1.8.4",
|
||||
"com.unity.2d.sprite": "1.0.0",
|
||||
"com.unity.collections": "2.4.3",
|
||||
"com.unity.mathematics": "1.1.0",
|
||||
"com.unity.modules.animation": "1.0.0",
|
||||
"com.unity.modules.uielements": "1.0.0",
|
||||
"com.unity.modules.imageconversion": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.2d.psdimporter": {
|
||||
"version": "14.0.3",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.2d.common": "14.0.1",
|
||||
"com.unity.2d.sprite": "1.0.0",
|
||||
"com.unity.2d.tilemap": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.2d.sprite": {
|
||||
"version": "1.0.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.2d.tilemap": {
|
||||
"version": "1.0.0",
|
||||
"depth": 1,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.modules.tilemap": "1.0.0",
|
||||
"com.unity.modules.uielements": "1.0.0"
|
||||
}
|
||||
},
|
||||
"com.unity.ai.navigation": {
|
||||
"version": "2.0.13",
|
||||
"depth": 0,
|
||||
@ -141,7 +106,7 @@
|
||||
},
|
||||
"com.unity.mathematics": {
|
||||
"version": "1.4.0",
|
||||
"depth": 2,
|
||||
"depth": 3,
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
|
||||
@ -6,10 +6,7 @@ EditorBuildSettings:
|
||||
serializedVersion: 2
|
||||
m_Scenes:
|
||||
- enabled: 1
|
||||
path: Assets/_Project/Scenes/Selection Scene.unity
|
||||
guid: c8d93f5e005091249906eb8692282a9d
|
||||
- enabled: 1
|
||||
path: Assets/_Project/Scenes/Demo Scene.unity
|
||||
guid: 5436e608397e56d45ae30baac88cdb0b
|
||||
path: Assets/Scenes/SampleScene.unity
|
||||
guid: 99c9720ab356a0642a771bea13969a05
|
||||
m_configObjects:
|
||||
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user