From 9eb588e491a0982d91c4bcd3c5b2a23d69043a4a Mon Sep 17 00:00:00 2001 From: Sven Mandera Date: Sun, 16 Aug 2026 16:13:32 +0200 Subject: [PATCH] feat(shop): configurable package display rotation, pocoregal shelf model Add _displayRotationEuler to Lieferkarton/ShelfSlot so package prefabs with a non-upright export orientation can be corrected per-container without touching PackageDisplay code. Fixes a bug where flying packages landed with a different rotation than the resting shelf display (PlayerCarry used the raw shelf transform instead of ShelfSlot.GetSlotWorldRotation()). Also adds the pocoregal shelf model (Blender export) and its materials, places it in the Shop scene, registers ShelfSlot as a network prefab, and rescales EmptyBox. See docs/PACKAGE_DISPLAY_SETUP.md for the display-grid setup/troubleshooting reference. Co-Authored-By: Claude Sonnet 5 --- Assets/Data/Image_0.png | 3 + Assets/Data/Image_0.png.meta | 130 ++++ Assets/Data/Material_0.mat | 139 +++++ Assets/Data/Material_0.mat.meta | 8 + Assets/Data/Materials.meta | 8 + .../Meshy_AI_cardboard_plain_basecolor.mat | 137 +++++ ...eshy_AI_cardboard_plain_basecolor.mat.meta | 8 + Assets/Data/material.mat | 139 +++++ Assets/Data/material.mat.meta | 8 + Assets/Data/pocoregal.fbx | 3 + Assets/Data/pocoregal.fbx.meta | 119 ++++ Assets/DefaultNetworkPrefabs.asset | 4 +- Assets/Prefabs/EmptyBox.prefab | 4 +- Assets/Scenes/Shop.unity | 572 +++++++++--------- Assets/Scripts/Networking/PlayerCarry.cs | 2 +- Assets/Scripts/Shop/Lieferkarton.cs | 3 +- Assets/Scripts/Shop/PackageDisplay.cs | 6 +- Assets/Scripts/Shop/ShelfSlot.cs | 10 +- docs/PACKAGE_DISPLAY_SETUP.md | 108 ++++ 19 files changed, 1126 insertions(+), 285 deletions(-) create mode 100644 Assets/Data/Image_0.png create mode 100644 Assets/Data/Image_0.png.meta create mode 100644 Assets/Data/Material_0.mat create mode 100644 Assets/Data/Material_0.mat.meta create mode 100644 Assets/Data/Materials.meta create mode 100644 Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat create mode 100644 Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat.meta create mode 100644 Assets/Data/material.mat create mode 100644 Assets/Data/material.mat.meta create mode 100644 Assets/Data/pocoregal.fbx create mode 100644 Assets/Data/pocoregal.fbx.meta create mode 100644 docs/PACKAGE_DISPLAY_SETUP.md diff --git a/Assets/Data/Image_0.png b/Assets/Data/Image_0.png new file mode 100644 index 0000000..95fd590 --- /dev/null +++ b/Assets/Data/Image_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56c102496aee65f7d8428b60062d33c9498af8ae761c206f1e99869d210e78fa +size 4331996 diff --git a/Assets/Data/Image_0.png.meta b/Assets/Data/Image_0.png.meta new file mode 100644 index 0000000..599e8f7 --- /dev/null +++ b/Assets/Data/Image_0.png.meta @@ -0,0 +1,130 @@ +fileFormatVersion: 2 +guid: 5c9a39e08880616408f183effa8a1471 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + 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: WebGL + 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: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Material_0.mat b/Assets/Data/Material_0.mat new file mode 100644 index 0000000..ebd764e --- /dev/null +++ b/Assets/Data/Material_0.mat @@ -0,0 +1,139 @@ +%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: Material_0 + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _Color: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &5242375075943231414 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/Data/Material_0.mat.meta b/Assets/Data/Material_0.mat.meta new file mode 100644 index 0000000..f47f2f0 --- /dev/null +++ b/Assets/Data/Material_0.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e7dcbb3e7bec1b40a660bcded47ca91 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Materials.meta b/Assets/Data/Materials.meta new file mode 100644 index 0000000..38a0877 --- /dev/null +++ b/Assets/Data/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 34a41c24e42f67f4381bae7060d06165 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat b/Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat new file mode 100644 index 0000000..ca87b02 --- /dev/null +++ b/Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat @@ -0,0 +1,137 @@ +%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: Meshy_AI_cardboard_plain_basecolor + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: d0cc4b99517b2e343903d3d15cf58d62, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: d0cc4b99517b2e343903d3d15cf58d62, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &3112008372610959805 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat.meta b/Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat.meta new file mode 100644 index 0000000..6beb690 --- /dev/null +++ b/Assets/Data/Materials/Meshy_AI_cardboard_plain_basecolor.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ff3d1c8bfaace6428d25719c6afa121 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/material.mat b/Assets/Data/material.mat new file mode 100644 index 0000000..8c2afa5 --- /dev/null +++ b/Assets/Data/material.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4397202985679810975 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: material + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _Color: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Data/material.mat.meta b/Assets/Data/material.mat.meta new file mode 100644 index 0000000..87034ce --- /dev/null +++ b/Assets/Data/material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f606e9a1958bd884db14af31ff656b15 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/pocoregal.fbx b/Assets/Data/pocoregal.fbx new file mode 100644 index 0000000..d425c50 --- /dev/null +++ b/Assets/Data/pocoregal.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b0cf87bee3cc12e416567058b1f3a13bd0e8744551327011b82394fc090c9df +size 4392924 diff --git a/Assets/Data/pocoregal.fbx.meta b/Assets/Data/pocoregal.fbx.meta new file mode 100644 index 0000000..b8fbed1 --- /dev/null +++ b/Assets/Data/pocoregal.fbx.meta @@ -0,0 +1,119 @@ +fileFormatVersion: 2 +guid: 1f9262bb33b3873428a17c14cbd3ea53 +ModelImporter: + serializedVersion: 24501 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Texture2D + assembly: UnityEngine.CoreModule + name: Image_0 + second: {fileID: 2800000, guid: 5c9a39e08880616408f183effa8a1471, type: 3} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + searchTexturesGlobally: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + importUVs: -1 + importVertexColors: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + calculateBlendshapeNormalsDeltaFromImportedNormals: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DefaultNetworkPrefabs.asset b/Assets/DefaultNetworkPrefabs.asset index 973b103..5aab790 100644 --- a/Assets/DefaultNetworkPrefabs.asset +++ b/Assets/DefaultNetworkPrefabs.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c210025453cf7a83772e6c33a62bf8dafbff15d547d0071bff1fb7e4a03adc6c -size 1562 +oid sha256:a6c31faafe28e25e5a615ee2a4ec0248a120b5b5ce0ac255780794e025a5f6f9 +size 1777 diff --git a/Assets/Prefabs/EmptyBox.prefab b/Assets/Prefabs/EmptyBox.prefab index d9f5f95..8bf47e1 100644 --- a/Assets/Prefabs/EmptyBox.prefab +++ b/Assets/Prefabs/EmptyBox.prefab @@ -26,8 +26,8 @@ Transform: serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 3.59233, y: -0, z: -0.28607} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 + m_LocalScale: {x: 0.2, y: 0.2, z: 0.2} + m_ConstrainProportionsScale: 1 m_Children: - {fileID: 6117590660017847771} m_Father: {fileID: 0} diff --git a/Assets/Scenes/Shop.unity b/Assets/Scenes/Shop.unity index b833a84..041b3ab 100644 --- a/Assets/Scenes/Shop.unity +++ b/Assets/Scenes/Shop.unity @@ -2644,6 +2644,63 @@ MonoBehaviour: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 +--- !u!1001 &238985022 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalPosition.x + value: -3.028 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalPosition.y + value: 0.792 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalPosition.z + value: -3.6858945 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071067 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_Name + value: pocoregal (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} --- !u!1 &317573032 GameObject: m_ObjectHideFlags: 0 @@ -2976,6 +3033,133 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &413821662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 413821665} + - component: {fileID: 413821664} + - component: {fileID: 413821663} + m_Layer: 0 + m_Name: Area Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &413821663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413821662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &413821664 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413821662} + m_Enabled: 1 + serializedVersion: 13 + m_Type: 3 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 0.5, y: 0.5} + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShapeRadius: 0.025 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &413821665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413821662} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: -1.059, y: 1.99, z: -6.45} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!1 &459066855 GameObject: m_ObjectHideFlags: 0 @@ -3415,6 +3599,63 @@ MonoBehaviour: m_EditorClassIdentifier: AfterHours.Runtime::AfterHours.Core.ShopEconomy ShowTopMostFoldoutHeaderGroup: 1 _startingBalance: 2500 +--- !u!1001 &784764716 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalPosition.x + value: -2.172 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalPosition.y + value: 0.792 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalPosition.z + value: -3.6858945 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071067 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + propertyPath: m_Name + value: pocoregal (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} --- !u!1 &816284369 GameObject: m_ObjectHideFlags: 0 @@ -3989,6 +4230,10 @@ MonoBehaviour: _startingQuantity: 12 _contentsRoot: {fileID: 53478575} _maxVisiblePackages: 12 + _displayColumns: 3 + _displayRows: 3 + _displaySpacing: {x: 0.12, y: 0.1, z: 0.12} + _displayRotationEuler: {x: 0, y: 0, z: 0} --- !u!65 &959439196 BoxCollider: m_ObjectHideFlags: 0 @@ -4828,7 +5073,7 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1417349271 +--- !u!1001 &1445302135 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -4836,283 +5081,59 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalScale.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalScale.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalScale.z - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalPosition.x - value: -1.3858304 + value: -2.601795 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalPosition.y - value: 1.514 + value: 0.792 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalPosition.z - value: -1.4691107 + value: -3.6858945 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.w - value: 1 + value: 0.7071067 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0.7071068 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_ConstrainProportionsScale - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -7811546481615063722, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + - target: {fileID: -7511558181221131132, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: 'm_Materials.Array.data[0]' value: - objectReference: {fileID: 2100000, guid: 594ea882c5a793440b60ff72d896021e, type: 2} - - target: {fileID: -3469552933019998406, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_ConstrainProportionsScale - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} + objectReference: {fileID: 4611759551533685079, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} + - target: {fileID: 919132149155446097, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_Name - value: duschi - objectReference: {fileID: 0} - - target: {fileID: 2854563699051640978, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalPosition.x - value: -0.00003 - objectReference: {fileID: 0} - - target: {fileID: 2854563699051640978, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalPosition.y - value: 0.00961 - objectReference: {fileID: 0} - - target: {fileID: 2854563699051640978, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalPosition.z - value: -0.00003 - objectReference: {fileID: 0} - - target: {fileID: 8234469714527775707, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalPosition.x - value: -0.00313 - objectReference: {fileID: 0} - - target: {fileID: 8234469714527775707, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalPosition.y - value: 0.01452 - objectReference: {fileID: 0} - - target: {fileID: 8234469714527775707, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - propertyPath: m_LocalPosition.z - value: -0.00012 + value: pocoregal objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - insertIndex: -1 - addedObject: {fileID: 1417349273} - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - insertIndex: -1 - addedObject: {fileID: 1417349279} - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - insertIndex: -1 - addedObject: {fileID: 1417349278} - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - insertIndex: -1 - addedObject: {fileID: 1417349277} - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - insertIndex: -1 - addedObject: {fileID: 1417349276} - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - insertIndex: -1 - addedObject: {fileID: 1417349275} - m_SourcePrefab: {fileID: 100100000, guid: 69a3530ccec5227468a531304b78a21f, type: 3} ---- !u!1 &1417349272 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - m_PrefabInstance: {fileID: 1417349271} - m_PrefabAsset: {fileID: 0} ---- !u!114 &1417349273 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1417349272} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject - GlobalObjectIdHash: 2112740835 - InScenePlacedSourceGlobalObjectIdHash: 0 - DeferredDespawnTick: 0 - Ownership: 1 - AlwaysReplicateAsRoot: 0 - SynchronizeTransform: 1 - m_InScenePlaced: 1 - ActiveSceneSynchronization: 0 - SceneMigrationSynchronization: 0 - SpawnWithObservers: 1 - DontDestroyWithOwner: 0 - AutoObjectParentSync: 1 - SyncOwnerTransformWhenParented: 1 - AllowOwnerToParent: 0 ---- !u!4 &1417349274 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 2854563699051640978, guid: 69a3530ccec5227468a531304b78a21f, type: 3} - m_PrefabInstance: {fileID: 1417349271} - m_PrefabAsset: {fileID: 0} ---- !u!114 &1417349275 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1417349272} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 32916d8b8a2c5784ba393cf3448b5556, type: 3} - m_Name: - m_EditorClassIdentifier: AfterHours.Runtime::AfterHours.Shop.BoneVibration - ShowTopMostFoldoutHeaderGroup: 1 - _topBone: {fileID: 1417349274} - _intensity: 0.1 ---- !u!65 &1417349276 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1417349272} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1, y: 2.6454363, z: 1.0979548} - m_Center: {x: 0, y: -0.20746946, z: 0.102712035} ---- !u!114 &1417349277 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1417349272} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f6c0be61502bb534f922ebb746851216, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkRigidbody - ShowTopMostFoldoutHeaderGroup: 1 - NetworkRigidbodyBaseExpanded: 0 - UseRigidBodyForMotion: 0 - AutoUpdateKinematicState: 1 - AutoSetKinematicOnDespawn: 1 ---- !u!54 &1417349278 -Rigidbody: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1417349272} - serializedVersion: 5 - m_Mass: 1 - m_LinearDamping: 0 - m_AngularDamping: 0.01 - 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: 0 - m_Constraints: 0 - m_CollisionDetection: 0 ---- !u!114 &1417349279 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1417349272} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform - 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: 0 - 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 + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} --- !u!1 &1450758736 GameObject: m_ObjectHideFlags: 0 @@ -5531,7 +5552,7 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1637614133 +--- !u!1001 &1590039329 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -5539,59 +5560,55 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalPosition.x - value: -4.018 + value: 5.87 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalPosition.y - value: 1.047 + value: 0.792 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalPosition.z - value: 0.603 + value: -3.6858945 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.w - value: 0.7071067 + value: 0.15844499 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.x - value: -0.7071068 + value: -0.15844509 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.y - value: 0 + value: 0.68912655 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0.6891263 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalEulerAnglesHint.x - value: 0 + value: -90 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: -8679921383154817045, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_LocalEulerAnglesHint.z - value: 0 + value: 154.103 objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: 9ff3d1c8bfaace6428d25719c6afa121, type: 2} - - target: {fileID: 919132149155446097, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + - target: {fileID: 919132149155446097, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} propertyPath: m_Name - value: Meshy_AI_wooden_shelf_3_compar_0814175655_image-to-3d-texture + value: pocoregal (3) objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 0d912f468f12f1a48b2df1314b991b38, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: 1f9262bb33b3873428a17c14cbd3ea53, type: 3} --- !u!1 &1658583203 GameObject: m_ObjectHideFlags: 0 @@ -6233,6 +6250,9 @@ SceneRoots: - {fileID: 64083408} - {fileID: 959439187} - {fileID: 1091476159} - - {fileID: 1417349271} - - {fileID: 1637614133} - {fileID: 1658583206} + - {fileID: 1445302135} + - {fileID: 784764716} + - {fileID: 1590039329} + - {fileID: 238985022} + - {fileID: 413821665} diff --git a/Assets/Scripts/Networking/PlayerCarry.cs b/Assets/Scripts/Networking/PlayerCarry.cs index 8d7b801..95b7edf 100644 --- a/Assets/Scripts/Networking/PlayerCarry.cs +++ b/Assets/Scripts/Networking/PlayerCarry.cs @@ -128,7 +128,7 @@ namespace AfterHours.Networking Vector3 start = box.transform.position + Vector3.up * 0.3f; Vector3 end = shelf.GetSlotWorldPosition(landingIndex); - FlyingPackage.Spawn(prefab, start, end, shelf.transform.rotation, _flightDuration); + FlyingPackage.Spawn(prefab, start, end, shelf.GetSlotWorldRotation(), _flightDuration); } } } diff --git a/Assets/Scripts/Shop/Lieferkarton.cs b/Assets/Scripts/Shop/Lieferkarton.cs index e52b643..cbe7216 100644 --- a/Assets/Scripts/Shop/Lieferkarton.cs +++ b/Assets/Scripts/Shop/Lieferkarton.cs @@ -29,6 +29,7 @@ namespace AfterHours.Shop [SerializeField] private int _displayColumns = 3; [SerializeField] private int _displayRows = 3; [SerializeField] private Vector3 _displaySpacing = new(0.12f, 0.1f, 0.12f); + [SerializeField] private Vector3 _displayRotationEuler = Vector3.zero; // Eine synchronisierte Variable, die den Zustand des Kartons speichert private NetworkVariable istOffen = new NetworkVariable( @@ -60,7 +61,7 @@ namespace AfterHours.Shop private void Awake() { _carryable = GetComponent(); - _packageDisplay = new PackageDisplay(_contentsRoot, _displayColumns, _displayRows, _displaySpacing); + _packageDisplay = new PackageDisplay(_contentsRoot, _displayColumns, _displayRows, _displaySpacing, _displayRotationEuler); // Start-Rotationen (Geschlossen) direkt beim Laden sichern if (deckelLinks != null) linksGeschlossen = deckelLinks.localRotation; diff --git a/Assets/Scripts/Shop/PackageDisplay.cs b/Assets/Scripts/Shop/PackageDisplay.cs index ddcbeb6..edbca66 100644 --- a/Assets/Scripts/Shop/PackageDisplay.cs +++ b/Assets/Scripts/Shop/PackageDisplay.cs @@ -17,15 +17,17 @@ namespace AfterHours.Shop private readonly int _columns; private readonly int _rows; private readonly Vector3 _spacing; + private readonly Quaternion _rotation; private readonly List _instances = new(); private GameObject _prefab; - public PackageDisplay(Transform root, int columns, int rows, Vector3 spacing) + public PackageDisplay(Transform root, int columns, int rows, Vector3 spacing, Vector3 rotationEuler = default) { _root = root; _columns = Mathf.Max(1, columns); _rows = Mathf.Max(1, rows); _spacing = spacing; + _rotation = Quaternion.Euler(rotationEuler); } /// Baut die Anzeige auf Instanzen an (gedeckelt bei maxVisible). @@ -47,7 +49,7 @@ namespace AfterHours.Shop { var instance = Object.Instantiate(_prefab, _root); instance.transform.localPosition = SlotLocalPosition(_instances.Count); - instance.transform.localRotation = Quaternion.identity; + instance.transform.localRotation = _rotation; _instances.Add(instance); } diff --git a/Assets/Scripts/Shop/ShelfSlot.cs b/Assets/Scripts/Shop/ShelfSlot.cs index ca268f4..7d6f882 100644 --- a/Assets/Scripts/Shop/ShelfSlot.cs +++ b/Assets/Scripts/Shop/ShelfSlot.cs @@ -24,6 +24,7 @@ namespace AfterHours.Shop [SerializeField] private int _displayColumns = 4; [SerializeField] private int _displayRows = 3; [SerializeField] private Vector3 _displaySpacing = new(0.1f, 0.1f, 0.1f); + [SerializeField] private Vector3 _displayRotationEuler = Vector3.zero; private readonly NetworkVariable _productId = new(-1); private readonly NetworkVariable _quantity = new(0); @@ -41,7 +42,7 @@ namespace AfterHours.Shop private PackageDisplay _packageDisplay; - private void Awake() => _packageDisplay = new PackageDisplay(_displayRoot, _displayColumns, _displayRows, _displaySpacing); + private void Awake() => _packageDisplay = new PackageDisplay(_displayRoot, _displayColumns, _displayRows, _displaySpacing, _displayRotationEuler); /// Weltposition des Rasterplatzes mit gegebenem Index – Ziel fürs Flug-Visual (siehe PlayerCarry). public Vector3 GetSlotWorldPosition(int index) @@ -49,6 +50,13 @@ namespace AfterHours.Shop return _displayRoot != null ? _displayRoot.TransformPoint(_packageDisplay.SlotLocalPosition(index)) : transform.position; } + /// Endrotation eines Pakets im Regal – muss zur ruhenden Anzeige passen, siehe PlayerCarry. + public Quaternion GetSlotWorldRotation() + { + Quaternion baseRotation = _displayRoot != null ? _displayRoot.rotation : transform.rotation; + return baseRotation * Quaternion.Euler(_displayRotationEuler); + } + public override void OnNetworkSpawn() { _quantity.OnValueChanged += (_, _) => RefreshVisuals(); diff --git a/docs/PACKAGE_DISPLAY_SETUP.md b/docs/PACKAGE_DISPLAY_SETUP.md new file mode 100644 index 0000000..b6a8f67 --- /dev/null +++ b/docs/PACKAGE_DISPLAY_SETUP.md @@ -0,0 +1,108 @@ +# Package-Anzeige einrichten (Karton & Regalfach) + +Wie man `PackageDisplay` (Karton-Inhalt, Regal-Bestand) so einstellt, dass +Verpackungen sauber ausgerichtet und ohne Überlappen im Raster liegen. +Betrifft `Lieferkarton.cs` und `ShelfSlot.cs` — beide haben dieselben vier +Inspector-Felder unter „Anzeige-Raster". + +## Kurzfassung: ja, das ist alles konfigurierbar + +Kein Code nötig. Vier Felder pro Objekt: + +| Feld | Bedeutung | +|--------------------------|--------------------------------------------------------------| +| `_displayColumns` | Päckchen pro Reihe (X-Achse im lokalen Raum) | +| `_displayRows` | Reihen pro Lage (Z-Achse), bevor eine neue Lage nach oben beginnt | +| `_displaySpacing` | Abstand zwischen Päckchen-Mittelpunkten (X/Y/Z in Metern) | +| `_displayRotationEuler` | Zusätzliche Rotation (Grad), mit der jedes Päckchen platziert wird | + +Die Formel dahinter (`PackageDisplay.SlotLocalPosition`): + +``` +Lage = Index / (Spalten × Reihen) +Rest = Index % (Spalten × Reihen) +Reihe = Rest / Spalten +Spalte= Rest % Spalten + +Position = (Spalte × spacing.x, Lage × spacing.y, Reihe × spacing.z) +``` + +## Warum die Päckchen "komisch" aussehen + +Zwei typische Ursachen — beide liegen am **Prefab selbst**, nicht am Raster-Code: + +### 1. Falscher Pivot (Ursprung) im Prefab + +`PackageDisplay` setzt `transform.localPosition` direkt auf die berechnete +Rasterposition — **bezogen auf den Ursprung (Pivot) des Prefabs**, nicht auf +seine sichtbare Bounding Box. Sitzt der Pivot z. B. an einer Ecke statt im +Zentrum/am Boden-Mittelpunkt der Verpackung, wirkt die Platzierung „verschoben" +oder die Päckchen scheinen im Boden zu versinken bzw. zu schweben. + +**Fix:** Pivot des `PackagePrefab` im 3D-Tool (Blender) auf den Boden- +Mittelpunkt setzen, bevor es exportiert/als Prefab gebaut wird. Faustregel: +wenn's wie eine Kiste auf dem Boden stehen soll, Pivot unten-mittig; wenn's im +Regal frei "schwebend zentriert" wirken soll, Pivot im geometrischen Zentrum. + +### 2. Falsche Grundausrichtung im Prefab + +Bisher wurde jedes Päckchen mit `Quaternion.identity` platziert — also exakt +so gedreht, wie es importiert wurde. Wurde das Modell in Blender nicht +"aufrecht" (Unity: +Y = oben, +Z = vorne) exportiert, liegen die Päckchen im +Raster auf der Seite oder verdreht. + +**Fix jetzt eingebaut:** `_displayRotationEuler` gleicht das aus, ohne das +Modell neu exportieren zu müssen. Einfach im Inspector die nötige Korrektur +eintragen (z. B. `(-90, 0, 0)`, falls das Modell "liegend" exportiert wurde +und eigentlich aufrecht stehen sollte) — Werte am besten per Trial-and-Error +im Play-Mode justieren, man sieht die Wirkung sofort. + +## Spacing & Größe aufeinander abstimmen + +`_displaySpacing` ist der Abstand zwischen den **Mittelpunkten** benachbarter +Päckchen, keine automatische Kollisionsvermeidung. Zu klein → Päckchen +überlappen sich sichtbar. Zu groß → unnötige Lücken, und es passen weniger +rein als gedacht. + +So ermittelst du einen guten Wert: + +1. Das `PackagePrefab` per Drag&Drop in eine leere Szene ziehen (oder im + Project-Fenster anklicken und die Bounds im Scene-View-Gizmo ablesen). +2. Größte Kantenlänge in Metern ablesen (Unity: 1 Unit = 1 Meter). +3. `_displaySpacing` je Achse auf **Kantenlänge × ca. 1,1–1,3** setzen (kleiner + Puffer gegen Berührung/Z-Fighting). + +Beispiel: Päckchen ist 0,08 m breit/tief, 0,12 m hoch → +`_displaySpacing ≈ (0.10, 0.14, 0.10)`. + +## Spalten/Reihen an die Behälter-Größe anpassen + +- **Lieferkarton**: `_displayColumns`/`_displayRows` grob an die + Innenmaße des Kartons anpassen (Spalten × Reihen × Spacing sollte nicht + größer sein als die Kartonöffnung — sonst "schwebt" ein Teil der Päckchen + sichtbar über dem Kartonrand). +- **ShelfSlot**: analog zur `_capacityUnits`/Fachbreite. Aktuell Default + 4×3 = 12 Plätze pro Lage, passend zur Standard-`_capacityUnits: 12` bei + `ShelfSize.Small`. Bei größeren Produkten (`Medium`/`Large`, siehe + `ProductDefinition.ShelfSize`) verringert sich die effektive Kapazität + automatisch (`ShelfSlot.Capacity()`) — Raster-Werte ggf. mit anpassen, + damit die sichtbare Anzeige zur tatsächlichen Kapazität passt. + +## Troubleshooting + +| Symptom | Wahrscheinliche Ursache | Fix | +|--------------------------------------------|---------------------------------------------|-----| +| Päckchen liegen auf der Seite / verdreht | Prefab-Grundausrichtung falsch | `_displayRotationEuler` justieren | +| Päckchen schweben über/versinken im Boden | Pivot des Prefabs nicht am Boden-Mittelpunkt| Pivot in Blender korrigieren, oder `_displaySpacing.y`/Lagenhöhe grob kompensieren | +| Päckchen überlappen sich sichtbar | `_displaySpacing` kleiner als Prefab-Größe | Spacing erhöhen (siehe Formel oben) | +| Zu viele/wenige Päckchen sichtbar | `_maxVisiblePackages` (Karton) bzw. `Capacity()` (Regal) vs. Raster-Kapazität passen nicht zusammen | `_displayColumns × _displayRows` an tatsächliche Kapazität anpassen | +| Fliegendes Päckchen landet anders gedreht als die ruhenden im Regal | War bis eben ein Bug (Flug nutzte rohe Transform-Rotation statt `_displayRotationEuler`) | Bereits gefixt: `ShelfSlot.GetSlotWorldRotation()` berücksichtigt jetzt beide | + +## Kurz zusammengefasst + +Keine der Zahlen ist "fest verdrahtet" — alle vier Felder sind Inspector- +Werte, extra dafür da, unterschiedliche Produkt-Prefabs ohne Code-Änderung +einzupassen. Der eigentliche Hebel für "richtig ausgerichtet" ist aber meist +der Pivot/die Grundrotation des Prefabs selbst — das Raster kann nur die +*Anordnung*, nicht die *Modellierung* korrigieren (außer über +`_displayRotationEuler` als Ausgleich).