Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91eb39ea70 | ||
|
|
33a0a18c40 |
0
.ai/mcp/mcp.json
Normal file
0
.ai/mcp/mcp.json
Normal file
266
.idea/.idea.Race_fields/.idea/workspace.xml
generated
Normal file
266
.idea/.idea.Race_fields/.idea/workspace.xml
generated
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
<?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>
|
||||||
137
Assets/_Project/Art/Materials/BulletProjectile.mat
Normal file
137
Assets/_Project/Art/Materials/BulletProjectile.mat
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
%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
|
||||||
8
Assets/_Project/Art/Materials/BulletProjectile.mat.meta
Normal file
8
Assets/_Project/Art/Materials/BulletProjectile.mat.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e4f0cefa7e5ef2640b0cf25b80ee3520
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -9,7 +9,7 @@ Material:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Buggy Variant 1
|
m_Name: Buggy Variant 1
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
m_Parent: {fileID: 3609018082110429662, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
m_InvalidKeywords: []
|
m_InvalidKeywords: []
|
||||||
|
|||||||
@ -9,7 +9,7 @@ Material:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Buggy_MetDark
|
m_Name: Buggy_MetDark
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
m_Parent: {fileID: 3609018082110429662, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
m_InvalidKeywords: []
|
m_InvalidKeywords: []
|
||||||
|
|||||||
@ -9,7 +9,7 @@ Material:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Buggy_Metall
|
m_Name: Buggy_Metall
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
m_Parent: {fileID: 3609018082110429662, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 8
|
m_ModifiedSerializedProperties: 8
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
m_InvalidKeywords: []
|
m_InvalidKeywords: []
|
||||||
@ -24,14 +24,102 @@ Material:
|
|||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TexEnvs: []
|
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_Ints: []
|
||||||
m_Floats:
|
m_Floats:
|
||||||
|
- _AddPrecomputedVelocity: 0
|
||||||
|
- _AlphaClip: 0
|
||||||
|
- _AlphaToMask: 0
|
||||||
|
- _Blend: 0
|
||||||
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _ClearCoatMask: 0
|
||||||
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 0
|
- _Cull: 0
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DetailAlbedoMapScale: 1
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 0
|
||||||
|
- _DstBlendAlpha: 0
|
||||||
|
- _EnvironmentReflections: 1
|
||||||
|
- _GlossMapScale: 0
|
||||||
|
- _Glossiness: 0
|
||||||
|
- _GlossyReflections: 0
|
||||||
- _Metallic: 1
|
- _Metallic: 1
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _Parallax: 0.005
|
||||||
|
- _QueueOffset: 0
|
||||||
|
- _ReceiveShadows: 1
|
||||||
- _Smoothness: 0.892
|
- _Smoothness: 0.892
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _SrcBlendAlpha: 1
|
||||||
|
- _Surface: 0
|
||||||
|
- _WorkflowMode: 1
|
||||||
|
- _XRMotionVectorsPass: 1
|
||||||
|
- _ZWrite: 1
|
||||||
m_Colors:
|
m_Colors:
|
||||||
- _Color: {r: 0.49524605, g: 0.49524605, b: 0.49524605, a: 1}
|
- _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}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
--- !u!114 &2562075926935352605
|
--- !u!114 &2562075926935352605
|
||||||
|
|||||||
@ -22,7 +22,7 @@ Material:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Buggy_Metall_Br_Rough
|
m_Name: Buggy_Metall_Br_Rough
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
m_Parent: {fileID: -6478536213147159724, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
m_InvalidKeywords: []
|
m_InvalidKeywords: []
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 2a4579adec0226449b62f9ce4a0edd1b
|
guid: 714fbae1b854ba649ad4a2e78ba5eca7
|
||||||
folderAsset: yes
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
|
|||||||
BIN
Assets/_Project/Art/Models/Weapons/MachineGun.fbx
Normal file
BIN
Assets/_Project/Art/Models/Weapons/MachineGun.fbx
Normal file
Binary file not shown.
114
Assets/_Project/Art/Models/Weapons/MachineGun.fbx.meta
Normal file
114
Assets/_Project/Art/Models/Weapons/MachineGun.fbx.meta
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
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:
|
||||||
BIN
Assets/_Project/Art/UI/Sprites/MDP_Buggy_1.psb
Normal file
BIN
Assets/_Project/Art/UI/Sprites/MDP_Buggy_1.psb
Normal file
Binary file not shown.
524
Assets/_Project/Art/UI/Sprites/MDP_Buggy_1.psb.meta
Normal file
524
Assets/_Project/Art/UI/Sprites/MDP_Buggy_1.psb.meta
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
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: []
|
||||||
BIN
Assets/_Project/Audio/SFX/Vehicles/11a70f994753862.mp3
Normal file
BIN
Assets/_Project/Audio/SFX/Vehicles/11a70f994753862.mp3
Normal file
Binary file not shown.
23
Assets/_Project/Audio/SFX/Vehicles/11a70f994753862.mp3.meta
Normal file
23
Assets/_Project/Audio/SFX/Vehicles/11a70f994753862.mp3.meta
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
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:
|
||||||
BIN
Assets/_Project/Audio/SFX/Vehicles/braking-tire-screeching.mp3
Normal file
BIN
Assets/_Project/Audio/SFX/Vehicles/braking-tire-screeching.mp3
Normal file
Binary file not shown.
@ -0,0 +1,23 @@
|
|||||||
|
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:
|
||||||
BIN
Assets/_Project/Audio/SFX/Vehicles/cbb115cd9d4f69a.mp3
Normal file
BIN
Assets/_Project/Audio/SFX/Vehicles/cbb115cd9d4f69a.mp3
Normal file
Binary file not shown.
23
Assets/_Project/Audio/SFX/Vehicles/cbb115cd9d4f69a.mp3.meta
Normal file
23
Assets/_Project/Audio/SFX/Vehicles/cbb115cd9d4f69a.mp3.meta
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
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:
|
||||||
8
Assets/_Project/Docs.meta
Normal file
8
Assets/_Project/Docs.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d6bcac2507ddd5e448851a12c20f7eaa
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
769
Assets/_Project/Docs/Architecture.md
Normal file
769
Assets/_Project/Docs/Architecture.md
Normal file
@ -0,0 +1,769 @@
|
|||||||
|
# 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, а не случайно искать друг друга по сцене.
|
||||||
7
Assets/_Project/Docs/Architecture.md.meta
Normal file
7
Assets/_Project/Docs/Architecture.md.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: de5a8a5be1a98c64f8ae57f7dbad8078
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
650
Assets/_Project/Prefabs/Harvesters/HarvesterEnemy.prefab
Normal file
650
Assets/_Project/Prefabs/Harvesters/HarvesterEnemy.prefab
Normal file
@ -0,0 +1,650 @@
|
|||||||
|
%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}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9291a3f8ca3422546ae45ab051e89b2b
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
287
Assets/_Project/Prefabs/Projectiles/BulletProjectile.prefab
Normal file
287
Assets/_Project/Prefabs/Projectiles/BulletProjectile.prefab
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
%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
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b53989f2534110c459cbd05c3562861f
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -1,5 +1,42 @@
|
|||||||
%YAML 1.1
|
%YAML 1.1
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
%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
|
--- !u!1 &904516071749555836
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -43,7 +80,7 @@ AudioSource:
|
|||||||
serializedVersion: 4
|
serializedVersion: 4
|
||||||
OutputAudioMixerGroup: {fileID: 0}
|
OutputAudioMixerGroup: {fileID: 0}
|
||||||
m_audioClip: {fileID: 0}
|
m_audioClip: {fileID: 0}
|
||||||
m_Resource: {fileID: 8300000, guid: f632e2ace80a32e47a2c531f64901a50, type: 3}
|
m_Resource: {fileID: 8300000, guid: 45d84e15e1dc9ba4c9c98c338a4145b2, type: 3}
|
||||||
m_PlayOnAwake: 0
|
m_PlayOnAwake: 0
|
||||||
m_Volume: 0.4
|
m_Volume: 0.4
|
||||||
m_Pitch: 1
|
m_Pitch: 1
|
||||||
@ -129,6 +166,374 @@ AudioSource:
|
|||||||
m_PreInfinity: 2
|
m_PreInfinity: 2
|
||||||
m_PostInfinity: 2
|
m_PostInfinity: 2
|
||||||
m_RotationOrder: 4
|
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
|
--- !u!1 &3869626763326721352
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -155,7 +560,7 @@ Transform:
|
|||||||
m_GameObject: {fileID: 3869626763326721352}
|
m_GameObject: {fileID: 3869626763326721352}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
m_LocalPosition: {x: -0.9870148, y: 0.42516497, z: 1.7977295}
|
m_LocalPosition: {x: -0.98700947, y: 0.42516497, z: 1.7977297}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
@ -226,7 +631,7 @@ Transform:
|
|||||||
m_GameObject: {fileID: 4325012347455046819}
|
m_GameObject: {fileID: 4325012347455046819}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
m_LocalPosition: {x: 1.0023804, y: 0.42134243, z: -0.42227173}
|
m_LocalPosition: {x: 1.0023823, y: 0.42134243, z: -0.4222711}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
@ -271,6 +676,75 @@ WheelCollider:
|
|||||||
m_LayerOverridePriority: 0
|
m_LayerOverridePriority: 0
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_ProvidesContacts: 0
|
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
|
--- !u!1 &4777080315795762327
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -306,6 +780,75 @@ Transform:
|
|||||||
- {fileID: 7660429726624174055}
|
- {fileID: 7660429726624174055}
|
||||||
m_Father: {fileID: 6187829236652007928}
|
m_Father: {fileID: 6187829236652007928}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
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
|
--- !u!1 &5884228197934813945
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -332,7 +875,7 @@ Transform:
|
|||||||
m_GameObject: {fileID: 5884228197934813945}
|
m_GameObject: {fileID: 5884228197934813945}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
m_LocalPosition: {x: -1.0329285, y: 0.42649394, z: -0.42227173}
|
m_LocalPosition: {x: -1.0329266, y: 0.42649394, z: -0.42227113}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
@ -403,7 +946,7 @@ Transform:
|
|||||||
m_GameObject: {fileID: 6536870136428842500}
|
m_GameObject: {fileID: 6536870136428842500}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
m_LocalPosition: {x: 1.0023804, y: 0.42134243, z: 1.7977295}
|
m_LocalPosition: {x: 1.0023823, y: 0.42134243, z: 1.7977293}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
@ -481,6 +1024,137 @@ Transform:
|
|||||||
- {fileID: 7146618632555308886}
|
- {fileID: 7146618632555308886}
|
||||||
m_Father: {fileID: 6187829236652007928}
|
m_Father: {fileID: 6187829236652007928}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
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
|
--- !u!1 &8546225698448467078
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -524,7 +1198,7 @@ AudioSource:
|
|||||||
serializedVersion: 4
|
serializedVersion: 4
|
||||||
OutputAudioMixerGroup: {fileID: 0}
|
OutputAudioMixerGroup: {fileID: 0}
|
||||||
m_audioClip: {fileID: 0}
|
m_audioClip: {fileID: 0}
|
||||||
m_Resource: {fileID: 8300000, guid: 771ce407ce807b74885ec23ebd1e6647, type: 3}
|
m_Resource: {fileID: 8300000, guid: 7416f0cbb9cb08641b85fe5f89726245, type: 3}
|
||||||
m_PlayOnAwake: 0
|
m_PlayOnAwake: 0
|
||||||
m_Volume: 0.65
|
m_Volume: 0.65
|
||||||
m_Pitch: 1
|
m_Pitch: 1
|
||||||
@ -754,15 +1428,15 @@ PrefabInstance:
|
|||||||
m_Modifications:
|
m_Modifications:
|
||||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 155.19724
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
propertyPath: m_LocalPosition.y
|
propertyPath: m_LocalPosition.y
|
||||||
value: 0.033763755
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_LocalPosition.z
|
||||||
value: 82.28427
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
- target: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
propertyPath: m_LocalRotation.w
|
propertyPath: m_LocalRotation.w
|
||||||
@ -853,6 +1527,12 @@ PrefabInstance:
|
|||||||
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
- targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
addedObject: {fileID: 9122830728132778127}
|
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:
|
m_AddedComponents:
|
||||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
@ -865,7 +1545,7 @@ PrefabInstance:
|
|||||||
addedObject: {fileID: 6756632559856253266}
|
addedObject: {fileID: 6756632559856253266}
|
||||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
addedObject: {fileID: 4292201610895144585}
|
addedObject: {fileID: 4162358059794313232}
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 1d88c2d74df3d234b885ec2e1187f328, type: 3}
|
||||||
--- !u!4 &18073668855899836 stripped
|
--- !u!4 &18073668855899836 stripped
|
||||||
Transform:
|
Transform:
|
||||||
@ -983,7 +1663,7 @@ MonoBehaviour:
|
|||||||
useSounds: 1
|
useSounds: 1
|
||||||
engineSound: {fileID: 4106908681420802530}
|
engineSound: {fileID: 4106908681420802530}
|
||||||
tireScreechSound: {fileID: 5596619143633281226}
|
tireScreechSound: {fileID: 5596619143633281226}
|
||||||
--- !u!114 &4292201610895144585
|
--- !u!114 &4162358059794313232
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
@ -992,21 +1672,23 @@ MonoBehaviour:
|
|||||||
m_GameObject: {fileID: 6815148326285687618}
|
m_GameObject: {fileID: 6815148326285687618}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 5f00271deee9d014d92d5672e1fe2baa, type: 3}
|
m_Script: {fileID: 11500000, guid: 23a901881a64d704fbdbdf8716ec0229, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Vehicles.BuggyWheelSetup
|
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.VehicleDamageController
|
||||||
frontLeftWheelName: Wheel_FL
|
moduleHealth: []
|
||||||
frontRightWheelName: Wheel_FR
|
spawnGraceTime: 1
|
||||||
rearLeftWheelName: Wheel_RL
|
minCollisionSpeed: 11
|
||||||
rearRightWheelName: Wheel_RR
|
collisionDamagePerSpeed: 4.5
|
||||||
frontLeftColliderName: WheelCollider_FL
|
maxCollisionDamage: 95
|
||||||
frontRightColliderName: WheelCollider_FR
|
collisionCooldown: 0.25
|
||||||
rearLeftColliderName: WheelCollider_RL
|
minAirTimeForLandingDamage: 0.45
|
||||||
rearRightColliderName: WheelCollider_RR
|
minLandingDownSpeed: 9
|
||||||
radiusMultiplier: 0.5
|
landingDamagePerSpeed: 4
|
||||||
minimumRadius: 0.12
|
maxLandingDamage: 75
|
||||||
suspensionDistance: 0.28
|
landingWheelDamageShare: 0.65
|
||||||
wheelMass: 20
|
landingBodyDamageShare: 0.35
|
||||||
|
logDamage: 0
|
||||||
|
lastDamageDebug:
|
||||||
--- !u!1001 &6985207696866215891
|
--- !u!1001 &6985207696866215891
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
1894
Assets/_Project/Prefabs/Vehicles/Player/Buggy_1.prefab
Normal file
1894
Assets/_Project/Prefabs/Vehicles/Player/Buggy_1.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 28b4b793ebceaa84ba0cce962ec564c1
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -175,6 +175,75 @@ WheelCollider:
|
|||||||
m_LayerOverridePriority: 0
|
m_LayerOverridePriority: 0
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_ProvidesContacts: 0
|
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
|
--- !u!1 &2599938933167188421
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -253,7 +322,7 @@ AudioSource:
|
|||||||
serializedVersion: 4
|
serializedVersion: 4
|
||||||
OutputAudioMixerGroup: {fileID: 0}
|
OutputAudioMixerGroup: {fileID: 0}
|
||||||
m_audioClip: {fileID: 0}
|
m_audioClip: {fileID: 0}
|
||||||
m_Resource: {fileID: 8300000, guid: f632e2ace80a32e47a2c531f64901a50, type: 3}
|
m_Resource: {fileID: 8300000, guid: 45d84e15e1dc9ba4c9c98c338a4145b2, type: 3}
|
||||||
m_PlayOnAwake: 0
|
m_PlayOnAwake: 0
|
||||||
m_Volume: 0.4
|
m_Volume: 0.4
|
||||||
m_Pitch: 1
|
m_Pitch: 1
|
||||||
@ -339,6 +408,75 @@ AudioSource:
|
|||||||
m_PreInfinity: 2
|
m_PreInfinity: 2
|
||||||
m_PostInfinity: 2
|
m_PostInfinity: 2
|
||||||
m_RotationOrder: 4
|
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
|
--- !u!1 &5725176332190465528
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -382,7 +520,7 @@ AudioSource:
|
|||||||
serializedVersion: 4
|
serializedVersion: 4
|
||||||
OutputAudioMixerGroup: {fileID: 0}
|
OutputAudioMixerGroup: {fileID: 0}
|
||||||
m_audioClip: {fileID: 0}
|
m_audioClip: {fileID: 0}
|
||||||
m_Resource: {fileID: 8300000, guid: 771ce407ce807b74885ec23ebd1e6647, type: 3}
|
m_Resource: {fileID: 8300000, guid: 913d8a886d245de4990489f960596b1e, type: 3}
|
||||||
m_PlayOnAwake: 0
|
m_PlayOnAwake: 0
|
||||||
m_Volume: 0.65
|
m_Volume: 0.65
|
||||||
m_Pitch: 1
|
m_Pitch: 1
|
||||||
@ -468,6 +606,43 @@ AudioSource:
|
|||||||
m_PreInfinity: 2
|
m_PreInfinity: 2
|
||||||
m_PostInfinity: 2
|
m_PostInfinity: 2
|
||||||
m_RotationOrder: 4
|
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
|
--- !u!1 &6741570655071805230
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -539,6 +714,75 @@ WheelCollider:
|
|||||||
m_LayerOverridePriority: 0
|
m_LayerOverridePriority: 0
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_ProvidesContacts: 0
|
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
|
--- !u!1 &6884068289341648401
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -551,7 +795,7 @@ GameObject:
|
|||||||
- component: {fileID: 5167617291018270}
|
- component: {fileID: 5167617291018270}
|
||||||
- component: {fileID: 582127618437854756}
|
- component: {fileID: 582127618437854756}
|
||||||
- component: {fileID: 302156863843409177}
|
- component: {fileID: 302156863843409177}
|
||||||
- component: {fileID: 8664118715040108722}
|
- component: {fileID: 1251155925191827369}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Buggy_Player
|
m_Name: Buggy_Player
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -579,6 +823,7 @@ Transform:
|
|||||||
- {fileID: 279644236469480577}
|
- {fileID: 279644236469480577}
|
||||||
- {fileID: 7863987729731623420}
|
- {fileID: 7863987729731623420}
|
||||||
- {fileID: 9114007139308049182}
|
- {fileID: 9114007139308049182}
|
||||||
|
- {fileID: 9194943108169963881}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!54 &5167617291018270
|
--- !u!54 &5167617291018270
|
||||||
@ -667,7 +912,7 @@ MonoBehaviour:
|
|||||||
useSounds: 1
|
useSounds: 1
|
||||||
engineSound: {fileID: 2872479692476395633}
|
engineSound: {fileID: 2872479692476395633}
|
||||||
tireScreechSound: {fileID: 5164767240841886004}
|
tireScreechSound: {fileID: 5164767240841886004}
|
||||||
--- !u!114 &8664118715040108722
|
--- !u!114 &1251155925191827369
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
@ -676,21 +921,161 @@ MonoBehaviour:
|
|||||||
m_GameObject: {fileID: 6884068289341648401}
|
m_GameObject: {fileID: 6884068289341648401}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 5f00271deee9d014d92d5672e1fe2baa, type: 3}
|
m_Script: {fileID: 11500000, guid: 23a901881a64d704fbdbdf8716ec0229, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Vehicles.BuggyWheelSetup
|
m_EditorClassIdentifier: Assembly-CSharp::RaceFields.Damage.VehicleDamage.VehicleDamageController
|
||||||
frontLeftWheelName: F_L
|
moduleHealth: []
|
||||||
frontRightWheelName: F_R
|
spawnGraceTime: 1
|
||||||
rearLeftWheelName: B_L
|
minCollisionSpeed: 11
|
||||||
rearRightWheelName: B_R
|
collisionDamagePerSpeed: 4.5
|
||||||
frontLeftColliderName: WheelCollider_FL
|
maxCollisionDamage: 95
|
||||||
frontRightColliderName: WheelCollider_FR
|
collisionCooldown: 0.25
|
||||||
rearLeftColliderName: WheelCollider_RL
|
minAirTimeForLandingDamage: 0.45
|
||||||
rearRightColliderName: WheelCollider_RR
|
minLandingDownSpeed: 9
|
||||||
radiusMultiplier: 0.5
|
landingDamagePerSpeed: 4
|
||||||
minimumRadius: 0.12
|
maxLandingDamage: 75
|
||||||
suspensionDistance: 0.28
|
landingWheelDamageShare: 0.65
|
||||||
wheelMass: 20
|
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
|
||||||
--- !u!1 &7631946534788984040
|
--- !u!1 &7631946534788984040
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -762,6 +1147,75 @@ WheelCollider:
|
|||||||
m_LayerOverridePriority: 0
|
m_LayerOverridePriority: 0
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_ProvidesContacts: 0
|
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
|
--- !u!1001 &2782393766222725750
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -1086,10 +1540,30 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 919132149155446097, guid: 77247b62c3b41bf4d95ff56d18001c8e, type: 3}
|
||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Buggy_Model
|
value: Buggy_Model
|
||||||
objectReference: {fileID: 0}
|
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_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
|
|||||||
242
Assets/_Project/Prefabs/Weapons/MachineGun_prefab.prefab
Normal file
242
Assets/_Project/Prefabs/Weapons/MachineGun_prefab.prefab
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
%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}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0b387817969384b45bb9bc5ceb9fb9e8
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/_Project/RenderTextures.meta
Normal file
8
Assets/_Project/RenderTextures.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3e661d7a89960a149a0041a0a0ccc044
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
39
Assets/_Project/RenderTextures/RearViewMirror.renderTexture
Normal file
39
Assets/_Project/RenderTextures/RearViewMirror.renderTexture
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
%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
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 50bdd4d765aea2146ad9c6ecff404b7e
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 8400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
File diff suppressed because it is too large
Load Diff
8
Assets/_Project/Scenes/Harvesters.meta
Normal file
8
Assets/_Project/Scenes/Harvesters.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2a4579adec0226449b62f9ce4a0edd1b
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
File diff suppressed because it is too large
Load Diff
8
Assets/_Project/Scripts/Camera/RearView.meta
Normal file
8
Assets/_Project/Scripts/Camera/RearView.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f71317cc2bc384141adf6b3ba7b14528
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b009635d9fed79946bb577254278da61
|
||||||
@ -12,8 +12,10 @@ namespace RaceFields.CameraSystem
|
|||||||
[SerializeField] private float positionSmoothTime = 0.12f;
|
[SerializeField] private float positionSmoothTime = 0.12f;
|
||||||
[SerializeField] private float rotationLerp = 12f;
|
[SerializeField] private float rotationLerp = 12f;
|
||||||
[SerializeField] private bool autoFindTarget = true;
|
[SerializeField] private bool autoFindTarget = true;
|
||||||
|
[SerializeField] private float targetSearchInterval = 0.25f;
|
||||||
|
|
||||||
private Vector3 velocity;
|
private Vector3 velocity;
|
||||||
|
private float nextTargetSearchTime;
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
@ -47,11 +49,24 @@ namespace RaceFields.CameraSystem
|
|||||||
velocity = Vector3.zero;
|
velocity = Vector3.zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetTarget(Transform newTarget, bool snap)
|
||||||
|
{
|
||||||
|
target = newTarget;
|
||||||
|
velocity = Vector3.zero;
|
||||||
|
|
||||||
|
if (snap)
|
||||||
|
SnapToTarget();
|
||||||
|
}
|
||||||
|
|
||||||
private void ResolveTarget()
|
private void ResolveTarget()
|
||||||
{
|
{
|
||||||
if (target != null || !autoFindTarget)
|
if (target != null || !autoFindTarget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (Time.unscaledTime < nextTargetSearchTime)
|
||||||
|
return;
|
||||||
|
|
||||||
|
nextTargetSearchTime = Time.unscaledTime + targetSearchInterval;
|
||||||
ArcadeBuggyController controller = Object.FindFirstObjectByType<ArcadeBuggyController>();
|
ArcadeBuggyController controller = Object.FindFirstObjectByType<ArcadeBuggyController>();
|
||||||
if (controller != null)
|
if (controller != null)
|
||||||
target = controller.transform;
|
target = controller.transform;
|
||||||
|
|||||||
41
Assets/_Project/Scripts/Damage/Core/BladeDamageSource.cs
Normal file
41
Assets/_Project/Scripts/Damage/Core/BladeDamageSource.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5483916f7ebff2c448991626172509ea
|
||||||
29
Assets/_Project/Scripts/Damage/Core/CollisionDamageSource.cs
Normal file
29
Assets/_Project/Scripts/Damage/Core/CollisionDamageSource.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 27d1127628814c242afa8c0cafd1d278
|
||||||
46
Assets/_Project/Scripts/Damage/Core/DamageTypes.cs
Normal file
46
Assets/_Project/Scripts/Damage/Core/DamageTypes.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/_Project/Scripts/Damage/Core/DamageTypes.cs.meta
Normal file
2
Assets/_Project/Scripts/Damage/Core/DamageTypes.cs.meta
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: afdd389aa3e96af428bc9a2dc1a28b50
|
||||||
33
Assets/_Project/Scripts/Damage/Core/SimpleDamageReceiver.cs
Normal file
33
Assets/_Project/Scripts/Damage/Core/SimpleDamageReceiver.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b84a36537942ca148a8bc4a133d96e93
|
||||||
28
Assets/_Project/Scripts/Damage/VehicleDamage/DamageHitbox.cs
Normal file
28
Assets/_Project/Scripts/Damage/VehicleDamage/DamageHitbox.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 18014f9b0dee6a9498473614a3e522d8
|
||||||
@ -0,0 +1,384 @@
|
|||||||
|
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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 23a901881a64d704fbdbdf8716ec0229
|
||||||
@ -1,4 +1,5 @@
|
|||||||
using RaceFields.CameraSystem;
|
using RaceFields.CameraSystem;
|
||||||
|
using RaceFields.Damage.VehicleDamage;
|
||||||
using RaceFields.Vehicles;
|
using RaceFields.Vehicles;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -24,7 +25,7 @@ namespace RaceFields.EditorTools
|
|||||||
EnsureComponent<Rigidbody>(root, ConfigureBody);
|
EnsureComponent<Rigidbody>(root, ConfigureBody);
|
||||||
EnsureComponent<BoxCollider>(root, collider => ConfigureBodyCollider(root, collider));
|
EnsureComponent<BoxCollider>(root, collider => ConfigureBodyCollider(root, collider));
|
||||||
ArcadeBuggyController controller = EnsureComponent<ArcadeBuggyController>(root, null);
|
ArcadeBuggyController controller = EnsureComponent<ArcadeBuggyController>(root, null);
|
||||||
BuggyWheelSetup wheelSetup = EnsureComponent<BuggyWheelSetup>(root, ConfigureWheelSetup);
|
EnsureComponent<VehicleDamageController>(root, null);
|
||||||
|
|
||||||
SetupWheel(root.transform, "Wheel_FL", "WheelCollider_FL");
|
SetupWheel(root.transform, "Wheel_FL", "WheelCollider_FL");
|
||||||
SetupWheel(root.transform, "Wheel_FR", "WheelCollider_FR");
|
SetupWheel(root.transform, "Wheel_FR", "WheelCollider_FR");
|
||||||
@ -34,8 +35,6 @@ namespace RaceFields.EditorTools
|
|||||||
SetupEffects(root.transform, controller);
|
SetupEffects(root.transform, controller);
|
||||||
SetupSounds(root.transform, controller);
|
SetupSounds(root.transform, controller);
|
||||||
|
|
||||||
wheelSetup.AlignAllWheels();
|
|
||||||
|
|
||||||
PrefabUtility.SaveAsPrefabAsset(root, BuggyPrefabPath);
|
PrefabUtility.SaveAsPrefabAsset(root, BuggyPrefabPath);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@ -172,20 +171,6 @@ namespace RaceFields.EditorTools
|
|||||||
wheelCollider.suspensionSpring = spring;
|
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)
|
private static void SetupControllerReferences(Transform root, ArcadeBuggyController controller)
|
||||||
{
|
{
|
||||||
SerializedObject serializedController = new SerializedObject(controller);
|
SerializedObject serializedController = new SerializedObject(controller);
|
||||||
|
|||||||
26
Assets/_Project/Scripts/GameFlow/GameSelectionState.cs
Normal file
26
Assets/_Project/Scripts/GameFlow/GameSelectionState.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3fae561f4c80ba7459a48addd977d04d
|
||||||
62
Assets/_Project/Scripts/GameFlow/SelectedVehicleSpawner.cs
Normal file
62
Assets/_Project/Scripts/GameFlow/SelectedVehicleSpawner.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 387521603e66df147a3042280acf4f66
|
||||||
384
Assets/_Project/Scripts/GameFlow/SelectionMenuController.cs
Normal file
384
Assets/_Project/Scripts/GameFlow/SelectionMenuController.cs
Normal file
@ -0,0 +1,384 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a5d1a3f92bb756c4d8237587a81bc651
|
||||||
@ -0,0 +1,225 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4d8c0e258b3d5b74e8d179d4cc96c122
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 314cfddae3eb4784ca1f6c04a3ac82f5
|
||||||
20
Assets/_Project/Scripts/PowerUps/Core/WeaponPickup.cs
Normal file
20
Assets/_Project/Scripts/PowerUps/Core/WeaponPickup.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9ba2d729446c7924fae0c23b6f68a343
|
||||||
127
Assets/_Project/Scripts/UI/HUD/VehicleDamageHud.cs
Normal file
127
Assets/_Project/Scripts/UI/HUD/VehicleDamageHud.cs
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/_Project/Scripts/UI/HUD/VehicleDamageHud.cs.meta
Normal file
2
Assets/_Project/Scripts/UI/HUD/VehicleDamageHud.cs.meta
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0bfd334c2a5c6d34b95197adeff4252e
|
||||||
@ -42,7 +42,7 @@ namespace RaceFields.Vehicles
|
|||||||
[SerializeField] private TrailRenderer rearRightSkid;
|
[SerializeField] private TrailRenderer rearRightSkid;
|
||||||
|
|
||||||
[Header("Sounds")]
|
[Header("Sounds")]
|
||||||
[SerializeField] private bool useSounds;
|
[SerializeField] private bool useSounds = true;
|
||||||
[SerializeField] private AudioSource engineSound;
|
[SerializeField] private AudioSource engineSound;
|
||||||
[SerializeField] private AudioSource tireScreechSound;
|
[SerializeField] private AudioSource tireScreechSound;
|
||||||
|
|
||||||
@ -50,6 +50,42 @@ namespace RaceFields.Vehicles
|
|||||||
public bool IsDrifting { get; private set; }
|
public bool IsDrifting { get; private set; }
|
||||||
public bool IsTractionLocked { 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 TorquePerAccelerationStep = 50f;
|
||||||
private const float DriftVelocityThreshold = 2.5f;
|
private const float DriftVelocityThreshold = 2.5f;
|
||||||
private const float SkidVelocityThreshold = 5f;
|
private const float SkidVelocityThreshold = 5f;
|
||||||
@ -83,7 +119,7 @@ namespace RaceFields.Vehicles
|
|||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
body = GetComponent<Rigidbody>();
|
body = GetComponent<Rigidbody>();
|
||||||
AutoFindReferences();
|
ValidateRequiredReferences();
|
||||||
CacheVisualRotationOffsets();
|
CacheVisualRotationOffsets();
|
||||||
CacheWheelFriction();
|
CacheWheelFriction();
|
||||||
|
|
||||||
@ -125,9 +161,15 @@ namespace RaceFields.Vehicles
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if ENABLE_LEGACY_INPUT_MANAGER
|
||||||
throttleInput = Input.GetAxisRaw("Vertical");
|
throttleInput = Input.GetAxisRaw("Vertical");
|
||||||
steeringInput = Input.GetAxisRaw("Horizontal");
|
steeringInput = Input.GetAxisRaw("Horizontal");
|
||||||
handbrakeInput = Input.GetKey(KeyCode.Space);
|
handbrakeInput = Input.GetKey(KeyCode.Space);
|
||||||
|
#else
|
||||||
|
throttleInput = 0f;
|
||||||
|
steeringInput = 0f;
|
||||||
|
handbrakeInput = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateTelemetry()
|
private void UpdateTelemetry()
|
||||||
@ -191,7 +233,7 @@ namespace RaceFields.Vehicles
|
|||||||
throttleAxis = Mathf.MoveTowards(throttleAxis, 0f, Time.fixedDeltaTime * 10f);
|
throttleAxis = Mathf.MoveTowards(throttleAxis, 0f, Time.fixedDeltaTime * 10f);
|
||||||
ApplyMotorTorque(0f);
|
ApplyMotorTorque(0f);
|
||||||
|
|
||||||
if (!handbrakeInput)
|
if (!handbrakeInput && IsAnyWheelGrounded())
|
||||||
{
|
{
|
||||||
ApplyBrakeTorque(0f);
|
ApplyBrakeTorque(0f);
|
||||||
body.linearVelocity *= 1f / (1f + 0.025f * decelerationMultiplier);
|
body.linearVelocity *= 1f / (1f + 0.025f * decelerationMultiplier);
|
||||||
@ -223,6 +265,9 @@ namespace RaceFields.Vehicles
|
|||||||
|
|
||||||
private void ApplyDownforce()
|
private void ApplyDownforce()
|
||||||
{
|
{
|
||||||
|
if (!IsAnyWheelGrounded())
|
||||||
|
return;
|
||||||
|
|
||||||
body.AddForce(-transform.up * downforce * body.linearVelocity.magnitude, ForceMode.Force);
|
body.AddForce(-transform.up * downforce * body.linearVelocity.magnitude, ForceMode.Force);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +282,7 @@ namespace RaceFields.Vehicles
|
|||||||
|
|
||||||
if (engineSound != null)
|
if (engineSound != null)
|
||||||
{
|
{
|
||||||
if (!engineSound.isPlaying)
|
if (engineSound.clip != null && !engineSound.isPlaying)
|
||||||
engineSound.Play();
|
engineSound.Play();
|
||||||
|
|
||||||
engineSound.pitch = initialEnginePitch + body.linearVelocity.magnitude / 25f;
|
engineSound.pitch = initialEnginePitch + body.linearVelocity.magnitude / 25f;
|
||||||
@ -247,7 +292,7 @@ namespace RaceFields.Vehicles
|
|||||||
bool shouldScreech = rearWheelsGrounded && (IsDrifting || (IsTractionLocked && SpeedKmh > EffectsMinSpeedKmh));
|
bool shouldScreech = rearWheelsGrounded && (IsDrifting || (IsTractionLocked && SpeedKmh > EffectsMinSpeedKmh));
|
||||||
if (tireScreechSound != null)
|
if (tireScreechSound != null)
|
||||||
{
|
{
|
||||||
if (shouldScreech && !tireScreechSound.isPlaying)
|
if (shouldScreech && tireScreechSound.clip != null && !tireScreechSound.isPlaying)
|
||||||
tireScreechSound.Play();
|
tireScreechSound.Play();
|
||||||
else if (!shouldScreech && tireScreechSound.isPlaying)
|
else if (!shouldScreech && tireScreechSound.isPlaying)
|
||||||
tireScreechSound.Stop();
|
tireScreechSound.Stop();
|
||||||
@ -304,7 +349,7 @@ namespace RaceFields.Vehicles
|
|||||||
|
|
||||||
private void ApplySidewaysFriction(WheelCollider wheel, ref WheelFrictionCurve friction, float defaultExtremumSlip, float drift)
|
private void ApplySidewaysFriction(WheelCollider wheel, ref WheelFrictionCurve friction, float defaultExtremumSlip, float drift)
|
||||||
{
|
{
|
||||||
if (wheel == null)
|
if (wheel == null || !wheel.enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
float driftExtremumSlip = defaultExtremumSlip * handbrakeDriftMultiplier;
|
float driftExtremumSlip = defaultExtremumSlip * handbrakeDriftMultiplier;
|
||||||
@ -330,25 +375,25 @@ namespace RaceFields.Vehicles
|
|||||||
|
|
||||||
private static void SetSteerAngle(WheelCollider wheel, float angle, float lerp)
|
private static void SetSteerAngle(WheelCollider wheel, float angle, float lerp)
|
||||||
{
|
{
|
||||||
if (wheel != null)
|
if (wheel != null && wheel.enabled)
|
||||||
wheel.steerAngle = Mathf.Lerp(wheel.steerAngle, angle, lerp);
|
wheel.steerAngle = Mathf.Lerp(wheel.steerAngle, angle, lerp);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetDriveTorque(WheelCollider wheel, float torque)
|
private static void SetDriveTorque(WheelCollider wheel, float torque)
|
||||||
{
|
{
|
||||||
if (wheel != null)
|
if (wheel != null && wheel.enabled)
|
||||||
wheel.motorTorque = torque;
|
wheel.motorTorque = torque;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetBrakeTorque(WheelCollider wheel, float torque)
|
private static void SetBrakeTorque(WheelCollider wheel, float torque)
|
||||||
{
|
{
|
||||||
if (wheel != null)
|
if (wheel != null && wheel.enabled)
|
||||||
wheel.brakeTorque = torque;
|
wheel.brakeTorque = torque;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SyncWheelVisual(WheelCollider collider, Transform visual, Quaternion visualRotationOffset)
|
private static void SyncWheelVisual(WheelCollider collider, Transform visual, Quaternion visualRotationOffset)
|
||||||
{
|
{
|
||||||
if (collider == null || visual == null)
|
if (collider == null || !collider.enabled || visual == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
collider.GetWorldPose(out Vector3 position, out Quaternion rotation);
|
collider.GetWorldPose(out Vector3 position, out Quaternion rotation);
|
||||||
@ -382,7 +427,15 @@ namespace RaceFields.Vehicles
|
|||||||
|
|
||||||
private static bool IsWheelGrounded(WheelCollider wheel)
|
private static bool IsWheelGrounded(WheelCollider wheel)
|
||||||
{
|
{
|
||||||
return wheel != null && wheel.isGrounded;
|
return wheel != null && wheel.enabled && wheel.isGrounded;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsAnyWheelGrounded()
|
||||||
|
{
|
||||||
|
return IsWheelGrounded(frontLeftCollider) ||
|
||||||
|
IsWheelGrounded(frontRightCollider) ||
|
||||||
|
IsWheelGrounded(rearLeftCollider) ||
|
||||||
|
IsWheelGrounded(rearRightCollider);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void StopAudio(AudioSource source)
|
private static void StopAudio(AudioSource source)
|
||||||
@ -391,22 +444,13 @@ namespace RaceFields.Vehicles
|
|||||||
source.Stop();
|
source.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AutoFindReferences()
|
private void ValidateRequiredReferences()
|
||||||
{
|
{
|
||||||
frontLeftCollider ??= FindChildComponent<WheelCollider>("WheelCollider_FL");
|
if (frontLeftCollider != null && frontRightCollider != null && rearLeftCollider != null && rearRightCollider != null)
|
||||||
frontRightCollider ??= FindChildComponent<WheelCollider>("WheelCollider_FR");
|
return;
|
||||||
rearLeftCollider ??= FindChildComponent<WheelCollider>("WheelCollider_RL");
|
|
||||||
rearRightCollider ??= FindChildComponent<WheelCollider>("WheelCollider_RR");
|
|
||||||
|
|
||||||
frontLeftVisual ??= FindFirstChildTransform("F_L", "WheelVisual_FL");
|
Debug.LogError($"{name} is missing one or more wheel collider references.", this);
|
||||||
frontRightVisual ??= FindFirstChildTransform("F_R", "WheelVisual_FR");
|
enabled = false;
|
||||||
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()
|
private void CacheVisualRotationOffsets()
|
||||||
@ -425,34 +469,5 @@ namespace RaceFields.Vehicles
|
|||||||
return Quaternion.Inverse(collider.transform.rotation) * visual.rotation;
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,89 +0,0 @@
|
|||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 5f00271deee9d014d92d5672e1fe2baa
|
|
||||||
10
Assets/_Project/Scripts/Vehicles/Wheels/WheelSlot.cs
Normal file
10
Assets/_Project/Scripts/Vehicles/Wheels/WheelSlot.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
namespace RaceFields.Vehicles
|
||||||
|
{
|
||||||
|
public enum WheelSlot
|
||||||
|
{
|
||||||
|
FrontLeft,
|
||||||
|
FrontRight,
|
||||||
|
RearLeft,
|
||||||
|
RearRight
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 56b479bfe048d174ab8a31e6e5ffb13c
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 89aedc67121ea4f4c98085bc8c9ad0d4
|
||||||
81
Assets/_Project/Scripts/Weapons/Guns/BulletProjectile.cs
Normal file
81
Assets/_Project/Scripts/Weapons/Guns/BulletProjectile.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9a787488e597d6a4ca2a4d452e6ee62a
|
||||||
151
Assets/_Project/Scripts/Weapons/Guns/MachineGunWeapon.cs
Normal file
151
Assets/_Project/Scripts/Weapons/Guns/MachineGunWeapon.cs
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d3422cd562818d448a78afdc747d8166
|
||||||
1078
Assets/_Recovery/0 (3).unity
Normal file
1078
Assets/_Recovery/0 (3).unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/_Recovery/0 (3).unity.meta
Normal file
7
Assets/_Recovery/0 (3).unity.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bafbd2a0515a0f9428d348bd954e9327
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.coplaydev.unity-mcp": "https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main",
|
"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.2d.sprite": "1.0.0",
|
||||||
"com.unity.ai.navigation": "2.0.13",
|
"com.unity.ai.navigation": "2.0.13",
|
||||||
"com.unity.collab-proxy": "2.12.4",
|
"com.unity.collab-proxy": "2.12.4",
|
||||||
|
|||||||
@ -17,12 +17,47 @@
|
|||||||
},
|
},
|
||||||
"hash": "11836003a5e2ffcb7715ecec7e1fbb9d9cdb5bb8"
|
"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": {
|
"com.unity.2d.sprite": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
"source": "builtin",
|
"source": "builtin",
|
||||||
"dependencies": {}
|
"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": {
|
"com.unity.ai.navigation": {
|
||||||
"version": "2.0.13",
|
"version": "2.0.13",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
@ -106,7 +141,7 @@
|
|||||||
},
|
},
|
||||||
"com.unity.mathematics": {
|
"com.unity.mathematics": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"depth": 3,
|
"depth": 2,
|
||||||
"source": "builtin",
|
"source": "builtin",
|
||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -6,7 +6,10 @@ EditorBuildSettings:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Scenes:
|
m_Scenes:
|
||||||
- enabled: 1
|
- enabled: 1
|
||||||
path: Assets/Scenes/SampleScene.unity
|
path: Assets/_Project/Scenes/Selection Scene.unity
|
||||||
guid: 99c9720ab356a0642a771bea13969a05
|
guid: c8d93f5e005091249906eb8692282a9d
|
||||||
|
- enabled: 1
|
||||||
|
path: Assets/_Project/Scenes/Demo Scene.unity
|
||||||
|
guid: 5436e608397e56d45ae30baac88cdb0b
|
||||||
m_configObjects:
|
m_configObjects:
|
||||||
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
|
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user