diff --git a/Assets/Resources/Map3D.meta b/Assets/Resources/Map3D.meta new file mode 100644 index 0000000..1f09f54 --- /dev/null +++ b/Assets/Resources/Map3D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18e162eeff424f8bb3a71543eafba0c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Map3D/Map3DLit.mat b/Assets/Resources/Map3D/Map3DLit.mat new file mode 100644 index 0000000..c00c83e --- /dev/null +++ b/Assets/Resources/Map3D/Map3DLit.mat @@ -0,0 +1,58 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7493335797097805923 +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: Map3DLit + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + 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} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Cull: 2 + - _Metallic: 0 + - _Smoothness: 0.12 + - _Surface: 0 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Resources/Map3D/Map3DLit.mat.meta b/Assets/Resources/Map3D/Map3DLit.mat.meta new file mode 100644 index 0000000..b59d8ad --- /dev/null +++ b/Assets/Resources/Map3D/Map3DLit.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ec4d2749e73404eba2facea709d9f24 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/WorldMap/Map3D.cs b/Assets/Scripts/WorldMap/Map3D.cs index 236d2bb..a0d73f7 100644 --- a/Assets/Scripts/WorldMap/Map3D.cs +++ b/Assets/Scripts/WorldMap/Map3D.cs @@ -5,7 +5,7 @@ using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; // 3D НА ПРИМИТИВАХ: общие помощники для карты мира и 3D-поселения (переход на 2.5D, 04.11.2026). -// Материал берётся у встроенного примитива (шейдер URP по умолчанию точно есть в сборке), цвета кешируются. +// Материал -- свой, на URP Lit (Resources/Map3D/Map3DLit.mat), цвета кешируются. // Свои простые формы (конус, пирамида, двускатная крыша) -- для деревьев, шатров, крыш. // Подписи (TextMeshPro) поворачиваются к камере (FaceCamera). public static class Map3D @@ -20,9 +20,18 @@ public static class Map3D { if (baseMaterial == null) { - var probe = GameObject.CreatePrimitive(PrimitiveType.Cube); - baseMaterial = new Material(probe.GetComponent().sharedMaterial); - Object.Destroy(probe); + // Свой материал на URP Lit (Resources/Map3D/Map3DLit): материал встроенных примитивов в 2D-проекте -- + // спрайтовый, без света и без цвета. Нет ассета -- ищем шейдер по имени + var asset = Resources.Load("Map3D/Map3DLit"); + var shader = Shader.Find("Universal Render Pipeline/Lit"); + baseMaterial = asset != null ? new Material(asset) : shader != null ? new Material(shader) : null; + if (baseMaterial == null) + { + var probe = GameObject.CreatePrimitive(PrimitiveType.Cube); + baseMaterial = new Material(probe.GetComponent().sharedMaterial); + Object.Destroy(probe); + Debug.LogWarning("[3D] Нет материала Resources/Map3D/Map3DLit и шейдера URP Lit -- 3D будет без света"); + } materials.Clear(); } if (!materials.TryGetValue(color, out var m) || m == null)