Added RocketAssemblyStation and ReadyRocket

This commit is contained in:
2026-08-18 16:12:00 +03:00
parent 7a0ee6b519
commit 63d2836dc9
85 changed files with 15087 additions and 3562 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e11cd31b8d772fa40aaeed009ebc787c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2c4477c5161884f45bf73386750a54a9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 062bd27f57877104e8de5957e97004d2
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,841 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6321035541053960715
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8870682120697911172}
- component: {fileID: 6814201728056551981}
- component: {fileID: 8713602428283936787}
- component: {fileID: 3626443536006699979}
- component: {fileID: 3943566433992735483}
- component: {fileID: 3571166329619529634}
m_Layer: 0
m_Name: Art-Rocket-Base-Standart-Ready
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8870682120697911172
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6321035541053960715}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
--- !u!114 &6814201728056551981
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6321035541053960715}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8233d90336aea43098adf6dbabd606a2, type: 3}
m_Name:
m_EditorClassIdentifier:
m_MeshFormatVersion: 2
m_Faces:
- m_Indexes: 000000000100000002000000010000000300000002000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 040000000500000006000000050000000700000006000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 08000000090000000a000000090000000b0000000a000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 0c0000000d0000000e0000000d0000000f0000000e000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 100000001100000012000000110000001300000012000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 140000001500000016000000150000001700000016000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 18000000190000001a000000190000001b0000001a000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 1c0000001d0000001e0000001d0000001f0000001e000000
m_SmoothingGroup: 1
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 220000002100000020000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 280000002700000026000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 2e0000002d0000002c000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 340000003300000032000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 3a0000003900000038000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 400000003f0000003e000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 460000004500000044000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 4c0000004b0000004a000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 230000002400000025000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 290000002a0000002b000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 2f0000003000000031000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 350000003600000037000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 3b0000003c0000003d000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 410000004200000043000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 470000004800000049000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 4d0000004e0000004f000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
m_SharedVertices:
- m_Vertices: 000000001e000000200000004c000000
- m_Vertices: 010000001f000000230000004f000000
- m_Vertices: 02000000040000002200000026000000
- m_Vertices: 03000000050000002500000029000000
- m_Vertices: 0600000008000000280000002c000000
- m_Vertices: 07000000090000002b0000002f000000
- m_Vertices: 0a0000000c0000002e00000032000000
- m_Vertices: 0b0000000d0000003100000035000000
- m_Vertices: 0e000000100000003400000038000000
- m_Vertices: 0f00000011000000370000003b000000
- m_Vertices: 12000000140000003a0000003e000000
- m_Vertices: 13000000150000003d00000041000000
- m_Vertices: 16000000180000004000000044000000
- m_Vertices: 17000000190000004300000047000000
- m_Vertices: 1a0000001c000000460000004a000000
- m_Vertices: 1b0000001d000000490000004d000000
- m_Vertices: 21000000270000002d00000033000000390000003f000000450000004b000000
- m_Vertices: 240000002a00000030000000360000003c00000042000000480000004e000000
m_SharedTextures: []
m_Positions:
- {x: 0.23294646, y: -0.39327478, z: 0}
- {x: 0.23294646, y: 0.3932747, z: 0}
- {x: 0.16471802, y: -0.39327478, z: 0.16832069}
- {x: 0.16471802, y: 0.3932747, z: 0.16832069}
- {x: 0.16471802, y: -0.39327478, z: 0.16832069}
- {x: 0.16471802, y: 0.3932747, z: 0.16832069}
- {x: -0.000000009313226, y: -0.39327478, z: 0.2380414}
- {x: -0.000000009313226, y: 0.3932747, z: 0.2380414}
- {x: -0.000000009313226, y: -0.39327478, z: 0.2380414}
- {x: -0.000000009313226, y: 0.3932747, z: 0.2380414}
- {x: -0.16471802, y: -0.39327478, z: 0.16832069}
- {x: -0.16471802, y: 0.3932747, z: 0.16832069}
- {x: -0.16471802, y: -0.39327478, z: 0.16832069}
- {x: -0.16471802, y: 0.3932747, z: 0.16832069}
- {x: -0.23294646, y: -0.39327478, z: -0.000000020489097}
- {x: -0.23294646, y: 0.3932747, z: -0.000000020489097}
- {x: -0.23294646, y: -0.39327478, z: -0.000000020489097}
- {x: -0.23294646, y: 0.3932747, z: -0.000000020489097}
- {x: -0.16471803, y: -0.39327478, z: -0.16832067}
- {x: -0.16471803, y: 0.3932747, z: -0.16832067}
- {x: -0.16471803, y: -0.39327478, z: -0.16832067}
- {x: -0.16471803, y: 0.3932747, z: -0.16832067}
- {x: 0.0000000018626451, y: -0.39327478, z: -0.2380414}
- {x: 0.0000000018626451, y: 0.3932747, z: -0.2380414}
- {x: 0.0000000018626451, y: -0.39327478, z: -0.2380414}
- {x: 0.0000000018626451, y: 0.3932747, z: -0.2380414}
- {x: 0.16471799, y: -0.39327478, z: -0.16832072}
- {x: 0.16471799, y: 0.3932747, z: -0.16832072}
- {x: 0.16471799, y: -0.39327478, z: -0.16832072}
- {x: 0.16471799, y: 0.3932747, z: -0.16832072}
- {x: 0.23294646, y: -0.39327478, z: 0}
- {x: 0.23294646, y: 0.3932747, z: 0}
- {x: 0.23294646, y: -0.39327478, z: 0}
- {x: 0, y: -0.39327478, z: 0}
- {x: 0.16471802, y: -0.39327478, z: 0.16832069}
- {x: 0.23294646, y: 0.3932747, z: 0}
- {x: 0, y: 0.3932747, z: 0}
- {x: 0.16471802, y: 0.3932747, z: 0.16832069}
- {x: 0.16471802, y: -0.39327478, z: 0.16832069}
- {x: 0, y: -0.39327478, z: 0}
- {x: -0.000000009313226, y: -0.39327478, z: 0.2380414}
- {x: 0.16471802, y: 0.3932747, z: 0.16832069}
- {x: 0, y: 0.3932747, z: 0}
- {x: -0.000000009313226, y: 0.3932747, z: 0.2380414}
- {x: -0.000000009313226, y: -0.39327478, z: 0.2380414}
- {x: 0, y: -0.39327478, z: 0}
- {x: -0.16471802, y: -0.39327478, z: 0.16832069}
- {x: -0.000000009313226, y: 0.3932747, z: 0.2380414}
- {x: 0, y: 0.3932747, z: 0}
- {x: -0.16471802, y: 0.3932747, z: 0.16832069}
- {x: -0.16471802, y: -0.39327478, z: 0.16832069}
- {x: 0, y: -0.39327478, z: 0}
- {x: -0.23294646, y: -0.39327478, z: -0.000000020489097}
- {x: -0.16471802, y: 0.3932747, z: 0.16832069}
- {x: 0, y: 0.3932747, z: 0}
- {x: -0.23294646, y: 0.3932747, z: -0.000000020489097}
- {x: -0.23294646, y: -0.39327478, z: -0.000000020489097}
- {x: 0, y: -0.39327478, z: 0}
- {x: -0.16471803, y: -0.39327478, z: -0.16832067}
- {x: -0.23294646, y: 0.3932747, z: -0.000000020489097}
- {x: 0, y: 0.3932747, z: 0}
- {x: -0.16471803, y: 0.3932747, z: -0.16832067}
- {x: -0.16471803, y: -0.39327478, z: -0.16832067}
- {x: 0, y: -0.39327478, z: 0}
- {x: 0.0000000018626451, y: -0.39327478, z: -0.2380414}
- {x: -0.16471803, y: 0.3932747, z: -0.16832067}
- {x: 0, y: 0.3932747, z: 0}
- {x: 0.0000000018626451, y: 0.3932747, z: -0.2380414}
- {x: 0.0000000018626451, y: -0.39327478, z: -0.2380414}
- {x: 0, y: -0.39327478, z: 0}
- {x: 0.16471799, y: -0.39327478, z: -0.16832072}
- {x: 0.0000000018626451, y: 0.3932747, z: -0.2380414}
- {x: 0, y: 0.3932747, z: 0}
- {x: 0.16471799, y: 0.3932747, z: -0.16832072}
- {x: 0.16471799, y: -0.39327478, z: -0.16832072}
- {x: 0, y: -0.39327478, z: 0}
- {x: 0.23294646, y: -0.39327478, z: 0}
- {x: 0.16471799, y: 0.3932747, z: -0.16832072}
- {x: 0, y: 0.3932747, z: 0}
- {x: 0.23294646, y: 0.3932747, z: 0}
m_Textures0:
- {x: -0.087508515, y: -0.39327478}
- {x: -0.087508515, y: 0.3932747}
- {x: 0.09411465, y: -0.39327478}
- {x: 0.09411465, y: 0.3932747}
- {x: -0.08607896, y: -0.39327478}
- {x: -0.08607896, y: 0.3932747}
- {x: 0.09278694, y: -0.39327478}
- {x: 0.09278694, y: 0.3932747}
- {x: -0.092786945, y: -0.39327478}
- {x: -0.092786945, y: 0.3932747}
- {x: 0.086078934, y: -0.39327478}
- {x: 0.086078934, y: 0.3932747}
- {x: -0.094114654, y: -0.39327478}
- {x: -0.094114654, y: 0.3932747}
- {x: 0.08750852, y: -0.39327478}
- {x: 0.08750852, y: 0.3932747}
- {x: -0.087508485, y: -0.39327478}
- {x: -0.087508485, y: 0.3932747}
- {x: 0.09411463, y: -0.39327478}
- {x: 0.09411463, y: 0.3932747}
- {x: -0.08607896, y: -0.39327478}
- {x: -0.08607896, y: 0.3932747}
- {x: 0.092786945, y: -0.39327478}
- {x: 0.092786945, y: 0.3932747}
- {x: -0.09278691, y: -0.39327478}
- {x: -0.09278691, y: 0.3932747}
- {x: 0.086078934, y: -0.39327478}
- {x: 0.086078934, y: 0.3932747}
- {x: -0.09411467, y: -0.39327478}
- {x: -0.09411467, y: 0.3932747}
- {x: 0.08750854, y: -0.39327478}
- {x: 0.08750854, y: 0.3932747}
- {x: -0.23294646, y: 0}
- {x: 0, y: 0}
- {x: -0.16471802, y: 0.16832069}
- {x: 0.23294646, y: 0}
- {x: 0, y: 0}
- {x: 0.16471802, y: 0.16832069}
- {x: -0.16471802, y: 0.16832069}
- {x: 0, y: 0}
- {x: 0.000000009313226, y: 0.2380414}
- {x: 0.16471802, y: 0.16832069}
- {x: 0, y: 0}
- {x: -0.000000009313226, y: 0.2380414}
- {x: 0.000000009313226, y: 0.2380414}
- {x: 0, y: 0}
- {x: 0.16471802, y: 0.16832069}
- {x: -0.000000009313226, y: 0.2380414}
- {x: 0, y: 0}
- {x: -0.16471802, y: 0.16832069}
- {x: 0.16471802, y: 0.16832069}
- {x: 0, y: 0}
- {x: 0.23294646, y: -0.000000020489097}
- {x: -0.16471802, y: 0.16832069}
- {x: 0, y: 0}
- {x: -0.23294646, y: -0.000000020489097}
- {x: 0.23294646, y: -0.000000020489097}
- {x: 0, y: 0}
- {x: 0.16471803, y: -0.16832067}
- {x: -0.23294646, y: -0.000000020489097}
- {x: 0, y: 0}
- {x: -0.16471803, y: -0.16832067}
- {x: 0.16471803, y: -0.16832067}
- {x: 0, y: 0}
- {x: -0.0000000018626451, y: -0.2380414}
- {x: -0.16471803, y: -0.16832067}
- {x: 0, y: 0}
- {x: 0.0000000018626451, y: -0.2380414}
- {x: -0.0000000018626451, y: -0.2380414}
- {x: 0, y: 0}
- {x: -0.16471799, y: -0.16832072}
- {x: 0.0000000018626451, y: -0.2380414}
- {x: 0, y: 0}
- {x: 0.16471799, y: -0.16832072}
- {x: -0.16471799, y: -0.16832072}
- {x: 0, y: 0}
- {x: -0.23294646, y: 0}
- {x: 0.16471799, y: -0.16832072}
- {x: 0, y: 0}
- {x: 0.23294646, y: 0}
m_Textures2: []
m_Textures3: []
m_Tangents:
- {x: 0.00000006431523, y: 0, z: 1, w: -1}
- {x: 0.00000006431523, y: 0, z: 1, w: -1}
- {x: -0.70167714, y: 0, z: 0.712495, w: -1}
- {x: -0.70167714, y: 0, z: 0.712495, w: -1}
- {x: -0.70167714, y: 0, z: 0.712495, w: -1}
- {x: -0.70167714, y: 0, z: 0.712495, w: -1}
- {x: -1, y: 0, z: -0.000000032362085, w: -1}
- {x: -1, y: 0, z: -0.000000032362085, w: -1}
- {x: -1, y: 0, z: -0.000000032362088, w: -1}
- {x: -1, y: 0, z: -0.000000032362088, w: -1}
- {x: -0.7016771, y: 0, z: -0.7124951, w: -1}
- {x: -0.7016771, y: 0, z: -0.7124951, w: -1}
- {x: -0.7016771, y: 0, z: -0.7124951, w: -1}
- {x: -0.7016771, y: 0, z: -0.7124951, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0.70167714, y: 0, z: -0.7124951, w: -1}
- {x: 0.70167714, y: 0, z: -0.7124951, w: -1}
- {x: 0.7016771, y: 0, z: -0.7124951, w: -1}
- {x: 0.7016771, y: 0, z: -0.7124951, w: -1}
- {x: 1, y: 0, z: -0.000000064724176, w: -1}
- {x: 1, y: 0, z: -0.000000064724176, w: -1}
- {x: 1, y: 0, z: -0.00000006472417, w: -1}
- {x: 1, y: 0, z: -0.00000006472417, w: -1}
- {x: 0.7016772, y: 0, z: 0.71249497, w: -1}
- {x: 0.7016772, y: 0, z: 0.71249497, w: -1}
- {x: 0.7016772, y: 0, z: 0.71249497, w: -1}
- {x: 0.7016772, y: 0, z: 0.71249497, w: -1}
- {x: 0.000000032157615, y: 0, z: 1, w: -1}
- {x: 0.000000032157615, y: 0, z: 1, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
m_Colors: []
m_UnwrapParameters:
m_HardAngle: 88
m_PackMargin: 20
m_AngleError: 8
m_AreaError: 15
m_PreserveMeshAssetOnDestroy: 0
assetGuid:
m_Mesh: {fileID: 0}
m_VersionIndex: 3139
m_IsSelectable: 1
m_SelectedFaces:
m_SelectedEdges: []
m_SelectedVertices:
--- !u!114 &8713602428283936787
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6321035541053960715}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1ca002da428252441b92f28d83c8a65f, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Shape:
rid: 7027693638748209508
m_ShapeRotation: {x: 0, y: 0, z: 0, w: 1}
m_UnmodifiedMeshVersion: 3115
m_Size: {x: -0.4658929, y: 0.78654945, z: -0.4760828}
m_LocalCenter: {x: -0.017053576, y: 0.24327472, z: -0.011958599}
references:
version: 2
RefIds:
- rid: 7027693638748209508
type: {class: Cylinder, ns: UnityEngine.ProBuilder.Shapes, asm: Unity.ProBuilder}
data:
m_AxisDivisions: 8
m_HeightCuts: 0
m_Smooth: 1
--- !u!23 &3626443536006699979
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6321035541053960715}
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_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: b5105128d172c0845ad6abd7e9e1e954, 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: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &3943566433992735483
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6321035541053960715}
m_Mesh: {fileID: 0}
--- !u!64 &3571166329619529634
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6321035541053960715}
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: 5
m_Convex: 1
m_CookingOptions: 30
m_Mesh: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: fc1bca70dd8037548bb281a45943692a
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,840 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &526987172509690324
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3353470006307479721}
- component: {fileID: 888543468160113604}
- component: {fileID: 8799140724087067420}
- component: {fileID: 5400804234787623735}
- component: {fileID: 2877718475183630502}
- component: {fileID: 168293303573165576}
m_Layer: 0
m_Name: Art-Rocket-Cone-Standart-Ready
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3353470006307479721
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 526987172509690324}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.3939972, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &888543468160113604
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 526987172509690324}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8233d90336aea43098adf6dbabd606a2, type: 3}
m_Name:
m_EditorClassIdentifier:
m_MeshFormatVersion: 2
m_Faces:
- m_Indexes: 020000000100000000000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 6
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 030000000400000005000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 080000000700000006000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 090000000a0000000b000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 0e0000000d0000000c000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 0f0000001000000011000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 140000001300000012000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 150000001600000017000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 1a0000001900000018000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 1b0000001c0000001d000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 200000001f0000001e000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 210000002200000023000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 260000002500000024000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 270000002800000029000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 2c0000002b0000002a000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 1
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 2d0000002e0000002f000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 2100000, guid: c22777d6e868e4f2fb421913386b154e, type: 2}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: 0
m_TextureGroup: -1
- m_Indexes: 300000003100000032000000310000003300000032000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 340000003500000036000000350000003700000036000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 38000000390000003a000000390000003b0000003a000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 3c0000003d0000003e0000003d0000003f0000003e000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 400000004100000042000000410000004300000042000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 440000004500000046000000450000004700000046000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 48000000490000004a000000490000004b0000004a000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
- m_Indexes: 4c0000004d0000004e0000004d0000004f0000004e000000
m_SmoothingGroup: 0
m_Uv:
m_UseWorldSpace: 0
m_FlipU: 0
m_FlipV: 0
m_SwapUV: 0
m_Fill: 1
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Rotation: 0
m_Anchor: 9
m_Material: {fileID: 0}
m_SubmeshIndex: 0
m_ManualUV: 0
elementGroup: -1
m_TextureGroup: -1
m_SharedVertices:
- m_Vertices: 000000002b000000490000004c000000
- m_Vertices: 030000002e0000004b0000004e000000
- m_Vertices: 0100000006000000300000004d000000
- m_Vertices: 0400000009000000320000004f000000
- m_Vertices: 02000000080000000e000000140000001a00000020000000260000002c000000
- m_Vertices: 050000000b00000011000000170000001d00000023000000290000002f000000
- m_Vertices: 070000000c0000003100000038000000
- m_Vertices: 0a0000000f000000330000003a000000
- m_Vertices: 0d000000120000003400000039000000
- m_Vertices: 1000000015000000360000003b000000
- m_Vertices: 1300000018000000350000003c000000
- m_Vertices: 160000001b000000370000003e000000
- m_Vertices: 190000001e0000003d00000040000000
- m_Vertices: 1c000000210000003f00000042000000
- m_Vertices: 1f000000240000004100000044000000
- m_Vertices: 22000000270000004300000046000000
- m_Vertices: 250000002a0000004500000048000000
- m_Vertices: 280000002d000000470000004a000000
m_SharedTextures: []
m_Positions:
- {x: 0.14696693, y: -0.23426843, z: 0}
- {x: 0.14696693, y: -0.16565275, z: 0.16565275}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: -0.23426843, z: 0}
- {x: 0, y: -0.16565275, z: 0.16565275}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: -0.16565275, z: 0.16565275}
- {x: 0.14696693, y: 0, z: 0.23426819}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: -0.16565275, z: 0.16565275}
- {x: 0, y: 0, z: 0.23426819}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: 0, z: 0.23426819}
- {x: 0.14696693, y: 0.16565275, z: 0.16565275}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: 0, z: 0.23426819}
- {x: 0, y: 0.16565275, z: 0.16565275}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: 0.16565275, z: 0.16565275}
- {x: 0.14696693, y: 0.23426819, z: 0}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: 0.16565275, z: 0.16565275}
- {x: 0, y: 0.23426819, z: 0}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: 0.23426819, z: 0}
- {x: 0.14696693, y: 0.16565275, z: -0.16565275}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: 0.23426819, z: 0}
- {x: 0, y: 0.16565275, z: -0.16565275}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: 0.16565275, z: -0.16565275}
- {x: 0.14696693, y: 0, z: -0.23426843}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: 0.16565275, z: -0.16565275}
- {x: 0, y: 0, z: -0.23426843}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: 0, z: -0.23426843}
- {x: 0.14696693, y: -0.16565275, z: -0.16565299}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: 0, z: -0.23426843}
- {x: 0, y: -0.16565275, z: -0.16565299}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: -0.16565275, z: -0.16565299}
- {x: 0.14696693, y: -0.23426843, z: 0}
- {x: 0.8359541, y: 0, z: 0}
- {x: 0, y: -0.16565275, z: -0.16565299}
- {x: 0, y: -0.23426843, z: 0}
- {x: 0, y: 0, z: 0}
- {x: 0.14696693, y: -0.16565275, z: 0.16565275}
- {x: 0.14696693, y: 0, z: 0.23426819}
- {x: 0, y: -0.16565275, z: 0.16565275}
- {x: 0, y: 0, z: 0.23426819}
- {x: 0.14696693, y: 0.16565275, z: 0.16565275}
- {x: 0.14696693, y: 0.23426819, z: 0}
- {x: 0, y: 0.16565275, z: 0.16565275}
- {x: 0, y: 0.23426819, z: 0}
- {x: 0.14696693, y: 0, z: 0.23426819}
- {x: 0.14696693, y: 0.16565275, z: 0.16565275}
- {x: 0, y: 0, z: 0.23426819}
- {x: 0, y: 0.16565275, z: 0.16565275}
- {x: 0.14696693, y: 0.23426819, z: 0}
- {x: 0.14696693, y: 0.16565275, z: -0.16565275}
- {x: 0, y: 0.23426819, z: 0}
- {x: 0, y: 0.16565275, z: -0.16565275}
- {x: 0.14696693, y: 0.16565275, z: -0.16565275}
- {x: 0.14696693, y: 0, z: -0.23426843}
- {x: 0, y: 0.16565275, z: -0.16565275}
- {x: 0, y: 0, z: -0.23426843}
- {x: 0.14696693, y: 0, z: -0.23426843}
- {x: 0.14696693, y: -0.16565275, z: -0.16565299}
- {x: 0, y: 0, z: -0.23426843}
- {x: 0, y: -0.16565275, z: -0.16565299}
- {x: 0.14696693, y: -0.16565275, z: -0.16565299}
- {x: 0.14696693, y: -0.23426843, z: 0}
- {x: 0, y: -0.16565275, z: -0.16565299}
- {x: 0, y: -0.23426843, z: 0}
- {x: 0.14696693, y: -0.23426843, z: 0}
- {x: 0.14696693, y: -0.16565275, z: 0.16565275}
- {x: 0, y: -0.23426843, z: 0}
- {x: 0, y: -0.16565275, z: 0.16565275}
m_Textures0:
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: 0, y: -0.23426843}
- {x: -0.16565275, y: -0.16565275}
- {x: 0, y: 0}
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: -0.16565275, y: -0.16565275}
- {x: -0.23426819, y: 0}
- {x: 0, y: 0}
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: -0.23426819, y: 0}
- {x: -0.16565275, y: 0.16565275}
- {x: 0, y: 0}
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: -0.16565275, y: 0.16565275}
- {x: 0, y: 0.23426819}
- {x: 0, y: 0}
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: 0, y: 0.23426819}
- {x: 0.16565275, y: 0.16565275}
- {x: 0, y: 0}
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: 0.16565275, y: 0.16565275}
- {x: 0.23426843, y: 0}
- {x: 0, y: 0}
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: 0.23426843, y: 0}
- {x: 0.16565299, y: -0.16565275}
- {x: 0, y: 0}
- {x: 0, y: 0}
- {x: 0.76536685, y: 0}
- {x: 0.38268346, y: 1.3614526}
- {x: 0.16565299, y: -0.16565275}
- {x: 0, y: -0.23426843}
- {x: 0, y: 0}
- {x: -0.14696693, y: -0.08965082}
- {x: -0.14696693, y: 0.089650355}
- {x: 0, y: -0.08965082}
- {x: 0, y: 0.089650355}
- {x: 0.14696693, y: 0.08965082}
- {x: 0.14696693, y: -0.089650355}
- {x: 0, y: 0.08965082}
- {x: 0, y: -0.089650355}
- {x: -0.14696693, y: -0.089650355}
- {x: -0.14696693, y: 0.08965082}
- {x: 0, y: -0.089650355}
- {x: 0, y: 0.08965082}
- {x: 0.14696693, y: 0.089650355}
- {x: 0.14696693, y: -0.08965082}
- {x: 0, y: 0.089650355}
- {x: 0, y: -0.08965082}
- {x: 0.14696693, y: 0.08965056}
- {x: 0.14696693, y: -0.089650705}
- {x: 0, y: 0.08965056}
- {x: 0, y: -0.089650705}
- {x: 0.14696693, y: 0.08965045}
- {x: 0.14696693, y: -0.08965073}
- {x: 0, y: 0.08965045}
- {x: 0, y: -0.08965073}
- {x: -0.14696693, y: -0.08965089}
- {x: -0.14696693, y: 0.0896506}
- {x: -0, y: -0.08965089}
- {x: 0, y: 0.0896506}
- {x: -0.14696693, y: -0.089650705}
- {x: -0.14696693, y: 0.08965056}
- {x: 0, y: -0.089650705}
- {x: 0, y: 0.08965056}
m_Textures2: []
m_Textures3: []
m_Tangents:
- {x: 0.00000000893166, y: 0.3826837, z: 0.92387944, w: -1}
- {x: 0.00000000893166, y: 0.3826837, z: 0.92387944, w: -1}
- {x: 0.00000000893166, y: 0.3826837, z: 0.92387944, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0.9238799, z: 0.3826826, w: -1}
- {x: 0, y: 0.9238799, z: 0.3826826, w: -1}
- {x: 0, y: 0.9238799, z: 0.3826826, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0.9238799, z: -0.3826826, w: -1}
- {x: 0, y: 0.9238799, z: -0.3826826, w: -1}
- {x: 0, y: 0.9238799, z: -0.3826826, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0.3826826, z: -0.9238799, w: -1}
- {x: 0, y: 0.3826826, z: -0.9238799, w: -1}
- {x: 0, y: 0.3826826, z: -0.9238799, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: -0.3826826, z: -0.9238799, w: -1}
- {x: 0, y: -0.3826826, z: -0.9238799, w: -1}
- {x: 0, y: -0.3826826, z: -0.9238799, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: -0.00000000893166, y: -0.92387944, z: -0.3826837, w: -1}
- {x: -0.00000000893166, y: -0.92387944, z: -0.3826837, w: -1}
- {x: -0.00000000893166, y: -0.92387944, z: -0.3826837, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: -0.9238799, z: 0.3826826, w: -1}
- {x: 0, y: -0.9238799, z: 0.3826826, w: -1}
- {x: 0, y: -0.9238799, z: 0.3826826, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: -0.38268325, z: 0.9238796, w: -1}
- {x: 0, y: -0.38268325, z: 0.9238796, w: -1}
- {x: 0, y: -0.38268325, z: 0.9238796, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: 0, y: 0, z: -1, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: 1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
- {x: -1, y: 0, z: 0, w: -1}
m_Colors: []
m_UnwrapParameters:
m_HardAngle: 88
m_PackMargin: 30
m_AngleError: 8
m_AreaError: 15
m_PreserveMeshAssetOnDestroy: 0
assetGuid:
m_Mesh: {fileID: 0}
m_VersionIndex: 1158
m_IsSelectable: 1
m_SelectedFaces:
m_SelectedEdges: []
m_SelectedVertices:
--- !u!114 &8799140724087067420
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 526987172509690324}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1ca002da428252441b92f28d83c8a65f, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Shape:
rid: 7027693638748209504
m_ShapeRotation: {x: 0, y: 0, z: 0, w: 1}
m_UnmodifiedMeshVersion: 23
m_Size: {x: 1, y: 1, z: 1}
m_LocalCenter: {x: 0, y: 0, z: 0}
references:
version: 2
RefIds:
- rid: 7027693638748209504
type: {class: Cone, ns: UnityEngine.ProBuilder.Shapes, asm: Unity.ProBuilder}
data:
m_NumberOfSides: 8
m_Smooth: 0
--- !u!23 &5400804234787623735
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 526987172509690324}
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_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: b5105128d172c0845ad6abd7e9e1e954, 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: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 2
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &2877718475183630502
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 526987172509690324}
m_Mesh: {fileID: 0}
--- !u!64 &168293303573165576
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 526987172509690324}
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: 5
m_Convex: 1
m_CookingOptions: 30
m_Mesh: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5f396eae569d7ec41a7e6ea86c3171b3
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 16a465183f062634e949a77fec3dcfec
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,290 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4156976002834160728
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9064729243568718407}
m_Layer: 0
m_Name: Root
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &9064729243568718407
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4156976002834160728}
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: 2448375883190538593}
- {fileID: 1388638533158472319}
- {fileID: 122570132074155272}
m_Father: {fileID: 6449878790825891253}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8990336511305880825
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6449878790825891253}
- component: {fileID: 514491035522146719}
m_Layer: 0
m_Name: Art-Ready-Rocket-Standart
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6449878790825891253
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8990336511305880825}
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: 9064729243568718407}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!136 &514491035522146719
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8990336511305880825}
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: 2
m_Radius: 0.3
m_Height: 2.6
m_Direction: 0
m_Center: {x: -0.03, y: 0, z: 0}
--- !u!1001 &1941055766474280622
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 9064729243568718407}
m_Modifications:
- target: {fileID: 2523896254232584795, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_Name
value: Rocket-Back-Standart-Ready
objectReference: {fileID: 0}
- target: {fileID: 2718550707383074721, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_VersionIndex
value: 3687
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalPosition.x
value: -0.80999756
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalRotation.w
value: 0.7071068
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalRotation.z
value: 0.7071068
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 90
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
--- !u!4 &2448375883190538593 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4254321699917979599, guid: 062bd27f57877104e8de5957e97004d2, type: 3}
m_PrefabInstance: {fileID: 1941055766474280622}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &3403208212935617953
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 9064729243568718407}
m_Modifications:
- target: {fileID: 526987172509690324, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_Name
value: Rocket-Cone-Standart-Ready
objectReference: {fileID: 0}
- target: {fileID: 888543468160113604, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_VersionIndex
value: 1167
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalPosition.x
value: 0.3939972
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
--- !u!4 &122570132074155272 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3353470006307479721, guid: 5f396eae569d7ec41a7e6ea86c3171b3, type: 3}
m_PrefabInstance: {fileID: 3403208212935617953}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &7520889334968294907
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 9064729243568718407}
m_Modifications:
- target: {fileID: 6321035541053960715, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_Name
value: Rocket-Base-Standart-Ready
objectReference: {fileID: 0}
- target: {fileID: 6814201728056551981, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_VersionIndex
value: 3148
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalRotation.w
value: 0.7071068
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalRotation.z
value: 0.7071068
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 90
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
--- !u!4 &1388638533158472319 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8870682120697911172, guid: fc1bca70dd8037548bb281a45943692a, type: 3}
m_PrefabInstance: {fileID: 7520889334968294907}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0b36d4cab828ea645bb5ab46d25c2204
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+130
View File
@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: 10f35c691ba84cc43a31218838a402a2
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
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: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,76 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M-ReadyRocketParts-1
m_Shader: {fileID: -6465566751694194690, guid: f6af76b703efb904baf6c320e80858d6, 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: {}
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- 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:
- Boolean_a1588f281f4343ff8b59f75c07bd6dc0: 0
- Checker_Contrast: 2
- Checker_Size: 100
- Metallic: 0.704
- Primary_Grid_Line_Width: 0
- Primary_Grid_Size: 50
- Projection_Transition_Contrast: 0
- Secondary_Grid_Fade_Length: 8
- Secondary_Grid_Fade_Offset: 0
- Secondary_Grid_Intensity: 0.769
- Secondary_Grid_Line_Width: 0.005
- Secondary_Grid_Size: 25
- Smoothness: 0.17
- Use_Secondary_Grid: 1
- _Grid_offset: 0
- _QueueControl: 0
- _QueueOffset: 0
m_Colors:
- Floor_Color: {r: 0.6886792, g: 0.6886792, b: 0.6886792, a: 1}
- Line_Tint: {r: 1, g: 1, b: 1, a: 1}
- Walls_Color: {r: 0.8584906, g: 0.8584906, b: 0.8584906, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &5200259067815824920
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:
version: 10
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b5105128d172c0845ad6abd7e9e1e954
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
@@ -14,5 +14,4 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: fish itemId: fish
displayName: Fish displayName: Fish
category: 0
worldPrefab: {fileID: 6820144355512337958, guid: 04a6d9d9e28782a4a9f8f71ce4438fc0, type: 3} worldPrefab: {fileID: 6820144355512337958, guid: 04a6d9d9e28782a4a9f8f71ce4438fc0, type: 3}
@@ -15,3 +15,4 @@ MonoBehaviour:
items: items:
- {fileID: 11400000, guid: dc1f8087c2120614fa0ddcf92cde7f0d, type: 2} - {fileID: 11400000, guid: dc1f8087c2120614fa0ddcf92cde7f0d, type: 2}
- {fileID: 11400000, guid: 28dfa90ac37ac884d84b4f3754b33546, type: 2} - {fileID: 11400000, guid: 28dfa90ac37ac884d84b4f3754b33546, type: 2}
- {fileID: 11400000, guid: 5353380be6a58a041bc52d32971d1d9b, type: 2}
@@ -9,10 +9,9 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f101, type: 3}
m_Name: MetalPlate m_Name: MetalPlate
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: metal_plate itemId: metal_plate
displayName: Metal Plate displayName: Metal Plate
category: 1
worldPrefab: {fileID: 2888887303011377321, guid: 29519dc5d2cfae441b261f3ca68f2290, type: 3} worldPrefab: {fileID: 2888887303011377321, guid: 29519dc5d2cfae441b261f3ca68f2290, type: 3}
@@ -9,10 +9,9 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f101, type: 3}
m_Name: MetalRod m_Name: MetalRod
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: metal_rod itemId: metal_rod
displayName: Metal Rod displayName: Metal Rod
category: 1
worldPrefab: {fileID: 6071798070859371582, guid: 5cf4d9e867c084847ba82c56bddc456b, type: 3} worldPrefab: {fileID: 6071798070859371582, guid: 5cf4d9e867c084847ba82c56bddc456b, type: 3}
@@ -9,11 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Back-Standart-Ready m_Name: Rocket-Back-Standart-Ready
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-back-standart-ready itemId: rocket-back-standart-ready
displayName: Rocket-Back-Standart-Ready displayName: Rocket-Back-Standart-Ready
category: 2 partTypeId: rocket-back-standard
isAssemblyReady: 1 processingState: 1
worldPrefab: {fileID: 5195529150077527847, guid: ea8e439364ce6aa4dab3586bae0edfed, type: 3} worldPrefab: {fileID: 5195529150077527847, guid: ea8e439364ce6aa4dab3586bae0edfed, type: 3}
@@ -9,11 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Base-Avia-Ready m_Name: Rocket-Base-Avia-Ready
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-base-avia-ready itemId: rocket-base-avia-ready
displayName: Rocket-Base-Avia-Ready displayName: Rocket-Base-Avia-Ready
category: 2 partTypeId: rocket-base-avia
isAssemblyReady: 1 processingState: 1
worldPrefab: {fileID: 1256934312238460503, guid: 9712e2459410a6d43b55ea9d3847e29a, type: 3} worldPrefab: {fileID: 1256934312238460503, guid: 9712e2459410a6d43b55ea9d3847e29a, type: 3}
@@ -9,11 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Base-Standart-Ready m_Name: Rocket-Base-Standart-Ready
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-base-standart-ready itemId: rocket-base-standart-ready
displayName: Rocket-Base-Standart-Ready displayName: Rocket-Base-Standart-Ready
category: 2 partTypeId: rocket-base-standard
isAssemblyReady: 1 processingState: 1
worldPrefab: {fileID: 875723161486981202, guid: 6e681ca5358fff648ba85ae9e494fa77, type: 3} worldPrefab: {fileID: 875723161486981202, guid: 6e681ca5358fff648ba85ae9e494fa77, type: 3}
@@ -9,11 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Cone-Standart-Ready m_Name: Rocket-Cone-Standart-Ready
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-cone-standart-ready itemId: rocket-cone-standart-ready
displayName: Rocket-Cone-Standart-Ready displayName: Rocket-Cone-Standart-Ready
category: 2 partTypeId: rocket-cone-standard
isAssemblyReady: 1 processingState: 1
worldPrefab: {fileID: 7151289907260619783, guid: a31204f69b185d54ab9e12b0a3a1e98b, type: 3} worldPrefab: {fileID: 7151289907260619783, guid: a31204f69b185d54ab9e12b0a3a1e98b, type: 3}
@@ -9,10 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Back-Standart m_Name: Rocket-Back-Standart
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-back-standart itemId: rocket-back-standart
displayName: Rocket-Back-Standart displayName: Rocket-Back-Standart
category: 2 partTypeId: rocket-back-standard
processingState: 0
worldPrefab: {fileID: 8591287727625443167, guid: be54182e751ec4b48b7db90e8598dce1, type: 3} worldPrefab: {fileID: 8591287727625443167, guid: be54182e751ec4b48b7db90e8598dce1, type: 3}
@@ -9,10 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Base-Avia m_Name: Rocket-Base-Avia
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-base-avia itemId: rocket-base-avia
displayName: Rocket-Base-Avia displayName: Rocket-Base-Avia
category: 2 partTypeId: rocket-base-avia
processingState: 0
worldPrefab: {fileID: 1256934312238460503, guid: 9712e2459410a6d43b55ea9d3847e29a, type: 3} worldPrefab: {fileID: 1256934312238460503, guid: 9712e2459410a6d43b55ea9d3847e29a, type: 3}
@@ -9,10 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Base-Standart m_Name: Rocket-Base-Standart
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-base-standart itemId: rocket-base-standart
displayName: Rocket-Base-Standart displayName: Rocket-Base-Standart
category: 2 partTypeId: rocket-base-standard
processingState: 0
worldPrefab: {fileID: 875723161486981202, guid: 6e681ca5358fff648ba85ae9e494fa77, type: 3} worldPrefab: {fileID: 875723161486981202, guid: 6e681ca5358fff648ba85ae9e494fa77, type: 3}
@@ -9,10 +9,11 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f102, type: 3}
m_Name: Rocket-Cone-Standart m_Name: Rocket-Cone-Standart
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: rocket-cone-standart itemId: rocket-cone-standart
displayName: Rocket-Cone-Standart displayName: Rocket-Cone-Standart
category: 2 partTypeId: rocket-cone-standard
processingState: 0
worldPrefab: {fileID: 7151289907260619783, guid: a31204f69b185d54ab9e12b0a3a1e98b, type: 3} worldPrefab: {fileID: 7151289907260619783, guid: a31204f69b185d54ab9e12b0a3a1e98b, type: 3}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5d20a47f4accbbc4a993a1373834d882
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
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: d1e6d4d81ab34d2e9ee3a1bfa201f103, type: 3}
m_Name: Ready-Rocket-Standart
m_EditorClassIdentifier:
itemId: full-rocket-standart
displayName: Full-Rocket-Standart
worldPrefab: {fileID: 7456648717704822871, guid: 746f04d9ba6c87d4bae8a09287c5d090, type: 3}
rocketTypeId: standard
criticalImpactSpeed: 7
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5353380be6a58a041bc52d32971d1d9b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
+1 -2
View File
@@ -9,10 +9,9 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f101, type: 3}
m_Name: Scrap-1 m_Name: Scrap-1
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: scrap-1 itemId: scrap-1
displayName: Scrap-1 displayName: Scrap-1
category: 0
worldPrefab: {fileID: 9104915302393667013, guid: 6eee6df5dab550446b41008fa6fff89a, type: 3} worldPrefab: {fileID: 9104915302393667013, guid: 6eee6df5dab550446b41008fa6fff89a, type: 3}
+1 -2
View File
@@ -9,10 +9,9 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b0c79cebdb4201743be8612545ee180e, type: 3} m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f101, type: 3}
m_Name: Scrap-2 m_Name: Scrap-2
m_EditorClassIdentifier: m_EditorClassIdentifier:
itemId: scrap-2 itemId: scrap-2
displayName: Scrap-2 displayName: Scrap-2
category: 0
worldPrefab: {fileID: 3823145821987330810, guid: 8cc9c4d7d9e04d640bbd0616e7926670, type: 3} worldPrefab: {fileID: 3823145821987330810, guid: 8cc9c4d7d9e04d640bbd0616e7926670, type: 3}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2973313a334da044a84ce698504a5751
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 016d686fabe553e4e87d7531e66451ba
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,24 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
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: 04f3334793c14ee791f78059d0c2854c, type: 3}
m_Name: Ready-Rocket-Standart
m_EditorClassIdentifier:
recipeId: full-rocket-standart
displayName: Full-Rocket-Standart
requiredPartsBottomToTop:
- {fileID: 11400000, guid: 203427fd9de0c514887bec7c046a6f69, type: 2}
- {fileID: 11400000, guid: 218df70f83b5574428eb2159664b9b6e, type: 2}
- {fileID: 11400000, guid: a97b695af4781b34fa8cab9a97ba9d9d, type: 2}
outputItem: {fileID: 11400000, guid: 5353380be6a58a041bc52d32971d1d9b, type: 2}
assemblyDuration: 5
blueprintTitle:
blueprintImage: {fileID: 21300000, guid: 10f35c691ba84cc43a31218838a402a2, type: 3}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1cfa63174ab38cc40bb4aa962831fc25
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -21,16 +21,16 @@ public static class FurnacePipelinePrototypeSetup
EnsureFolder(ItemPrefabFolder); EnsureFolder(ItemPrefabFolder);
EnsureFolder(WorkstationPrefabFolder); EnsureFolder(WorkstationPrefabFolder);
ItemDefinition scrapDefinition = GetOrCreateAsset<ItemDefinition>( MaterialItemDefinition scrapDefinition = GetOrCreateAsset<MaterialItemDefinition>(
$"{ItemDataFolder}/Scrap.asset"); $"{ItemDataFolder}/Scrap.asset");
ItemDefinition plateDefinition = GetOrCreateAsset<ItemDefinition>( MaterialItemDefinition plateDefinition = GetOrCreateAsset<MaterialItemDefinition>(
$"{ItemDataFolder}/MetalPlate.asset"); $"{ItemDataFolder}/MetalPlate.asset");
ItemDefinition rodDefinition = GetOrCreateAsset<ItemDefinition>( MaterialItemDefinition rodDefinition = GetOrCreateAsset<MaterialItemDefinition>(
$"{ItemDataFolder}/MetalRod.asset"); $"{ItemDataFolder}/MetalRod.asset");
ConfigureItemDefinition(scrapDefinition, "scrap", "Scrap", ItemCategory.Scrap); ConfigureItemDefinition(scrapDefinition, "scrap", "Scrap");
ConfigureItemDefinition(plateDefinition, "metal_plate", "Metal Plate", ItemCategory.SmeltedMaterial); ConfigureItemDefinition(plateDefinition, "metal_plate", "Metal Plate");
ConfigureItemDefinition(rodDefinition, "metal_rod", "Metal Rod", ItemCategory.SmeltedMaterial); ConfigureItemDefinition(rodDefinition, "metal_rod", "Metal Rod");
GameObject scrapPrefab = CreateNetworkItemPrefab( GameObject scrapPrefab = CreateNetworkItemPrefab(
$"{ItemPrefabFolder}/Scrap.prefab", $"{ItemPrefabFolder}/Scrap.prefab",
@@ -195,12 +195,10 @@ public static class FurnacePipelinePrototypeSetup
private static void ConfigureItemDefinition( private static void ConfigureItemDefinition(
ItemDefinition definition, ItemDefinition definition,
string itemId, string itemId,
string displayName, string displayName)
ItemCategory category)
{ {
SetString(definition, "itemId", itemId); SetString(definition, "itemId", itemId);
SetString(definition, "displayName", displayName); SetString(definition, "displayName", displayName);
SetInt(definition, "category", (int)category);
} }
private static void ConfigureRecipe( private static void ConfigureRecipe(
@@ -0,0 +1,752 @@
using System;
using System.IO;
using Unity.Netcode;
using Unity.Netcode.Components;
using UnityEditor;
using UnityEngine;
public enum ItemCreationDefinitionKind
{
Generic,
Material,
Part,
Rocket,
Usable
}
public enum ItemCreationMovementKind
{
Carry,
Drag,
Hand,
Static
}
public sealed class ItemCreationWindow : EditorWindow
{
private const string DefaultDefinitionFolder = "Assets/CONTENT/Game/Data/Items";
private const string DefaultPrefabFolder = "Assets/CONTENT/Game/Prefabs/Items";
private const string DefaultCatalogPath =
"Assets/CONTENT/Game/Data/Items/ItemCatalog.asset";
private const string DefaultNetworkPrefabsPath = "Assets/DefaultNetworkPrefabs.asset";
[SerializeField] private string assetName = "NewItem";
[SerializeField] private string itemId = "new-item";
[SerializeField] private string displayName = "New Item";
[SerializeField] private ItemDefinition existingDefinition;
[SerializeField] private ItemCreationDefinitionKind definitionKind;
[SerializeField] private ItemCreationMovementKind movementKind =
ItemCreationMovementKind.Carry;
[SerializeField] private GameObject existingWorldPrefab;
[SerializeField] private GameObject visualPrefab;
[SerializeField] private string definitionFolder = DefaultDefinitionFolder;
[SerializeField] private string prefabFolder = DefaultPrefabFolder;
[SerializeField] private string partTypeId = "part";
[SerializeField] private PartProcessingState partProcessingState;
[SerializeField] private string rocketTypeId = "rocket";
[SerializeField] private float criticalImpactSpeed = 7f;
[SerializeField] private float dragWeight = 35f;
[SerializeField] private MonoScript handItemBehaviour;
[SerializeField] private bool addFurnaceMetalSource;
[SerializeField] private float furnaceMetalAmount = 25f;
[SerializeField] private ItemCatalog catalog;
[SerializeField] private NetworkPrefabsList networkPrefabsList;
[MenuItem("FORT-BO/Items/Item Creator")]
private static void Open()
{
ItemCreationWindow window = GetWindow<ItemCreationWindow>("Item Creator");
window.minSize = new Vector2(470f, 650f);
}
private void OnEnable()
{
if (catalog == null)
catalog = AssetDatabase.LoadAssetAtPath<ItemCatalog>(DefaultCatalogPath);
if (networkPrefabsList == null)
{
networkPrefabsList =
AssetDatabase.LoadAssetAtPath<NetworkPrefabsList>(DefaultNetworkPrefabsPath);
}
}
private void OnGUI()
{
EditorGUILayout.LabelField("Identity", EditorStyles.boldLabel);
existingDefinition = (ItemDefinition)EditorGUILayout.ObjectField(
"Existing Definition",
existingDefinition,
typeof(ItemDefinition),
false);
using (new EditorGUI.DisabledScope(existingDefinition != null))
{
assetName = EditorGUILayout.TextField("Asset Name", assetName);
itemId = EditorGUILayout.TextField("Item Id", itemId);
displayName = EditorGUILayout.TextField("Display Name", displayName);
definitionKind = (ItemCreationDefinitionKind)EditorGUILayout.EnumPopup(
"Definition Kind",
definitionKind);
}
if (existingDefinition != null)
{
EditorGUILayout.LabelField(
"Definition Kind",
GetDefinitionKind(existingDefinition).ToString());
}
movementKind = (ItemCreationMovementKind)EditorGUILayout.EnumPopup(
"Movement Kind",
movementKind);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Prefab", EditorStyles.boldLabel);
existingWorldPrefab = (GameObject)EditorGUILayout.ObjectField(
"Existing World Prefab",
existingWorldPrefab,
typeof(GameObject),
false);
bool hasWorldPrefab = ResolveExistingWorldPrefab() != null;
using (new EditorGUI.DisabledScope(hasWorldPrefab))
{
visualPrefab = (GameObject)EditorGUILayout.ObjectField(
"Visual Prefab",
visualPrefab,
typeof(GameObject),
false);
prefabFolder = EditorGUILayout.TextField("Prefab Folder", prefabFolder);
}
EditorGUILayout.HelpBox(
hasWorldPrefab
? "The existing prefab is configured in place. Existing components are preserved."
: "A new network prefab is created. Visual Prefab is added as a child and may be empty.",
MessageType.Info);
if (existingDefinition == null)
DrawDefinitionSpecificFields();
DrawMovementSpecificFields();
EditorGUILayout.Space();
EditorGUILayout.LabelField("Optional capabilities", EditorStyles.boldLabel);
addFurnaceMetalSource = EditorGUILayout.Toggle(
"Furnace Metal Source",
addFurnaceMetalSource);
if (addFurnaceMetalSource)
{
furnaceMetalAmount = EditorGUILayout.FloatField(
"Metal Amount",
furnaceMetalAmount);
}
EditorGUILayout.Space();
EditorGUILayout.LabelField("Registration", EditorStyles.boldLabel);
using (new EditorGUI.DisabledScope(existingDefinition != null))
{
definitionFolder = EditorGUILayout.TextField(
"Definition Folder",
definitionFolder);
}
catalog = (ItemCatalog)EditorGUILayout.ObjectField(
"Item Catalog",
catalog,
typeof(ItemCatalog),
false);
networkPrefabsList = (NetworkPrefabsList)EditorGUILayout.ObjectField(
"Network Prefabs List",
networkPrefabsList,
typeof(NetworkPrefabsList),
false);
EditorGUILayout.Space();
EditorGUILayout.HelpBox(
"Definition Kind describes what the item is. Movement Kind describes how its prefab " +
"is handled. They are intentionally independent.",
MessageType.None);
using (new EditorGUI.DisabledScope(EditorApplication.isPlayingOrWillChangePlaymode))
{
string buttonLabel = existingDefinition == null
? "Create and Register Item"
: "Configure and Register Item";
if (GUILayout.Button(buttonLabel, GUILayout.Height(34f)))
CreateAndRegisterItem();
}
}
private void DrawDefinitionSpecificFields()
{
switch (definitionKind)
{
case ItemCreationDefinitionKind.Part:
EditorGUILayout.Space();
EditorGUILayout.LabelField("Part", EditorStyles.boldLabel);
partTypeId = EditorGUILayout.TextField("Part Type Id", partTypeId);
partProcessingState = (PartProcessingState)EditorGUILayout.EnumPopup(
"Processing State",
partProcessingState);
break;
case ItemCreationDefinitionKind.Rocket:
EditorGUILayout.Space();
EditorGUILayout.LabelField("Rocket", EditorStyles.boldLabel);
rocketTypeId = EditorGUILayout.TextField("Rocket Type Id", rocketTypeId);
criticalImpactSpeed = EditorGUILayout.FloatField(
"Critical Impact Speed",
criticalImpactSpeed);
break;
}
}
private void DrawMovementSpecificFields()
{
switch (movementKind)
{
case ItemCreationMovementKind.Drag:
EditorGUILayout.Space();
EditorGUILayout.LabelField("Drag", EditorStyles.boldLabel);
dragWeight = EditorGUILayout.FloatField("Weight", dragWeight);
break;
case ItemCreationMovementKind.Hand:
EditorGUILayout.Space();
EditorGUILayout.LabelField("Hand", EditorStyles.boldLabel);
handItemBehaviour = (MonoScript)EditorGUILayout.ObjectField(
"Custom Hand Interactable",
handItemBehaviour,
typeof(MonoScript),
false);
EditorGUILayout.HelpBox(
"Leave empty to use NetworkUsableHandItemInteractable. Add a separate " +
"IHandItemUseAction component for the actual effect.",
MessageType.Info);
break;
}
}
private void CreateAndRegisterItem()
{
try
{
ValidateInput();
ItemDefinition definition;
string definitionPath;
string safeAssetName;
if (existingDefinition != null)
{
definition = existingDefinition;
definitionPath = AssetDatabase.GetAssetPath(definition);
safeAssetName = SanitizeFileName(definition.name);
}
else
{
EnsureFolder(definitionFolder);
safeAssetName = SanitizeFileName(assetName.Trim());
definitionPath = $"{definitionFolder}/{safeAssetName}.asset";
if (AssetDatabase.LoadMainAssetAtPath(definitionPath) != null)
{
throw new InvalidOperationException(
$"Asset already exists: {definitionPath}");
}
EnsureUniqueItemId(itemId);
definition = CreateDefinition(definitionPath);
}
GameObject worldPrefab = ConfigureOrCreateWorldPrefab(safeAssetName, definition);
SetObjectReference(
definition,
"worldPrefab",
worldPrefab.GetComponent<NetworkObject>());
RegisterInCatalog(definition);
RegisterNetworkPrefab(worldPrefab);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Selection.activeObject = definition;
EditorGUIUtility.PingObject(worldPrefab);
Debug.Log(
$"Created '{definition.DisplayName}': {definitionPath} + " +
$"{AssetDatabase.GetAssetPath(worldPrefab)}.",
definition);
}
catch (Exception exception)
{
Debug.LogException(exception);
EditorUtility.DisplayDialog("Item creation failed", exception.Message, "OK");
}
}
private void ValidateInput()
{
if (existingDefinition == null && string.IsNullOrWhiteSpace(assetName))
throw new InvalidOperationException("Asset Name is required.");
if (existingDefinition == null && string.IsNullOrWhiteSpace(itemId))
throw new InvalidOperationException("Item Id is required.");
if (existingDefinition == null &&
(string.IsNullOrWhiteSpace(definitionFolder) ||
!definitionFolder.StartsWith("Assets", StringComparison.Ordinal)))
{
throw new InvalidOperationException("Definition Folder must be inside Assets.");
}
GameObject resolvedWorldPrefab = ResolveExistingWorldPrefab();
if (resolvedWorldPrefab != null &&
!PrefabUtility.IsPartOfPrefabAsset(resolvedWorldPrefab))
{
throw new InvalidOperationException("Existing World Prefab must be a prefab asset.");
}
if (resolvedWorldPrefab != null)
ValidateExistingPrefabMovement(resolvedWorldPrefab);
if (ResolveExistingWorldPrefab() == null &&
(string.IsNullOrWhiteSpace(prefabFolder) ||
!prefabFolder.StartsWith("Assets", StringComparison.Ordinal)))
{
throw new InvalidOperationException("Prefab Folder must be inside Assets.");
}
if (movementKind == ItemCreationMovementKind.Hand)
ResolveHandItemBehaviourType();
if (EffectiveDefinitionKind == ItemCreationDefinitionKind.Rocket &&
movementKind is not ItemCreationMovementKind.Carry and
not ItemCreationMovementKind.Drag)
{
throw new InvalidOperationException(
"A rocket assembled by the workstation must use Carry or Drag movement.");
}
if (ResolveExistingWorldPrefab() == null && visualPrefab != null &&
(visualPrefab.GetComponentInChildren<NetworkObject>(true) != null ||
visualPrefab.GetComponentInChildren<Rigidbody>(true) != null))
{
throw new InvalidOperationException(
"Visual Prefab must contain visuals/colliders only, without NetworkObject or Rigidbody.");
}
if (existingDefinition == null && definitionKind == ItemCreationDefinitionKind.Part &&
string.IsNullOrWhiteSpace(partTypeId))
{
throw new InvalidOperationException("Part Type Id is required for a part.");
}
if (existingDefinition == null && definitionKind == ItemCreationDefinitionKind.Rocket &&
string.IsNullOrWhiteSpace(rocketTypeId))
{
throw new InvalidOperationException("Rocket Type Id is required for a rocket.");
}
}
private void ValidateExistingPrefabMovement(GameObject prefabAsset)
{
string prefabPath = AssetDatabase.GetAssetPath(prefabAsset);
GameObject root = PrefabUtility.LoadPrefabContents(prefabPath);
try
{
EnsureSingleMovementBehaviour(root);
}
finally
{
PrefabUtility.UnloadPrefabContents(root);
}
}
private GameObject ResolveExistingWorldPrefab()
{
if (existingWorldPrefab != null)
return existingWorldPrefab;
return existingDefinition != null && existingDefinition.WorldPrefab != null
? existingDefinition.WorldPrefab.gameObject
: null;
}
private ItemCreationDefinitionKind EffectiveDefinitionKind =>
existingDefinition != null ? GetDefinitionKind(existingDefinition) : definitionKind;
private static ItemCreationDefinitionKind GetDefinitionKind(ItemDefinition definition) =>
definition switch
{
MaterialItemDefinition => ItemCreationDefinitionKind.Material,
PartItemDefinition => ItemCreationDefinitionKind.Part,
RocketItemDefinition => ItemCreationDefinitionKind.Rocket,
UsableItemDefinition => ItemCreationDefinitionKind.Usable,
_ => ItemCreationDefinitionKind.Generic
};
private ItemDefinition CreateDefinition(string path)
{
ItemDefinition definition = definitionKind switch
{
ItemCreationDefinitionKind.Material =>
CreateInstance<MaterialItemDefinition>(),
ItemCreationDefinitionKind.Part =>
CreateInstance<PartItemDefinition>(),
ItemCreationDefinitionKind.Rocket =>
CreateInstance<RocketItemDefinition>(),
ItemCreationDefinitionKind.Usable =>
CreateInstance<UsableItemDefinition>(),
_ => CreateInstance<ItemDefinition>()
};
definition.name = assetName.Trim();
AssetDatabase.CreateAsset(definition, path);
SetString(definition, "itemId", NormalizeId(itemId));
SetString(definition, "displayName", displayName?.Trim());
if (definition is PartItemDefinition)
{
SetString(definition, "partTypeId", NormalizeId(partTypeId));
SetInt(definition, "processingState", (int)partProcessingState);
}
else if (definition is RocketItemDefinition)
{
SetString(definition, "rocketTypeId", NormalizeId(rocketTypeId));
SetFloat(definition, "criticalImpactSpeed", Mathf.Max(0.1f, criticalImpactSpeed));
}
return definition;
}
private GameObject ConfigureOrCreateWorldPrefab(
string safeAssetName,
ItemDefinition definition)
{
string prefabPath;
GameObject prefabAsset = ResolveExistingWorldPrefab();
if (prefabAsset != null)
{
prefabPath = AssetDatabase.GetAssetPath(prefabAsset);
}
else
{
EnsureFolder(prefabFolder);
prefabPath = $"{prefabFolder}/{safeAssetName}.prefab";
if (AssetDatabase.LoadMainAssetAtPath(prefabPath) != null)
throw new InvalidOperationException($"Prefab already exists: {prefabPath}");
CreateInitialPrefab(prefabPath, safeAssetName);
}
GameObject root = PrefabUtility.LoadPrefabContents(prefabPath);
try
{
ConfigurePrefabRoot(root, definition);
PrefabUtility.SaveAsPrefabAsset(root, prefabPath);
}
finally
{
PrefabUtility.UnloadPrefabContents(root);
}
return AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
}
private void CreateInitialPrefab(string prefabPath, string safeAssetName)
{
GameObject root = new(safeAssetName);
try
{
if (visualPrefab != null)
{
GameObject visual = PrefabUtility.InstantiatePrefab(visualPrefab) as GameObject;
if (visual == null)
visual = Instantiate(visualPrefab);
visual.name = "Visual";
visual.transform.SetParent(root.transform, false);
}
PrefabUtility.SaveAsPrefabAsset(root, prefabPath);
}
finally
{
DestroyImmediate(root);
}
}
private void ConfigurePrefabRoot(GameObject root, ItemDefinition definition)
{
EnsureSingleMovementBehaviour(root);
NetworkObject networkObject = GetOrAdd<NetworkObject>(root);
NetworkTransform networkTransform = GetOrAdd<NetworkTransform>(root);
networkTransform.AuthorityMode = NetworkTransform.AuthorityModes.Server;
networkTransform.UseUnreliableDeltas = true;
NetworkItem networkItem = GetOrAdd<NetworkItem>(root);
SetObjectReference(networkItem, "definition", definition);
bool needsPhysics = movementKind != ItemCreationMovementKind.Static ||
EffectiveDefinitionKind == ItemCreationDefinitionKind.Rocket;
Rigidbody body = needsPhysics ? GetOrAdd<Rigidbody>(root) : root.GetComponent<Rigidbody>();
if (body != null)
{
body.interpolation = RigidbodyInterpolation.Interpolate;
body.collisionDetectionMode = CollisionDetectionMode.Continuous;
}
if (needsPhysics)
{
NetworkRigidbody networkRigidbody = GetOrAdd<NetworkRigidbody>(root);
networkRigidbody.UseRigidBodyForMotion = true;
EnsureCollider(root);
}
switch (movementKind)
{
case ItemCreationMovementKind.Carry:
GetOrAdd<NetworkCarryableInteractable>(root);
if (body != null)
body.mass = 1f;
break;
case ItemCreationMovementKind.Drag:
NetworkDraggableInteractable draggable =
GetOrAdd<NetworkDraggableInteractable>(root);
float safeWeight = Mathf.Max(0.1f, dragWeight);
SetFloat(draggable, "weight", safeWeight);
if (body != null)
body.mass = safeWeight;
break;
case ItemCreationMovementKind.Hand:
Type handBehaviourType = ResolveHandItemBehaviourType();
if (root.GetComponent(handBehaviourType) == null)
root.AddComponent(handBehaviourType);
if (body != null)
body.mass = 0.5f;
break;
}
if (EffectiveDefinitionKind == ItemCreationDefinitionKind.Rocket)
{
GetOrAdd<NetworkRocketItem>(root);
GetOrAdd<RocketItemView>(root);
}
if (addFurnaceMetalSource)
{
FurnaceMetalSource source = GetOrAdd<FurnaceMetalSource>(root);
SetFloat(source, "metalAmount", Mathf.Max(0.01f, furnaceMetalAmount));
}
EditorUtility.SetDirty(networkObject);
}
private void EnsureSingleMovementBehaviour(GameObject root)
{
bool hasCarry = root.GetComponent<NetworkCarryableInteractable>() != null;
bool hasDrag = root.GetComponent<NetworkDraggableInteractable>() != null;
bool hasHand = root.GetComponent<NetworkHandItemInteractable>() != null;
int existingCount = (hasCarry ? 1 : 0) + (hasDrag ? 1 : 0) + (hasHand ? 1 : 0);
if (existingCount > 1)
{
throw new InvalidOperationException(
"The prefab already contains more than one movement behaviour.");
}
bool compatible = existingCount == 0 ||
(movementKind == ItemCreationMovementKind.Carry && hasCarry) ||
(movementKind == ItemCreationMovementKind.Drag && hasDrag) ||
(movementKind == ItemCreationMovementKind.Hand && hasHand);
if (!compatible)
{
throw new InvalidOperationException(
"The prefab already has a different movement behaviour. Remove or change it manually first.");
}
if (movementKind == ItemCreationMovementKind.Hand && hasHand)
{
NetworkHandItemInteractable existingHand =
root.GetComponent<NetworkHandItemInteractable>();
if (existingHand.GetType() != ResolveHandItemBehaviourType())
{
throw new InvalidOperationException(
$"The prefab already uses {existingHand.GetType().Name}, but another hand " +
"behaviour was selected.");
}
}
}
private Type ResolveHandItemBehaviourType()
{
if (handItemBehaviour == null)
return typeof(NetworkUsableHandItemInteractable);
Type type = handItemBehaviour.GetClass();
if (type == null || type.IsAbstract ||
!typeof(NetworkHandItemInteractable).IsAssignableFrom(type))
{
throw new InvalidOperationException(
"Use Behaviour must be a non-abstract NetworkHandItemInteractable script.");
}
return type;
}
private void EnsureUniqueItemId(string candidateId)
{
string normalizedId = NormalizeId(candidateId);
foreach (string guid in AssetDatabase.FindAssets("t:ItemDefinition"))
{
string path = AssetDatabase.GUIDToAssetPath(guid);
ItemDefinition definition = AssetDatabase.LoadAssetAtPath<ItemDefinition>(path);
if (definition != null && definition.ItemId == normalizedId)
{
throw new InvalidOperationException(
$"Item Id '{normalizedId}' is already used by {path}.");
}
}
}
private void RegisterInCatalog(ItemDefinition definition)
{
if (catalog == null)
return;
SerializedObject serializedCatalog = new(catalog);
SerializedProperty items = serializedCatalog.FindProperty("items");
for (int index = 0; index < items.arraySize; index++)
{
if (items.GetArrayElementAtIndex(index).objectReferenceValue == definition)
return;
}
int newIndex = items.arraySize;
items.InsertArrayElementAtIndex(newIndex);
items.GetArrayElementAtIndex(newIndex).objectReferenceValue = definition;
serializedCatalog.ApplyModifiedPropertiesWithoutUndo();
EditorUtility.SetDirty(catalog);
}
private void RegisterNetworkPrefab(GameObject prefab)
{
if (networkPrefabsList == null || networkPrefabsList.Contains(prefab))
return;
networkPrefabsList.Add(new NetworkPrefab { Prefab = prefab });
EditorUtility.SetDirty(networkPrefabsList);
}
private static T GetOrAdd<T>(GameObject gameObject) where T : Component =>
gameObject.TryGetComponent(out T component) ? component : gameObject.AddComponent<T>();
private static void EnsureCollider(GameObject root)
{
if (root.GetComponentInChildren<Collider>(true) != null)
return;
BoxCollider collider = root.AddComponent<BoxCollider>();
if (!TryCalculateLocalRendererBounds(root, out Bounds bounds))
return;
collider.center = bounds.center;
collider.size = bounds.size;
}
private static bool TryCalculateLocalRendererBounds(GameObject root, out Bounds bounds)
{
Renderer[] renderers = root.GetComponentsInChildren<Renderer>(true);
if (renderers.Length == 0)
{
bounds = new Bounds(Vector3.zero, Vector3.one);
return false;
}
bool initialized = false;
bounds = default;
foreach (Renderer renderer in renderers)
{
Bounds worldBounds = renderer.bounds;
Vector3 center = root.transform.InverseTransformPoint(worldBounds.center);
Vector3 extents = worldBounds.extents;
for (int x = -1; x <= 1; x += 2)
for (int y = -1; y <= 1; y += 2)
for (int z = -1; z <= 1; z += 2)
{
Vector3 worldCorner = worldBounds.center +
Vector3.Scale(extents, new Vector3(x, y, z));
Vector3 localCorner = root.transform.InverseTransformPoint(worldCorner);
if (!initialized)
{
bounds = new Bounds(center, Vector3.zero);
initialized = true;
}
bounds.Encapsulate(localCorner);
}
}
return initialized;
}
private static void EnsureFolder(string folderPath)
{
string normalized = folderPath.Replace('\\', '/').TrimEnd('/');
if (AssetDatabase.IsValidFolder(normalized))
return;
string parent = Path.GetDirectoryName(normalized)?.Replace('\\', '/');
string folderName = Path.GetFileName(normalized);
if (string.IsNullOrEmpty(parent) || string.IsNullOrEmpty(folderName))
throw new InvalidOperationException($"Invalid folder path: {folderPath}");
EnsureFolder(parent);
AssetDatabase.CreateFolder(parent, folderName);
}
private static string NormalizeId(string value) =>
value.Trim().ToLowerInvariant().Replace(' ', '-');
private static string SanitizeFileName(string value)
{
foreach (char invalidCharacter in Path.GetInvalidFileNameChars())
value = value.Replace(invalidCharacter, '-');
return value;
}
private static void SetString(UnityEngine.Object target, string propertyName, string value) =>
Edit(target, propertyName, property => property.stringValue = value);
private static void SetFloat(UnityEngine.Object target, string propertyName, float value) =>
Edit(target, propertyName, property => property.floatValue = value);
private static void SetInt(UnityEngine.Object target, string propertyName, int value) =>
Edit(target, propertyName, property => property.intValue = value);
private static void SetObjectReference(
UnityEngine.Object target,
string propertyName,
UnityEngine.Object value) =>
Edit(target, propertyName, property => property.objectReferenceValue = value);
private static void Edit(
UnityEngine.Object target,
string propertyName,
Action<SerializedProperty> edit)
{
SerializedObject serializedObject = new(target);
SerializedProperty property = serializedObject.FindProperty(propertyName);
if (property == null)
throw new MissingFieldException(target.GetType().Name, propertyName);
edit(property);
serializedObject.ApplyModifiedPropertiesWithoutUndo();
EditorUtility.SetDirty(target);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f120
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,357 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2376631388558761094
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1632953841127884940}
- component: {fileID: 7456648717704822871}
- component: {fileID: 7292341886911989191}
- component: {fileID: 8891747045554379344}
- component: {fileID: 3133876013448598132}
- component: {fileID: 193117245170608707}
- component: {fileID: 4269639932524941515}
- component: {fileID: 6493104616022895181}
- component: {fileID: 3635736001397410476}
m_Layer: 0
m_Name: Ready-Rocket-Standart
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1632953841127884940
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
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: 1646663282415760833}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7456648717704822871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier:
GlobalObjectIdHash: 3332465624
InScenePlacedSourceGlobalObjectIdHash: 0
DeferredDespawnTick: 0
Ownership: 1
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
m_InScenePlaced: 0
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
AllowOwnerToParent: 0
--- !u!114 &7292341886911989191
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
m_Name:
m_EditorClassIdentifier:
ShowTopMostFoldoutHeaderGroup: 1
NetworkTransformExpanded: 0
AutoOwnerAuthorityTickOffset: 1
PositionInterpolationType: 0
RotationInterpolationType: 0
ScaleInterpolationType: 0
PositionLerpSmoothing: 1
PositionMaxInterpolationTime: 0.1
RotationLerpSmoothing: 1
RotationMaxInterpolationTime: 0.1
ScaleLerpSmoothing: 1
ScaleMaxInterpolationTime: 0.1
AuthorityMode: 0
TickSyncChildren: 0
UseUnreliableDeltas: 1
SyncPositionX: 1
SyncPositionY: 1
SyncPositionZ: 1
SyncRotAngleX: 1
SyncRotAngleY: 1
SyncRotAngleZ: 1
SyncScaleX: 1
SyncScaleY: 1
SyncScaleZ: 1
PositionThreshold: 0.001
RotAngleThreshold: 0.01
ScaleThreshold: 0.01
UseQuaternionSynchronization: 0
UseQuaternionCompression: 0
UseHalfFloatPrecision: 0
InLocalSpace: 0
SwitchTransformSpaceWhenParented: 0
Interpolate: 1
SlerpPosition: 0
--- !u!114 &8891747045554379344
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 323282b7a87fc4344bd33250e88822e8, type: 3}
m_Name:
m_EditorClassIdentifier:
ShowTopMostFoldoutHeaderGroup: 1
definition: {fileID: 11400000, guid: 5353380be6a58a041bc52d32971d1d9b, type: 2}
--- !u!54 &3133876013448598132
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
serializedVersion: 4
m_Mass: 40
m_Drag: 0
m_AngularDrag: 0.05
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: 1
--- !u!114 &193117245170608707
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f6c0be61502bb534f922ebb746851216, type: 3}
m_Name:
m_EditorClassIdentifier:
ShowTopMostFoldoutHeaderGroup: 1
NetworkRigidbodyBaseExpanded: 0
UseRigidBodyForMotion: 1
AutoUpdateKinematicState: 1
AutoSetKinematicOnDespawn: 1
--- !u!114 &4269639932524941515
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5e737931b3bc22468ea0fe857062359, type: 3}
m_Name:
m_EditorClassIdentifier:
ShowTopMostFoldoutHeaderGroup: 1
interactionLabel: Interact
maximumInteractionDistance: 3
weight: 40
pullStrengthPerPlayer: 50
maximumDraggers: 2
dragOffset: {x: 0, y: 1, z: 1.8}
maximumDragSpeed: 3
minimumSpeedMultiplier: 0.35
maximumDraggerDistance: 4.5
positionSmoothTime: 0.12
rotationFollowSpeed: 8
rotationOffset: {x: 0, y: 0, z: 0}
movementMode: 0
groundLayers:
serializedVersion: 2
m_Bits: 4294967295
groundContactPoint: {fileID: 0}
groundProbeRadius: 0.2
groundProbeHeight: 1.25
maximumGroundDrop: 2
maximumGroundAngle: 55
groundClearance: 0.02
maximumGroundVerticalSpeed: 6
alignToGround: 1
groundAlignmentSpeed: 10
physicsBody: {fileID: 3133876013448598132}
objectColliders:
- {fileID: 5222869138606293483}
- {fileID: 6894540284203297686}
- {fileID: 1623627698583667245}
- {fileID: 7077397027048864733}
collisionRefreshInterval: 0.25
--- !u!114 &6493104616022895181
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f111, type: 3}
m_Name:
m_EditorClassIdentifier:
ShowTopMostFoldoutHeaderGroup: 1
networkItem: {fileID: 8891747045554379344}
physicsBody: {fileID: 3133876013448598132}
--- !u!114 &3635736001397410476
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2376631388558761094}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d1e6d4d81ab34d2e9ee3a1bfa201f112, type: 3}
m_Name:
m_EditorClassIdentifier:
rocket: {fileID: 6493104616022895181}
onNormalQualityApplied:
m_PersistentCalls:
m_Calls: []
onDefectiveQualityApplied:
m_PersistentCalls:
m_Calls: []
onDamagedStateApplied:
m_PersistentCalls:
m_Calls: []
onCriticalImpact:
m_PersistentCalls:
m_Calls: []
onCriticalImpactPoint:
m_PersistentCalls:
m_Calls: []
onCriticalImpactSpeed:
m_PersistentCalls:
m_Calls: []
--- !u!1001 &5717474834163769460
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1632953841127884940}
m_Modifications:
- target: {fileID: 2553015719312062053, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_VersionIndex
value: 1173
objectReference: {fileID: 0}
- target: {fileID: 3949508846642722774, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_VersionIndex
value: 3154
objectReference: {fileID: 0}
- target: {fileID: 4560519800175472911, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_VersionIndex
value: 3693
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8990336511305880825, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
propertyPath: m_Name
value: Visual
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
--- !u!64 &1623627698583667245 stripped
MeshCollider:
m_CorrespondingSourceObject: {fileID: 6471890211788923481, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
m_PrefabInstance: {fileID: 5717474834163769460}
m_PrefabAsset: {fileID: 0}
--- !u!4 &1646663282415760833 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6449878790825891253, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
m_PrefabInstance: {fileID: 5717474834163769460}
m_PrefabAsset: {fileID: 0}
--- !u!136 &5222869138606293483 stripped
CapsuleCollider:
m_CorrespondingSourceObject: {fileID: 514491035522146719, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
m_PrefabInstance: {fileID: 5717474834163769460}
m_PrefabAsset: {fileID: 0}
--- !u!64 &6894540284203297686 stripped
MeshCollider:
m_CorrespondingSourceObject: {fileID: 1222409323731209186, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
m_PrefabInstance: {fileID: 5717474834163769460}
m_PrefabAsset: {fileID: 0}
--- !u!64 &7077397027048864733 stripped
MeshCollider:
m_CorrespondingSourceObject: {fileID: 3273969631134882729, guid: 0b36d4cab828ea645bb5ab46d25c2204, type: 3}
m_PrefabInstance: {fileID: 5717474834163769460}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 746f04d9ba6c87d4bae8a09287c5d090
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -16,13 +16,12 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
[Header("Holding Follow")] [Header("Holding Follow")]
[SerializeField, Min(0.1f)] private float maximumFollowSpeed = 12f; [SerializeField, Min(0.1f)] private float maximumFollowSpeed = 12f;
[SerializeField, Min(0.1f)] private float followResponsiveness = 10f;
[SerializeField, Min(0.1f)] private float maximumFollowAcceleration = 80f;
[SerializeField, Min(0.5f)] private float maximumHoldDistance = 4.5f; [SerializeField, Min(0.5f)] private float maximumHoldDistance = 4.5f;
[SerializeField, Min(0.1f)] private float rotationFollowSpeed = 14f; [SerializeField, Min(0.1f)] private float rotationFollowSpeed = 14f;
[SerializeField, Min(0.1f)] private float rotationResponsiveness = 10f;
[Header("Local Presentation")] [SerializeField, Min(0.1f)] private float maximumAngularAcceleration = 80f;
[Tooltip("Removes the server round-trip delay for the player currently carrying the item.")]
[SerializeField] private bool correctLocalHolderPresentation = true;
[SerializeField, Min(0.1f)] private float maximumLocalCorrectionDistance = 2f;
[Header("Throw")] [Header("Throw")]
[SerializeField, Min(0f)] private float throwForce = 6f; [SerializeField, Min(0f)] private float throwForce = 6f;
@@ -41,10 +40,10 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
private readonly HashSet<Collider> ignoredPlayerColliders = new(); private readonly HashSet<Collider> ignoredPlayerColliders = new();
private readonly HashSet<Collider> desiredIgnoredColliders = new(); private readonly HashSet<Collider> desiredIgnoredColliders = new();
private readonly List<Collider> collidersToRestore = new(); private readonly List<Collider> collidersToRestore = new();
private readonly RaycastHit[] localCorrectionHits = new RaycastHit[24];
private float nextCollisionRefreshTime; private float nextCollisionRefreshTime;
private bool initialUseGravity; private bool initialUseGravity;
private CollisionDetectionMode initialCollisionDetectionMode; private CollisionDetectionMode initialCollisionDetectionMode;
private NetworkTransform networkTransform;
protected abstract Vector3 HoldingOffset { get; } protected abstract Vector3 HoldingOffset { get; }
protected abstract string DropPrompt { get; } protected abstract string DropPrompt { get; }
@@ -80,6 +79,8 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
initialUseGravity = physicsBody.useGravity; initialUseGravity = physicsBody.useGravity;
initialCollisionDetectionMode = physicsBody.collisionDetectionMode; initialCollisionDetectionMode = physicsBody.collisionDetectionMode;
} }
networkTransform = GetComponent<NetworkTransform>();
} }
public override void OnNetworkSpawn() public override void OnNetworkSpawn()
@@ -87,6 +88,12 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
SpawnedHeldObjects.Add(this); SpawnedHeldObjects.Add(this);
holderClientId.OnValueChanged += HandleHolderChanged; holderClientId.OnValueChanged += HandleHolderChanged;
isExternallyControlled.OnValueChanged += HandleExternalControlChanged; isExternallyControlled.OnValueChanged += HandleExternalControlChanged;
if (networkTransform != null)
{
networkTransform.Interpolate = true;
networkTransform.UseUnreliableDeltas = true;
}
ApplyHoldingState(); ApplyHoldingState();
} }
@@ -129,28 +136,6 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
} }
private void LateUpdate()
{
if (!correctLocalHolderPresentation || IsServer || !IsSpawned ||
!IsHeldByLocalPlayer || IsExternallyControlled || physicsBody == null ||
!TryGetPlayerObject(holderClientId.Value, out NetworkObject holder))
{
return;
}
Transform anchor = ResolveHoldingAnchor(holder);
Vector3 targetPosition = anchor.TransformPoint(HoldingOffset);
Vector3 targetDelta = targetPosition - physicsBody.position;
if (targetDelta.sqrMagnitude >
maximumLocalCorrectionDistance * maximumLocalCorrectionDistance ||
HasBlockingColliderForLocalCorrection(targetDelta))
{
return;
}
transform.SetPositionAndRotation(targetPosition, anchor.rotation);
}
public void RequestThrow() public void RequestThrow()
{ {
if (IsSpawned && IsHeldByLocalPlayer) if (IsSpawned && IsHeldByLocalPlayer)
@@ -292,10 +277,14 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
return false; return false;
} }
Vector3 targetVelocity = targetDelta / Mathf.Max(Time.fixedDeltaTime, 0.001f); float fixedDeltaTime = Mathf.Max(Time.fixedDeltaTime, 0.001f);
physicsBody.linearVelocity = Vector3.ClampMagnitude( Vector3 targetVelocity = Vector3.ClampMagnitude(
targetVelocity, targetDelta * followResponsiveness,
maximumFollowSpeed); maximumFollowSpeed);
physicsBody.linearVelocity = Vector3.MoveTowards(
physicsBody.linearVelocity,
targetVelocity,
maximumFollowAcceleration * fixedDeltaTime);
DriveRotation(anchor.rotation); DriveRotation(anchor.rotation);
return true; return true;
@@ -306,57 +295,25 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
Quaternion rotationDelta = targetRotation * Quaternion.Inverse(physicsBody.rotation); Quaternion rotationDelta = targetRotation * Quaternion.Inverse(physicsBody.rotation);
rotationDelta.ToAngleAxis(out float angle, out Vector3 axis); rotationDelta.ToAngleAxis(out float angle, out Vector3 axis);
if (axis.sqrMagnitude < 0.0001f || float.IsNaN(axis.x)) if (axis.sqrMagnitude < 0.0001f || float.IsNaN(axis.x))
{
physicsBody.angularVelocity = Vector3.MoveTowards(
physicsBody.angularVelocity,
Vector3.zero,
maximumAngularAcceleration * Mathf.Max(Time.fixedDeltaTime, 0.001f));
return; return;
}
if (angle > 180f) if (angle > 180f)
angle -= 360f; angle -= 360f;
Vector3 targetAngularVelocity = axis.normalized * float fixedDeltaTime = Mathf.Max(Time.fixedDeltaTime, 0.001f);
(angle * Mathf.Deg2Rad / Mathf.Max(Time.fixedDeltaTime, 0.001f)); Vector3 targetAngularVelocity = Vector3.ClampMagnitude(
physicsBody.angularVelocity = Vector3.ClampMagnitude( axis.normalized * angle * Mathf.Deg2Rad * rotationResponsiveness,
targetAngularVelocity,
rotationFollowSpeed); rotationFollowSpeed);
} physicsBody.angularVelocity = Vector3.MoveTowards(
physicsBody.angularVelocity,
private bool HasBlockingColliderForLocalCorrection(Vector3 targetDelta) targetAngularVelocity,
{ maximumAngularAcceleration * fixedDeltaTime);
float distance = targetDelta.magnitude;
if (distance <= 0.0001f)
return false;
int hitCount = Physics.RaycastNonAlloc(
physicsBody.position,
targetDelta / distance,
localCorrectionHits,
distance,
~0,
QueryTriggerInteraction.Ignore);
for (int hitIndex = 0; hitIndex < hitCount; hitIndex++)
{
Collider hitCollider = localCorrectionHits[hitIndex].collider;
if (hitCollider == null ||
ignoredPlayerColliders.Contains(hitCollider) ||
IsObjectCollider(hitCollider))
{
continue;
}
return true;
}
return false;
}
private bool IsObjectCollider(Collider candidate)
{
foreach (Collider objectCollider in objectColliders)
{
if (objectCollider == candidate)
return true;
}
return false;
} }
private void HandleHolderChanged(ulong _, ulong __) => ApplyHoldingState(); private void HandleHolderChanged(ulong _, ulong __) => ApplyHoldingState();
@@ -369,6 +326,9 @@ public abstract class NetworkHeldInteractable : NetworkInteractable, IWorkstatio
{ {
bool isPhysicallyHeld = IsHeld && !IsExternallyControlled; bool isPhysicallyHeld = IsHeld && !IsExternallyControlled;
bool shouldBeKinematic = IsExternallyControlled || !IsServer; bool shouldBeKinematic = IsExternallyControlled || !IsServer;
physicsBody.interpolation = IsServer
? RigidbodyInterpolation.Interpolate
: RigidbodyInterpolation.None;
if (shouldBeKinematic) if (shouldBeKinematic)
{ {
@@ -23,7 +23,7 @@ public sealed class ItemCatalog : ScriptableObject
return false; return false;
} }
return itemsById.TryGetValue(itemId.Trim().ToLowerInvariant(), out definition); return itemsById.TryGetValue(NormalizeId(itemId), out definition);
} }
private void RebuildIndex() private void RebuildIndex()
@@ -39,4 +39,7 @@ public sealed class ItemCatalog : ScriptableObject
Debug.LogError($"Duplicate item id '{definition.ItemId}' in {name}.", this); Debug.LogError($"Duplicate item id '{definition.ItemId}' in {name}.", this);
} }
} }
private static string NormalizeId(string value) =>
value.Trim().ToLowerInvariant().Replace(' ', '-');
} }
@@ -1,33 +1,23 @@
using Unity.Netcode; using Unity.Netcode;
using UnityEngine; using UnityEngine;
public enum ItemCategory
{
Scrap,
SmeltedMaterial,
RocketPart,
Tool,
Consumable
}
[CreateAssetMenu(fileName = "ItemDefinition", menuName = "FORT-BO/Items/Item Definition")] [CreateAssetMenu(fileName = "ItemDefinition", menuName = "FORT-BO/Items/Item Definition")]
public sealed class ItemDefinition : ScriptableObject public class ItemDefinition : ScriptableObject
{ {
[SerializeField] private string itemId; [SerializeField] private string itemId;
[SerializeField] private string displayName; [SerializeField] private string displayName;
[SerializeField] private ItemCategory category;
[SerializeField] private bool isAssemblyReady;
[SerializeField] private NetworkObject worldPrefab; [SerializeField] private NetworkObject worldPrefab;
public string ItemId => itemId; public string ItemId => itemId;
public string DisplayName => string.IsNullOrWhiteSpace(displayName) ? name : displayName; public string DisplayName => string.IsNullOrWhiteSpace(displayName) ? name : displayName;
public ItemCategory Category => category;
public bool IsAssemblyReady => isAssemblyReady;
public NetworkObject WorldPrefab => worldPrefab; public NetworkObject WorldPrefab => worldPrefab;
private void OnValidate() protected virtual void OnValidate()
{ {
itemId = itemId?.Trim().ToLowerInvariant(); itemId = NormalizeId(itemId);
displayName = displayName?.Trim(); displayName = displayName?.Trim();
} }
protected static string NormalizeId(string value) =>
value?.Trim().ToLowerInvariant().Replace(' ', '-');
} }
@@ -10,5 +10,11 @@ public sealed class NetworkItem : NetworkBehaviour
public ItemDefinition Definition => definition; public ItemDefinition Definition => definition;
public string ItemId => definition != null ? definition.ItemId : string.Empty; public string ItemId => definition != null ? definition.ItemId : string.Empty;
public string DisplayName => definition != null ? definition.DisplayName : name; public string DisplayName => definition != null ? definition.DisplayName : name;
public ItemCategory Category => definition != null ? definition.Category : default;
public bool TryGetDefinition<TDefinition>(out TDefinition typedDefinition)
where TDefinition : ItemDefinition
{
typedDefinition = definition as TDefinition;
return typedDefinition != null;
}
} }
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f100
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
using UnityEngine;
[CreateAssetMenu(
fileName = "MaterialItemDefinition",
menuName = "FORT-BO/Items/Definitions/Material")]
public sealed class MaterialItemDefinition : ItemDefinition
{
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f101
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,29 @@
using UnityEngine;
public enum PartProcessingState : byte
{
Raw,
Ready
}
[CreateAssetMenu(
fileName = "PartItemDefinition",
menuName = "FORT-BO/Items/Definitions/Part")]
public sealed class PartItemDefinition : ItemDefinition
{
[Tooltip("Data-driven part family id, for example rocket-engine or rocket-cone-standard.")]
[SerializeField] private string partTypeId;
[SerializeField] private PartProcessingState processingState;
public string PartTypeId => string.IsNullOrWhiteSpace(partTypeId)
? ItemId
: partTypeId;
public PartProcessingState ProcessingState => processingState;
public bool IsReadyForAssembly => processingState == PartProcessingState.Ready;
protected override void OnValidate()
{
base.OnValidate();
partTypeId = NormalizeId(partTypeId);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f102
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,22 @@
using UnityEngine;
[CreateAssetMenu(
fileName = "RocketItemDefinition",
menuName = "FORT-BO/Items/Definitions/Rocket")]
public sealed class RocketItemDefinition : ItemDefinition
{
[Tooltip("Stable rocket family id used by launchers and orders.")]
[SerializeField] private string rocketTypeId;
[SerializeField, Min(0.1f)] private float criticalImpactSpeed = 7f;
public string RocketTypeId => string.IsNullOrWhiteSpace(rocketTypeId)
? ItemId
: rocketTypeId;
public float CriticalImpactSpeed => criticalImpactSpeed;
protected override void OnValidate()
{
base.OnValidate();
rocketTypeId = NormalizeId(rocketTypeId);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f103
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
using UnityEngine;
[CreateAssetMenu(
fileName = "UsableItemDefinition",
menuName = "FORT-BO/Items/Definitions/Usable")]
public sealed class UsableItemDefinition : ItemDefinition
{
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f104
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f110
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,168 @@
using System;
using Unity.Netcode;
using UnityEngine;
public enum RocketAssemblyQuality : byte
{
Normal,
Defective
}
public struct RocketCriticalImpactState : INetworkSerializable,
IEquatable<RocketCriticalImpactState>
{
public uint Sequence;
public Vector3 Point;
public float Speed;
public RocketCriticalImpactState(uint sequence, Vector3 point, float speed)
{
Sequence = sequence;
Point = point;
Speed = speed;
}
public void NetworkSerialize<T>(BufferSerializer<T> serializer)
where T : IReaderWriter
{
serializer.SerializeValue(ref Sequence);
serializer.SerializeValue(ref Point);
serializer.SerializeValue(ref Speed);
}
public bool Equals(RocketCriticalImpactState other) =>
Sequence == other.Sequence && Point == other.Point && Speed.Equals(other.Speed);
}
[DisallowMultipleComponent]
[RequireComponent(typeof(NetworkItem), typeof(Rigidbody))]
public sealed class NetworkRocketItem : NetworkBehaviour
{
[SerializeField] private NetworkItem networkItem;
[SerializeField] private Rigidbody physicsBody;
private readonly NetworkVariable<RocketAssemblyQuality> assemblyQuality = new(
RocketAssemblyQuality.Normal,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server);
private readonly NetworkVariable<RocketCriticalImpactState> criticalImpactState = new(
default,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server);
public RocketItemDefinition Definition =>
networkItem != null && networkItem.TryGetDefinition(out RocketItemDefinition definition)
? definition
: null;
public string RocketTypeId => Definition != null ? Definition.RocketTypeId : string.Empty;
public RocketAssemblyQuality AssemblyQuality => assemblyQuality.Value;
public bool IsDefective => AssemblyQuality == RocketAssemblyQuality.Defective;
public bool IsCriticallyDamaged => criticalImpactState.Value.Sequence > 0;
public uint CriticalImpactSequence => criticalImpactState.Value.Sequence;
public Vector3 LastCriticalImpactPoint => criticalImpactState.Value.Point;
public float LastCriticalImpactSpeed => criticalImpactState.Value.Speed;
public event Action Changed;
public event Action CriticalImpact;
private void Reset() => ResolveReferences();
private void Awake() => ResolveReferences();
public override void OnNetworkSpawn()
{
assemblyQuality.OnValueChanged += HandleAssemblyQualityChanged;
criticalImpactState.OnValueChanged += HandleCriticalImpactChanged;
if (Definition == null)
{
Debug.LogError(
$"{name} has NetworkRocketItem but its NetworkItem does not reference " +
"a RocketItemDefinition.",
this);
}
Changed?.Invoke();
}
public override void OnNetworkDespawn()
{
assemblyQuality.OnValueChanged -= HandleAssemblyQualityChanged;
criticalImpactState.OnValueChanged -= HandleCriticalImpactChanged;
}
private void OnCollisionEnter(Collision collision)
{
if (!IsServer || !IsSpawned || IsCriticallyDamaged || Definition == null)
return;
float impactSpeed = collision.relativeVelocity.magnitude;
if (impactSpeed < Definition.CriticalImpactSpeed)
return;
Vector3 impactPoint = collision.contactCount > 0
? collision.GetContact(0).point
: transform.position;
TryTriggerCriticalImpact(impactPoint, impactSpeed);
}
public bool TryTriggerCriticalImpact(Vector3 impactPoint, float impactSpeed)
{
if (!IsServer || !IsSpawned || IsCriticallyDamaged || Definition == null ||
impactSpeed < Definition.CriticalImpactSpeed)
{
return false;
}
criticalImpactState.Value = new RocketCriticalImpactState(
criticalImpactState.Value.Sequence + 1,
impactPoint,
impactSpeed);
return true;
}
public bool TryInitializeAssemblyQuality(bool isDefectiveResult)
{
if (!IsServer || !IsSpawned)
return false;
assemblyQuality.Value = isDefectiveResult
? RocketAssemblyQuality.Defective
: RocketAssemblyQuality.Normal;
return true;
}
[ContextMenu("Debug/Trigger Critical Impact (Server Play Mode)")]
private void TriggerCriticalImpactFromContextMenu()
{
if (Application.isPlaying && IsServer && IsSpawned && Definition != null)
{
TryTriggerCriticalImpact(
transform.position,
Definition.CriticalImpactSpeed);
}
}
private void ResolveReferences()
{
if (networkItem == null)
networkItem = GetComponent<NetworkItem>();
if (physicsBody == null)
physicsBody = GetComponent<Rigidbody>();
}
private void HandleAssemblyQualityChanged(
RocketAssemblyQuality _,
RocketAssemblyQuality __) => Changed?.Invoke();
private void HandleCriticalImpactChanged(
RocketCriticalImpactState previous,
RocketCriticalImpactState current)
{
Changed?.Invoke();
if (current.Sequence != previous.Sequence)
CriticalImpact?.Invoke();
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f111
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,102 @@
using UnityEngine;
using UnityEngine.Events;
[DisallowMultipleComponent]
public sealed class RocketItemView : MonoBehaviour
{
[SerializeField] private NetworkRocketItem rocket;
[Header("State")]
[SerializeField] private UnityEvent onNormalQualityApplied;
[SerializeField] private UnityEvent onDefectiveQualityApplied;
[SerializeField] private UnityEvent onDamagedStateApplied;
[Header("Critical Impact")]
[SerializeField] private UnityEvent onCriticalImpact;
[SerializeField] private UnityEvent<Vector3> onCriticalImpactPoint;
[SerializeField] private UnityEvent<float> onCriticalImpactSpeed;
private uint observedImpactSequence;
private RocketAssemblyQuality observedQuality;
private bool hasAppliedQuality;
private bool hasAppliedDamagedState;
private void Reset() => rocket = GetComponentInParent<NetworkRocketItem>();
private void Awake()
{
if (rocket == null)
rocket = GetComponentInParent<NetworkRocketItem>();
}
private void OnEnable()
{
if (rocket == null)
return;
observedImpactSequence = rocket.CriticalImpactSequence;
observedQuality = rocket.AssemblyQuality;
hasAppliedQuality = false;
hasAppliedDamagedState = false;
rocket.Changed += ApplyState;
rocket.CriticalImpact += HandleCriticalImpact;
ApplyState();
}
private void OnDisable()
{
if (rocket == null)
return;
rocket.Changed -= ApplyState;
rocket.CriticalImpact -= HandleCriticalImpact;
}
[ContextMenu("Preview/Critical Impact")]
private void PreviewCriticalImpact()
{
onCriticalImpactPoint?.Invoke(transform.position);
onCriticalImpactSpeed?.Invoke(7f);
onCriticalImpact?.Invoke();
onDamagedStateApplied?.Invoke();
}
[ContextMenu("Preview/Normal Quality")]
private void PreviewNormalQuality() => onNormalQualityApplied?.Invoke();
[ContextMenu("Preview/Defective Quality")]
private void PreviewDefectiveQuality() => onDefectiveQualityApplied?.Invoke();
private void ApplyState()
{
if (rocket == null)
return;
if (!hasAppliedQuality || observedQuality != rocket.AssemblyQuality)
{
observedQuality = rocket.AssemblyQuality;
hasAppliedQuality = true;
if (observedQuality == RocketAssemblyQuality.Defective)
onDefectiveQualityApplied?.Invoke();
else
onNormalQualityApplied?.Invoke();
}
if (rocket.IsCriticallyDamaged && !hasAppliedDamagedState)
{
hasAppliedDamagedState = true;
onDamagedStateApplied?.Invoke();
}
}
private void HandleCriticalImpact()
{
if (rocket == null || rocket.CriticalImpactSequence == observedImpactSequence)
return;
observedImpactSequence = rocket.CriticalImpactSequence;
onCriticalImpactPoint?.Invoke(rocket.LastCriticalImpactPoint);
onCriticalImpactSpeed?.Invoke(rocket.LastCriticalImpactSpeed);
onCriticalImpact?.Invoke();
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f112
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f130
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,6 @@
using Unity.Netcode;
public interface IHandItemUseAction
{
bool TryUseOnServer(NetworkObject playerObject);
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f131
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,49 @@
using Unity.Netcode;
using UnityEngine;
[DisallowMultipleComponent]
public sealed class NetworkUsableHandItemInteractable : NetworkHandItemInteractable
{
[Tooltip("Component on this prefab implementing IHandItemUseAction.")]
[SerializeField] private MonoBehaviour useActionComponent;
private IHandItemUseAction UseAction => useActionComponent as IHandItemUseAction;
protected override void Awake()
{
base.Awake();
ResolveUseAction();
}
private void OnValidate() => ResolveUseAction();
protected override void UseOnServer(NetworkObject playerObject)
{
if (UseAction == null)
{
Debug.LogWarning(
$"{name} was used but has no IHandItemUseAction component assigned.",
this);
return;
}
UseAction.TryUseOnServer(playerObject);
}
private void ResolveUseAction()
{
if (useActionComponent is IHandItemUseAction)
return;
foreach (MonoBehaviour component in GetComponents<MonoBehaviour>())
{
if (component is IHandItemUseAction)
{
useActionComponent = component;
return;
}
}
useActionComponent = null;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1e6d4d81ab34d2e9ee3a1bfa201f132
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -4,6 +4,7 @@ using UnityEngine;
public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSystem public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSystem
{ {
[SerializeField, Range(1f, 89f)] private float verticalLookLimit = 80f; [SerializeField, Range(1f, 89f)] private float verticalLookLimit = 80f;
[SerializeField, Min(0.1f)] private float remotePitchFollowSpeed = 20f;
private readonly NetworkVariable<float> synchronizedPitch = new( private readonly NetworkVariable<float> synchronizedPitch = new(
0f, 0f,
@@ -14,6 +15,7 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
private AudioListener audioListener; private AudioListener audioListener;
private MeshRenderer playerRenderer; private MeshRenderer playerRenderer;
private float pitch; private float pitch;
private float targetPitch;
private bool isInitialized; private bool isInitialized;
public Camera PlayerCamera => playerCamera; public Camera PlayerCamera => playerCamera;
@@ -34,7 +36,10 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
playerCamera.gameObject.SetActive(isLocalPlayer); playerCamera.gameObject.SetActive(isLocalPlayer);
if (!isLocalPlayer) if (!isLocalPlayer)
ApplyCameraPitch(synchronizedPitch.Value); {
targetPitch = synchronizedPitch.Value;
ApplyCameraPitch(targetPitch);
}
if (!isLocalPlayer) if (!isLocalPlayer)
return; return;
@@ -62,7 +67,10 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
synchronizedPitch.OnValueChanged += HandleSynchronizedPitchChanged; synchronizedPitch.OnValueChanged += HandleSynchronizedPitchChanged;
if (isInitialized && !IsOwner) if (isInitialized && !IsOwner)
ApplyCameraPitch(synchronizedPitch.Value); {
targetPitch = synchronizedPitch.Value;
ApplyCameraPitch(targetPitch);
}
if (isInitialized && IsOwner) if (isInitialized && IsOwner)
CaptureCursor(); CaptureCursor();
@@ -70,7 +78,17 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
private void LateUpdate() private void LateUpdate()
{ {
if (!isInitialized || !IsOwner || !Application.isFocused) if (!isInitialized)
return;
if (!IsOwner)
{
float interpolation = 1f - Mathf.Exp(-remotePitchFollowSpeed * Time.deltaTime);
ApplyCameraPitch(Mathf.LerpAngle(pitch, targetPitch, interpolation));
return;
}
if (!Application.isFocused)
return; return;
if (Cursor.lockState != CursorLockMode.Locked || Cursor.visible) if (Cursor.lockState != CursorLockMode.Locked || Cursor.visible)
@@ -89,6 +107,7 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
return; return;
pitch = Mathf.Clamp(pitch - pitchDelta, -verticalLookLimit, verticalLookLimit); pitch = Mathf.Clamp(pitch - pitchDelta, -verticalLookLimit, verticalLookLimit);
targetPitch = pitch;
ApplyCameraPitch(pitch); ApplyCameraPitch(pitch);
if (IsSpawned) if (IsSpawned)
@@ -110,7 +129,7 @@ public sealed class FirstPersonCameraController : NetworkBehaviour, IPlayerSyste
private void HandleSynchronizedPitchChanged(float _, float currentPitch) private void HandleSynchronizedPitchChanged(float _, float currentPitch)
{ {
if (!IsOwner) if (!IsOwner)
ApplyCameraPitch(currentPitch); targetPitch = currentPitch;
} }
private void ApplyCameraPitch(float currentPitch) private void ApplyCameraPitch(float currentPitch)
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using Unity.Netcode; using Unity.Netcode;
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization;
public enum RocketAssemblyWorkstationState : byte public enum RocketAssemblyWorkstationState : byte
{ {
@@ -28,7 +29,9 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
[Header("Interaction")] [Header("Interaction")]
[SerializeField, Min(0.1f)] private float maximumTakeDistance = 3.5f; [SerializeField, Min(0.1f)] private float maximumTakeDistance = 3.5f;
[SerializeField, Min(0.05f)] private float reinsertCooldownAfterTake = 0.5f; [FormerlySerializedAs("reinsertCooldownAfterTake")]
[SerializeField, Min(0f)] private float minimumReinsertBlockDuration = 0.1f;
[SerializeField, Min(0f)] private float reinsertClearance = 0.1f;
private readonly NetworkVariable<RocketAssemblyWorkstationState> state = new( private readonly NetworkVariable<RocketAssemblyWorkstationState> state = new(
RocketAssemblyWorkstationState.Loading, RocketAssemblyWorkstationState.Loading,
@@ -63,7 +66,8 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
private readonly NetworkItem[] slottedItems = new NetworkItem[MaximumSlotCount]; private readonly NetworkItem[] slottedItems = new NetworkItem[MaximumSlotCount];
private readonly IWorkstationItemControl[] slottedItemControls = private readonly IWorkstationItemControl[] slottedItemControls =
new IWorkstationItemControl[MaximumSlotCount]; new IWorkstationItemControl[MaximumSlotCount];
private readonly Dictionary<ulong, double> reinsertBlockedUntil = new(); private readonly Dictionary<ulong, ReinsertBlock> reinsertBlocks = new();
private readonly List<ulong> clearedReinsertBlockIds = new();
private NetworkItem currentOutput; private NetworkItem currentOutput;
@@ -170,6 +174,7 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
if (!IsServer || !IsSpawned) if (!IsServer || !IsSpawned)
return; return;
UpdateReinsertBlocks();
RemoveMissingSlottedItems(); RemoveMissingSlottedItems();
if (State == RocketAssemblyWorkstationState.Assembling && if (State == RocketAssemblyWorkstationState.Assembling &&
@@ -311,8 +316,11 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
NetworkItem item = slottedItems[slotIndex]; NetworkItem item = slottedItems[slotIndex];
if (item != null) if (item != null)
{ {
reinsertBlockedUntil[item.NetworkObjectId] = reinsertBlocks[item.NetworkObjectId] = new ReinsertBlock(
GetNetworkTime() + reinsertCooldownAfterTake; item,
slotIndex,
item.GetComponentsInChildren<Collider>(true),
GetNetworkTime() + minimumReinsertBlockDuration);
} }
ClearSlot(slotIndex); ClearSlot(slotIndex);
@@ -333,7 +341,8 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
Array.Clear(slottedItems, 0, slottedItems.Length); Array.Clear(slottedItems, 0, slottedItems.Length);
Array.Clear(slottedItemControls, 0, slottedItemControls.Length); Array.Clear(slottedItemControls, 0, slottedItemControls.Length);
reinsertBlockedUntil.Clear(); reinsertBlocks.Clear();
clearedReinsertBlockIds.Clear();
currentOutput = null; currentOutput = null;
selectedRecipeIndex.Value = FindFirstValidRecipeIndex(); selectedRecipeIndex.Value = FindFirstValidRecipeIndex();
assemblyStartedAt.Value = 0d; assemblyStartedAt.Value = 0d;
@@ -380,9 +389,7 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
} }
bool defective = assemblyWillBeDefective.Value; bool defective = assemblyWillBeDefective.Value;
ItemDefinition outputDefinition = defective RocketItemDefinition outputDefinition = recipe.OutputItem;
? recipe.DefectiveOutputItem
: recipe.OutputItem;
if (outputDefinition == null || outputDefinition.WorldPrefab == null) if (outputDefinition == null || outputDefinition.WorldPrefab == null)
{ {
CancelAssemblyOnServer(); CancelAssemblyOnServer();
@@ -408,12 +415,14 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
outputObject.Spawn(); outputObject.Spawn();
currentOutput = outputObject.GetComponent<NetworkItem>(); currentOutput = outputObject.GetComponent<NetworkItem>();
if (currentOutput == null || NetworkRocketItem rocketItem = outputObject.GetComponent<NetworkRocketItem>();
if (currentOutput == null || rocketItem == null ||
!WorkstationItemControlUtility.TryGetControl(currentOutput, out _)) !WorkstationItemControlUtility.TryGetControl(currentOutput, out _))
{ {
Debug.LogError( Debug.LogError(
$"{name} cannot produce '{outputDefinition.DisplayName}': the output prefab " + $"{name} cannot produce '{outputDefinition.DisplayName}': the output prefab " +
"must contain NetworkItem and a supported Carry or Drag interaction component.", "must contain NetworkItem, NetworkRocketItem and a supported Carry or Drag " +
"interaction component.",
this); this);
outputObject.Despawn(true); outputObject.Despawn(true);
currentOutput = null; currentOutput = null;
@@ -421,6 +430,8 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
return; return;
} }
rocketItem.TryInitializeAssemblyQuality(defective);
assemblyStartedAt.Value = 0d; assemblyStartedAt.Value = 0d;
assemblyEndsAt.Value = 0d; assemblyEndsAt.Value = 0d;
state.Value = RocketAssemblyWorkstationState.OutputReady; state.Value = RocketAssemblyWorkstationState.OutputReady;
@@ -513,17 +524,51 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
private bool IsTemporarilyBlockedFromReinsert(NetworkItem item) private bool IsTemporarilyBlockedFromReinsert(NetworkItem item)
{ {
if (item == null || return item != null && reinsertBlocks.ContainsKey(item.NetworkObjectId);
!reinsertBlockedUntil.TryGetValue(item.NetworkObjectId, out double blockedUntil)) }
private void UpdateReinsertBlocks()
{
if (reinsertBlocks.Count == 0)
return;
double now = GetNetworkTime();
clearedReinsertBlockIds.Clear();
foreach (KeyValuePair<ulong, ReinsertBlock> pair in reinsertBlocks)
{ {
return false; ReinsertBlock block = pair.Value;
bool canReleaseBlock = block.Item == null || !block.Item.IsSpawned ||
(now >= block.MinimumBlockedUntil &&
(!IsValidSlotIndex(block.SourceSlotIndex) ||
!slotsBottomToTop[block.SourceSlotIndex].OverlapsAny(
block.ItemColliders,
reinsertClearance)));
if (canReleaseBlock)
clearedReinsertBlockIds.Add(pair.Key);
} }
if (GetNetworkTime() < blockedUntil) foreach (ulong networkObjectId in clearedReinsertBlockIds)
return true; reinsertBlocks.Remove(networkObjectId);
}
reinsertBlockedUntil.Remove(item.NetworkObjectId); private readonly struct ReinsertBlock
return false; {
public ReinsertBlock(
NetworkItem item,
int sourceSlotIndex,
Collider[] itemColliders,
double minimumBlockedUntil)
{
Item = item;
SourceSlotIndex = sourceSlotIndex;
ItemColliders = itemColliders;
MinimumBlockedUntil = minimumBlockedUntil;
}
public NetworkItem Item { get; }
public int SourceSlotIndex { get; }
public Collider[] ItemColliders { get; }
public double MinimumBlockedUntil { get; }
} }
private NetworkItem ResolveSynchronizedItem(int slotIndex) private NetworkItem ResolveSynchronizedItem(int slotIndex)
@@ -588,8 +633,9 @@ public sealed class NetworkRocketAssemblyWorkstation : NetworkWorkstationControl
slotIndex >= 0 && slotIndex < SlotCount && slotsBottomToTop[slotIndex] != null; slotIndex >= 0 && slotIndex < SlotCount && slotsBottomToTop[slotIndex] != null;
private static bool IsReadyRocketPart(NetworkItem item) => private static bool IsReadyRocketPart(NetworkItem item) =>
item != null && item.IsSpawned && item.Definition != null && item != null && item.IsSpawned &&
item.Category == ItemCategory.RocketPart && item.Definition.IsAssemblyReady; item.TryGetDefinition(out PartItemDefinition definition) &&
definition.IsReadyForAssembly;
private static bool IsRecipeValid(RocketAssemblyRecipe recipe) => private static bool IsRecipeValid(RocketAssemblyRecipe recipe) =>
recipe != null && recipe.IsConfigured; recipe != null && recipe.IsConfigured;
@@ -8,6 +8,7 @@ public sealed class RocketAssemblyInputSlot : MonoBehaviour, IInteractable
[SerializeField] private Transform snapPoint; [SerializeField] private Transform snapPoint;
private NetworkRocketAssemblyWorkstation workstation; private NetworkRocketAssemblyWorkstation workstation;
private Collider triggerCollider;
private int slotIndex = -1; private int slotIndex = -1;
public Transform SnapPoint => snapPoint != null ? snapPoint : transform; public Transform SnapPoint => snapPoint != null ? snapPoint : transform;
@@ -21,10 +22,17 @@ public sealed class RocketAssemblyInputSlot : MonoBehaviour, IInteractable
private void Reset() private void Reset()
{ {
snapPoint = transform; snapPoint = transform;
GetComponent<Collider>().isTrigger = true; ResolveTriggerCollider();
triggerCollider.isTrigger = true;
} }
private void OnValidate() => GetComponent<Collider>().isTrigger = true; private void Awake() => ResolveTriggerCollider();
private void OnValidate()
{
ResolveTriggerCollider();
triggerCollider.isTrigger = true;
}
public void Configure(NetworkRocketAssemblyWorkstation owner, int index) public void Configure(NetworkRocketAssemblyWorkstation owner, int index)
{ {
@@ -51,4 +59,30 @@ public sealed class RocketAssemblyInputSlot : MonoBehaviour, IInteractable
if (item != null) if (item != null)
workstation.TryInsertItem(slotIndex, item); workstation.TryInsertItem(slotIndex, item);
} }
public bool OverlapsAny(Collider[] itemColliders, float clearance)
{
ResolveTriggerCollider();
if (triggerCollider == null || !triggerCollider.enabled || itemColliders == null)
return false;
Bounds triggerBounds = triggerCollider.bounds;
triggerBounds.Expand(Mathf.Max(0f, clearance) * 2f);
foreach (Collider itemCollider in itemColliders)
{
if (itemCollider != null && itemCollider.enabled &&
triggerBounds.Intersects(itemCollider.bounds))
{
return true;
}
}
return false;
}
private void ResolveTriggerCollider()
{
if (triggerCollider == null)
triggerCollider = GetComponent<Collider>();
}
} }
@@ -12,9 +12,8 @@ public sealed class RocketAssemblyRecipe : ScriptableObject
[SerializeField] private string recipeId; [SerializeField] private string recipeId;
[SerializeField] private string displayName; [SerializeField] private string displayName;
[Tooltip("Exact assembly order. Element 0 is the lowest rocket part.")] [Tooltip("Exact assembly order. Element 0 is the lowest rocket part.")]
[SerializeField] private List<ItemDefinition> requiredPartsBottomToTop = new(); [SerializeField] private List<PartItemDefinition> requiredPartsBottomToTop = new();
[SerializeField] private ItemDefinition outputItem; [SerializeField] private RocketItemDefinition outputItem;
[SerializeField] private ItemDefinition defectiveOutputItem;
[SerializeField, Min(0.05f)] private float assemblyDuration = 5f; [SerializeField, Min(0.05f)] private float assemblyDuration = 5f;
[Header("Blueprint")] [Header("Blueprint")]
@@ -23,10 +22,9 @@ public sealed class RocketAssemblyRecipe : ScriptableObject
public string RecipeId => recipeId; public string RecipeId => recipeId;
public string DisplayName => string.IsNullOrWhiteSpace(displayName) ? name : displayName; public string DisplayName => string.IsNullOrWhiteSpace(displayName) ? name : displayName;
public IReadOnlyList<ItemDefinition> RequiredPartsBottomToTop => requiredPartsBottomToTop; public IReadOnlyList<PartItemDefinition> RequiredPartsBottomToTop => requiredPartsBottomToTop;
public int RequiredPartCount => requiredPartsBottomToTop.Count; public int RequiredPartCount => requiredPartsBottomToTop.Count;
public ItemDefinition OutputItem => outputItem; public RocketItemDefinition OutputItem => outputItem;
public ItemDefinition DefectiveOutputItem => defectiveOutputItem;
public float AssemblyDuration => assemblyDuration; public float AssemblyDuration => assemblyDuration;
public string BlueprintTitle => string.IsNullOrWhiteSpace(blueprintTitle) public string BlueprintTitle => string.IsNullOrWhiteSpace(blueprintTitle)
? DisplayName ? DisplayName
@@ -36,8 +34,7 @@ public sealed class RocketAssemblyRecipe : ScriptableObject
public bool IsConfigured => public bool IsConfigured =>
requiredPartsBottomToTop.Count is > 0 and <= MaximumPartCount && requiredPartsBottomToTop.Count is > 0 and <= MaximumPartCount &&
requiredPartsBottomToTop.TrueForAll(IsReadyRocketPart) && requiredPartsBottomToTop.TrueForAll(IsReadyRocketPart) &&
IsSpawnable(outputItem) && IsSpawnable(outputItem);
IsSpawnable(defectiveOutputItem);
public bool Matches(IReadOnlyList<NetworkItem> slottedItems) public bool Matches(IReadOnlyList<NetworkItem> slottedItems)
{ {
@@ -75,14 +72,12 @@ public sealed class RocketAssemblyRecipe : ScriptableObject
requiredPartsBottomToTop.Count - MaximumPartCount); requiredPartsBottomToTop.Count - MaximumPartCount);
} }
private static bool MatchesDefinition(NetworkItem item, ItemDefinition definition) => private static bool MatchesDefinition(NetworkItem item, PartItemDefinition definition) =>
item.Definition == definition || item.Definition == definition ||
(!string.IsNullOrEmpty(definition.ItemId) && item.ItemId == definition.ItemId); (!string.IsNullOrEmpty(definition.ItemId) && item.ItemId == definition.ItemId);
private static bool IsReadyRocketPart(ItemDefinition definition) => private static bool IsReadyRocketPart(PartItemDefinition definition) =>
definition != null && definition != null && definition.IsReadyForAssembly;
definition.Category == ItemCategory.RocketPart &&
definition.IsAssemblyReady;
private static bool IsSpawnable(ItemDefinition definition) => private static bool IsSpawnable(ItemDefinition definition) =>
definition != null && definition.WorldPrefab != null; definition != null && definition.WorldPrefab != null;
File diff suppressed because one or more lines are too long
@@ -0,0 +1,549 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: RocketAssemblyStation-Finish
serializedVersion: 7
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: {x: 0, y: 172.211, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
time: 0.33333334
value: {x: 0, y: 277.211, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (1)
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: {x: 0, y: 188.984, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
time: 0.33333334
value: {x: 0, y: 82.652, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (2)
m_PositionCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: {x: -1.042053, y: 0, z: 0}
inSlope: {x: -0, y: 0, z: 0}
outSlope: {x: -0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (1)
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: {x: 0, y: 0, z: 0}
inSlope: {x: -0, y: 0, z: 0}
outSlope: {x: -0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (2)
m_ScaleCurves: []
m_FloatCurves: []
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3460545240
attribute: 4
script: {fileID: 0}
typeID: 4
customType: 4
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3849251099
attribute: 4
script: {fileID: 0}
typeID: 4
customType: 4
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3460545240
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3849251099
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0.33333334
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 0
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: -1.042053
inSlope: -0
outSlope: -0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.x
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: -0
outSlope: -0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.y
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: -0
outSlope: -0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.z
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.x
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 172.211
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 277.211
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.y
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.z
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: -0
outSlope: -0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.x
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: -0
outSlope: -0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.y
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: -0
outSlope: -0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.z
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.x
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 188.984
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 82.652
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.y
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.z
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 16
m_EulerEditorCurves:
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 76c30d33327103243b179e78e8caaebf
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,549 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: RocketAssemblyStation-Start
serializedVersion: 7
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: {x: 0, y: 277.211, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
time: 0.33333334
value: {x: 0, y: 172.211, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (1)
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: {x: 0, y: 82.652, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
time: 0.33333334
value: {x: 0, y: 188.984, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (2)
m_PositionCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: {x: -1.042053, y: 0, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (1)
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: {x: 0, y: 0, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
path: Arch (2)
m_ScaleCurves: []
m_FloatCurves: []
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3460545240
attribute: 4
script: {fileID: 0}
typeID: 4
customType: 4
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3849251099
attribute: 4
script: {fileID: 0}
typeID: 4
customType: 4
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3460545240
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3849251099
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0.33333334
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 0
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -1.042053
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.x
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.y
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.z
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.x
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 277.211
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 172.211
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.y
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.z
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.x
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.y
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalPosition.z
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.x
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 82.652
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 188.984
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.y
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 16
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.33333334
value: 0
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: localEulerAnglesRaw.z
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 16
m_EulerEditorCurves:
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: Arch (1)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: Arch (2)
classID: 4
script: {fileID: 0}
flags: 0
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 947523081d6b1124bbbeefdb88dc1341
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:
+165
View File
@@ -0,0 +1,165 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1101 &-8476846497718719110
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Finish
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1754245257843138164}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-8153218137530876641
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Start
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6935177224598149620}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-6935177224598149620
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: RocketAssemblyStation-Start
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -8476846497718719110}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 947523081d6b1124bbbeefdb88dc1341, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Root
serializedVersion: 5
m_AnimatorParameters:
- m_Name: Start
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Finish
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 6843718879105983382}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &1754245257843138164
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: RocketAssemblyStation-Finish
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -8153218137530876641}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 76c30d33327103243b179e78e8caaebf, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &6843718879105983382
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: -6935177224598149620}
m_Position: {x: 30, y: 280, z: 0}
- serializedVersion: 1
m_State: {fileID: 1754245257843138164}
m_Position: {x: 30, y: 180, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 1754245257843138164}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ba79432b68b8de14495e6a30fdd8cadc
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:
+5
View File
@@ -119,3 +119,8 @@ MonoBehaviour:
SourcePrefabToOverride: {fileID: 0} SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0 SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0} OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 2376631388558761094, guid: 746f04d9ba6c87d4bae8a09287c5d090, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}