HUD and Height Changes

This commit is contained in:
2026-06-07 22:29:25 -07:00
parent 4ebaba9933
commit 1ed2aa46c5
41 changed files with 24787 additions and 766 deletions
+21025 -500
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 85632fd8b2052f048ab191bf8b7f8a83
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
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:
Binary file not shown.
@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 09afebdec88af1646820da653de71e9f
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
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:
Binary file not shown.
@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 8bea1161a6580104b85e362974f14c24
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
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:
Binary file not shown.
@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 02b24470657cf114395232745e3ca5df
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
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:
Binary file not shown.
@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 4cad04019b84fcd47a3e799bb72e8db2
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
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:
Binary file not shown.
@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 38a2d28339e1c3f48ab441d371ad44cd
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
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:
@@ -33,7 +33,8 @@ Material:
m_CustomRenderQueue: -1 m_CustomRenderQueue: -1
stringTagMap: stringTagMap:
RenderType: Opaque RenderType: Opaque
disabledShaderPasses: [] disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties: m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
@@ -96,6 +97,7 @@ Material:
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Ints: [] m_Ints: []
m_Floats: m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0 - _AlphaClip: 0
- _AlphaToMask: 0 - _AlphaToMask: 0
- _Blend: 0 - _Blend: 0
@@ -127,6 +129,7 @@ Material:
- _Surface: 0 - _Surface: 0
- _UVSec: 0 - _UVSec: 0
- _WorkflowMode: 1 - _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1}
@@ -134,3 +137,4 @@ Material:
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1
@@ -33,7 +33,8 @@ Material:
m_CustomRenderQueue: -1 m_CustomRenderQueue: -1
stringTagMap: stringTagMap:
RenderType: Opaque RenderType: Opaque
disabledShaderPasses: [] disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties: m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
@@ -63,8 +64,8 @@ Material:
m_Scale: {x: 2, y: 2} m_Scale: {x: 2, y: 2}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MainTex: - _MainTex:
m_Texture: {fileID: 0} m_Texture: {fileID: 2800000, guid: 6064e4e3e79a3a1408ee2059beaa066b, type: 3}
m_Scale: {x: 1, y: 1} m_Scale: {x: 2, y: 2}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MetallicGlossMap: - _MetallicGlossMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
@@ -96,6 +97,7 @@ Material:
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Ints: [] m_Ints: []
m_Floats: m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0 - _AlphaClip: 0
- _AlphaToMask: 0 - _AlphaToMask: 0
- _Blend: 0 - _Blend: 0
@@ -127,6 +129,7 @@ Material:
- _Surface: 0 - _Surface: 0
- _UVSec: 0 - _UVSec: 0
- _WorkflowMode: 1 - _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1}
@@ -134,3 +137,4 @@ Material:
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1
@@ -18,15 +18,15 @@ MonoBehaviour:
m_RenderMode: 0 m_RenderMode: 0
m_ColliderUpdateMode: 0 m_ColliderUpdateMode: 0
m_ColliderIsTrigger: 1 m_ColliderIsTrigger: 1
m_ScaleMode: 1 m_ScaleMode: 2
m_ReferenceSpritePixelsPerUnit: 100 m_ReferenceSpritePixelsPerUnit: 100
m_PixelsPerUnit: 100 m_PixelsPerUnit: 100
m_Scale: 1 m_Scale: 1
m_ReferenceDpi: 96 m_ReferenceDpi: 96
m_FallbackDpi: 96 m_FallbackDpi: 96
m_ReferenceResolution: {x: 1200, y: 800} m_ReferenceResolution: {x: 1920, y: 1080}
m_ScreenMatchMode: 0 m_ScreenMatchMode: 0
m_Match: 0 m_Match: 0.5
m_SortingOrder: 0 m_SortingOrder: 0
m_TargetDisplay: 0 m_TargetDisplay: 0
m_BindingLogLevel: 0 m_BindingLogLevel: 0
@@ -0,0 +1,30 @@
using ProjectM.Simulation;
using Unity.Entities;
using UnityEngine;
namespace ProjectM.Authoring
{
/// <summary>
/// Drop one instance into the Gameplay subscene. Bakes <see cref="WorldCollisionConfig"/> capturing the
/// "Environment" physics layer's BelongsTo mask (the layer the boundary-ring + landmark colliders live on).
/// The baker runs on the main thread, so the managed <see cref="LayerMask.NameToLayer"/> lookup is fine here —
/// this exists precisely so the Bursted server EnemyAISystem can read the mask as a plain uint at runtime.
/// </summary>
[DisallowMultipleComponent]
public class WorldCollisionAuthoring : MonoBehaviour
{
[Tooltip("Name of the Unity layer carrying the static world colliders (boundary ring + landmarks).")]
public string EnvironmentLayerName = "Environment";
private class WorldCollisionBaker : Baker<WorldCollisionAuthoring>
{
public override void Bake(WorldCollisionAuthoring authoring)
{
int layer = LayerMask.NameToLayer(authoring.EnvironmentLayerName);
uint mask = layer >= 0 ? 1u << layer : 0u;
var entity = GetEntity(TransformUsageFlags.None);
AddComponent(entity, new WorldCollisionConfig { EnvironmentMask = mask });
}
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ab1c895817ca4b64db74215f13abb5e3
@@ -4,6 +4,7 @@ using Unity.Collections;
using Unity.Entities; using Unity.Entities;
using Unity.Mathematics; using Unity.Mathematics;
using Unity.NetCode; using Unity.NetCode;
using Unity.Physics;
using Unity.Transforms; using Unity.Transforms;
namespace ProjectM.Server namespace ProjectM.Server
@@ -61,6 +62,11 @@ namespace ProjectM.Server
var serverTick = SystemAPI.GetSingleton<NetworkTime>().ServerTick; var serverTick = SystemAPI.GetSingleton<NetworkTime>().ServerTick;
uint now = serverTick.TickIndexForValidTick; uint now = serverTick.TickIndexForValidTick;
var ecb = new EntityCommandBuffer(Allocator.Temp); var ecb = new EntityCommandBuffer(Allocator.Temp);
bool havePhysics = SystemAPI.TryGetSingleton<PhysicsWorldSingleton>(out var physics);
uint envMask = SystemAPI.TryGetSingleton<WorldCollisionConfig>(out var worldCol) ? worldCol.EnvironmentMask : 0u;
var envFilter = new CollisionFilter { BelongsTo = ~0u, CollidesWith = envMask, GroupIndex = 0 };
bool sweep = havePhysics && envMask != 0u;
const float SweepRadius = 0.5f; // collide-and-slide sphere radius for Husk movement
foreach (var (xform, stats, cooldown, knockback, windup) in foreach (var (xform, stats, cooldown, knockback, windup) in
SystemAPI.Query<RefRW<LocalTransform>, RefRO<EnemyStats>, RefRW<EnemyAttackCooldown>, SystemAPI.Query<RefRW<LocalTransform>, RefRO<EnemyStats>, RefRW<EnemyAttackCooldown>,
@@ -78,6 +84,8 @@ namespace ProjectM.Server
{ {
float3 kpos = pos + new float3(kb.Dir.x, 0f, kb.Dir.y) * (kb.Speed * dt); float3 kpos = pos + new float3(kb.Dir.x, 0f, kb.Dir.y) * (kb.Speed * dt);
kpos.y = pos.y; kpos.y = pos.y;
if (sweep)
kpos = SweptMove(in physics, pos, kpos, SweepRadius, envFilter);
xform.ValueRW.Position = kpos; xform.ValueRW.Position = kpos;
windup.ValueRW.WindUpUntilTick = 0; // a recoiling Husk does not wind up windup.ValueRW.WindUpUntilTick = 0; // a recoiling Husk does not wind up
continue; // recoiling: skip seek + strike this tick continue; // recoiling: skip seek + strike this tick
@@ -106,6 +114,8 @@ namespace ProjectM.Server
float3 vel = EnemyAIMath.SeekVelocity(pos, targetPos, stats.ValueRO.MoveSpeed, stopDistance); float3 vel = EnemyAIMath.SeekVelocity(pos, targetPos, stats.ValueRO.MoveSpeed, stopDistance);
float3 newPos = pos + vel * dt; float3 newPos = pos + vel * dt;
newPos.y = pos.y; // hold the movement plane newPos.y = pos.y; // hold the movement plane
if (sweep)
newPos = SweptMove(in physics, pos, newPos, SweepRadius, envFilter);
xform.ValueRW.Position = newPos; xform.ValueRW.Position = newPos;
// Face the target (planar) for presentation. // Face the target (planar) for presentation.
@@ -166,5 +176,38 @@ namespace ProjectM.Server
playerEntities.Dispose(); playerEntities.Dispose();
playerPositions.Dispose(); playerPositions.Dispose();
} }
// Swept collide-and-slide for server-authoritative Husk movement: sphere-cast the intended step against
// the static environment (boundary ring + landmarks) and stop at / glance along the first wall hit. Closest-
// hit SphereCast is non-generic -> Burst-safe (CLAUDE.md generic-collector hazard avoided). Y is held flat.
static float3 SweptMove(in PhysicsWorldSingleton physics, float3 from, float3 to, float radius, CollisionFilter filter)
{
float3 delta = to - from;
delta.y = 0f;
float dist = math.length(delta);
if (dist < 1e-5f)
return to;
float3 dir = delta / dist;
const float skin = 0.05f;
var cw = physics.CollisionWorld;
if (!cw.SphereCast(from, radius, dir, dist, out var hit, filter))
return to;
float allowed = math.max(0f, hit.Fraction * dist - skin);
float3 stop = from + dir * allowed;
stop.y = from.y;
// Slide the unused motion along the wall, then sweep the slide so we don't tunnel a second wall.
float3 slide = EnemyAIMath.SlideVelocity(to - stop, hit.SurfaceNormal);
float slideDist = math.length(slide);
if (slideDist < 1e-5f)
return stop;
float3 sdir = slide / slideDist;
float3 result = cw.SphereCast(stop, radius, sdir, slideDist, out var hit2, filter)
? stop + sdir * math.max(0f, hit2.Fraction * slideDist - skin)
: stop + slide;
result.y = from.y;
return result;
}
} }
} }
@@ -9,7 +9,8 @@
"Unity.Mathematics", "Unity.Mathematics",
"Unity.Burst", "Unity.Burst",
"Unity.NetCode", "Unity.NetCode",
"Unity.Networking.Transport" "Unity.Networking.Transport",
"Unity.Physics"
], ],
"includePlatforms": [], "includePlatforms": [],
"excludePlatforms": [], "excludePlatforms": [],
@@ -35,6 +35,24 @@ namespace ProjectM.Simulation
d.y = 0f; d.y = 0f;
return math.lengthsq(d) <= range * range; return math.lengthsq(d) <= range * range;
} }
/// <summary>
/// Projects a planar movement <paramref name="vel"/> onto a wall plane defined by <paramref name="surfaceNormal"/>
/// (collide-and-slide): removes the component of <paramref name="vel"/> that pushes into the surface so the
/// mover glances along the wall instead of stopping dead. Both inputs are flattened to the XZ plane (top-down).
/// Returns <paramref name="vel"/> unchanged when the normal is degenerate.
/// </summary>
public static float3 SlideVelocity(float3 vel, float3 surfaceNormal)
{
surfaceNormal.y = 0f;
float len = math.length(surfaceNormal);
if (len < 1e-6f)
return vel;
float3 n = surfaceNormal / len;
float3 slid = vel - math.dot(vel, n) * n;
slid.y = 0f;
return slid;
}
/// <summary> /// <summary>
/// Deterministic planar ring position around <paramref name="center"/> for spawn /// Deterministic planar ring position around <paramref name="center"/> for spawn
@@ -0,0 +1,17 @@
using Unity.Entities;
namespace ProjectM.Simulation
{
/// <summary>
/// Singleton holding the physics-filter mask of the static world-collision layer ("Environment"): the baked
/// boundary ring + landmark colliders the player CC sweeps. Baked from the GameObject layer at edit-time (see
/// WorldCollisionAuthoring) so server systems can build a <c>CollisionFilter</c> in Burst WITHOUT a managed
/// <c>LayerMask.NameToLayer</c> call or a hardcoded layer index. Read by <see cref="ProjectM.Server"/>'s
/// EnemyAISystem to sweep-test Husk movement against the environment only (never the player / other Husks).
/// </summary>
public struct WorldCollisionConfig : IComponentData
{
/// <summary>BelongsTo bitmask of the Environment physics layer (<c>1u &lt;&lt; layerIndex</c>).</summary>
public uint EnvironmentMask;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 70c75b96478d39f43aca221c926c9561
File diff suppressed because it is too large Load Diff
@@ -75,5 +75,41 @@ namespace ProjectM.Tests
var other = EnemyAIMath.RingPosition(c, 2, 8, 4f); var other = EnemyAIMath.RingPosition(c, 2, 8, 4f);
Assert.Greater(math.distance(a, other), 1e-3f); Assert.Greater(math.distance(a, other), 1e-3f);
} }
[Test]
public void SlideVelocity_RemovesIntoWallComponent()
{
// Moving +X into a wall whose normal is -X (facing the mover): the into-wall component is removed.
var slid = EnemyAIMath.SlideVelocity(new float3(4, 0, 0), new float3(-1, 0, 0));
Assert.AreEqual(0f, math.length(slid), Eps);
}
[Test]
public void SlideVelocity_KeepsParallelComponent()
{
// Moving diagonally into a wall with normal -X: the +X part is clipped, the +Z part survives.
var slid = EnemyAIMath.SlideVelocity(new float3(3, 0, 5), new float3(-1, 0, 0));
Assert.AreEqual(0f, slid.x, Eps);
Assert.AreEqual(5f, slid.z, Eps);
Assert.AreEqual(0f, slid.y, Eps);
}
[Test]
public void SlideVelocity_FlattensNormalToPlane()
{
// A normal with a Y tilt is flattened to XZ before projecting, so vertical tilt never leaks in.
var slid = EnemyAIMath.SlideVelocity(new float3(2, 0, 0), new float3(-1, 5, 0));
Assert.AreEqual(0f, slid.x, Eps);
Assert.AreEqual(0f, slid.y, Eps);
}
[Test]
public void SlideVelocity_DegenerateNormal_ReturnsInput()
{
var v = new float3(2, 0, 3);
var slid = EnemyAIMath.SlideVelocity(v, float3.zero);
Assert.AreEqual(v.x, slid.x, Eps);
Assert.AreEqual(v.z, slid.z, Eps);
}
} }
} }
+8 -8
View File
@@ -101,14 +101,14 @@ Long-form originals + the milestone each came from: `Docs/Vault/_Meta/CLAUDE_Bui
- **Synty HUD skin via a build-safe `HudTheme` ★ (DR-024):** Synty sprites/fonts under `Assets/Synty/…` (NOT Resources) → a runtime name-string `Resources.Load` is **build-stripped**; use a curated `HudTheme : ScriptableObject` (`Assets/_Project/Resources/HudTheme.asset`) holding **serialized** refs, loaded null-safe via `HudTheme.Get()` (every consumer falls back to flat on a null ref). `unityBackgroundImageTintColor` MULTIPLIES (tint white skins); fonts = cached SDF, reset on `SubsystemRegistration`. Don't set `unitySlice*` on Synty 9-slice frame/bar sprites (per-element ERROR; DO set it for border-0 sprites). Some Synty sprites import as **Multiple**`LoadAssetAtPath<Sprite>` null; verify. See [[DR-024_HUD_Synty_Skin_Theme]]. - **Synty HUD skin via a build-safe `HudTheme` ★ (DR-024):** Synty sprites/fonts under `Assets/Synty/…` (NOT Resources) → a runtime name-string `Resources.Load` is **build-stripped**; use a curated `HudTheme : ScriptableObject` (`Assets/_Project/Resources/HudTheme.asset`) holding **serialized** refs, loaded null-safe via `HudTheme.Get()` (every consumer falls back to flat on a null ref). `unityBackgroundImageTintColor` MULTIPLIES (tint white skins); fonts = cached SDF, reset on `SubsystemRegistration`. Don't set `unitySlice*` on Synty 9-slice frame/bar sprites (per-element ERROR; DO set it for border-0 sprites). Some Synty sprites import as **Multiple**`LoadAssetAtPath<Sprite>` null; verify. See [[DR-024_HUD_Synty_Skin_Theme]].
### Art import (HDRP store packs → URP) ### Art import (HDRP store packs → URP)
- BefourStudios art is **HDRP-authored** → magenta under URP 17.4 + Entities Graphics. **Convert, don't switch pipelines** (HDRP breaks Entities Graphics). Re-author to stock URP/Lit via `EnvArtTools.cs` (menu `ProjectM/Art/1. Convert Curated Env Materials`). Synty art is **URP-native — no conversion**. - BefourStudios art is **HDRP-authored** → magenta under URP 17.4 + Entities Graphics. **Convert, don't switch pipelines** (HDRP breaks EG): re-author to stock URP/Lit via `EnvArtTools.cs` (menu `ProjectM/Art/1. Convert Curated Env Materials`). Synty art is **URP-native — no conversion**.
- **World = cosmetic Synty nature biomes ★ (DR-025):** `Game.unity` roots `BaseBiome`(Meadow_Forest)@origin + `ExpeditionBiome`(Arid_Desert)@+1000 — classic-URP cosmetics, colliders stripped, **NEVER the subscene**; ground = stock URP/Lit `Mat_Grass_Textures_01`/`sand 1` (NOT prop-atlas `S_General` mats). Global `Skybox/Procedural` material (a Synty skydome MESH sits at origin can't cover two regions); per-region fog/ambient cross-fade via client `WorldAtmosphereSystem` (camera X>500, mirrors `HudSystem`). **PNB fog/cloud-ring PREFABS render as a white torus — don't place them** (use `RenderSettings` fog). See [[DR-025_World_Environment_Redo_Natural_Frontier]]. - **World = cosmetic Synty nature biomes ★ (DR-025):** `Game.unity` roots `BaseBiome`(Meadow_Forest)@origin + `ExpeditionBiome`(Arid_Desert)@+1000 — classic-URP cosmetics; ground = stock URP/Lit `Mat_Grass_Textures_01`/`sand 1` (NOT prop-atlas `S_General` mats). Global `Skybox/Procedural` (skydome MESH @origin can't span both regions); per-region fog/ambient cross-fade via client `WorldAtmosphereSystem` (camera X>500). **PNB fog/cloud-ring PREFABS = white torus — don't place.** See [[DR-025_World_Environment_Redo_Natural_Frontier]].
- **A dark-lit screenshot MASKS material bugs — verify material *values*.** Always `shader.GetPropertyType(idx)`-guard before `GetColor`/`GetFloat`/`GetTexture` (`S_General`'s `_BaseColorMultiply` is a float; `GetColor` on it returns black). Gate source emission on the `_Emissive` flag AND a fixture name. Keep converted env metallic low (0.10.2). - **A dark-lit screenshot MASKS material bugs — verify material *values*.** `shader.GetPropertyType(idx)`-guard before `GetColor`/`GetFloat`/`GetTexture` (`S_General`'s `_BaseColorMultiply` is a float `GetColor` returns black). Gate emission on the `_Emissive` flag + a fixture name; keep converted env metallic low (0.10.2).
- **`VolumeProfile.Add<T>()` does NOT persist** (serializes `{fileID:0}` on save) — use `AssetDatabase.AddObjectToAsset(component, profile)` + `SaveAssets`, verify on disk. - **`VolumeProfile.Add<T>()` does NOT persist** (serializes `{fileID:0}`) — use `AssetDatabase.AddObjectToAsset(comp, profile)` + `SaveAssets`, verify on disk.
- **A reverted engine/URP upgrade can stamp `UniversalRenderPipelineGlobalSettings.asset` `m_AssetVersion` AHEAD of the package's `k_LastVersion`** (here 11 > 10, from the reverted 6.6 alpha). URP migrates **forward only**, so `URPPreprocessBuild` rejects the "from-the-future" asset (*"not at last version"*) — **blocks player builds but NOT editor Play**. Fix: reflection-set `m_AssetVersion` back to `k_LastVersion`, `SetDirty` + `SaveAssets`. - **A reverted engine/URP upgrade can stamp `URPGlobalSettings.asset` `m_AssetVersion` AHEAD of the package's `k_LastVersion`** (11>10, from the reverted 6.6 alpha); URP migrates forward-only so `URPPreprocessBuild` rejects it (*"not at last version"*) — **blocks player builds, not editor Play**. Fix: reflection-set `m_AssetVersion` back to `k_LastVersion` + `SaveAssets`.
- **`LocalTransform.FromPosition()` resets Scale=1** — server spawners must read the prefab's baked `LocalTransform` and override only Position (Scale is a replicated `[GhostField]` → consistent-but-wrong). - **`LocalTransform.FromPosition()` resets Scale=1** — server spawners read the prefab's baked `LocalTransform`, override only Position (Scale is a `[GhostField]` → consistent-but-wrong).
- **Static decor → gameplay subscene** (Entities Graphics renders only baked/EG-spawned entities); **strip colliders from cosmetic props** (else they bake into the PhysicsWorld the CC sweeps), no `GhostAuthoring` on scenery. Cosmetic SampleScene GameObjects (`SyntyWorld` root) render via classic URP and their colliders are **inert to the DOTS PhysicsWorld**. To swap a subscene object's visual while keeping collision: disable the MeshRenderer, keep the collider. - **Static decor → gameplay subscene** (Entities Graphics renders only baked/EG-spawned entities); **strip colliders from cosmetic props** (else they bake into the PhysicsWorld the CC sweeps), no `GhostAuthoring` on scenery (classic-URP cosmetic colliders are **inert to the DOTS PhysicsWorld**). **World collision = subscene-only ★:** `Environment`-layer boundary ring + landmark box colliders (player blocked via the default layer matrix); enemies slide via a server `CollisionWorld.SphereCast` in `EnemyAISystem` (filter=`WorldCollisionConfig.EnvironmentMask`). Boundaries read as a **raised rock-cliff bowl rim** (`SM_Env_Rock_Cliff` ring ground-snapped at the collider radius, flat walkable interior) — top-down gates height as a hard vertical wall, never traversable slopes. See [[2026-06-08_World_Collision_HUD_Scaling]].
- **A GA "projectile" prefab self-propels** (non-kinematic `Rigidbody` + collider + `ProjectileMoveScript`) — strip to particles before `Start` (`CombatFeedbackSystem.StripCosmetic`). Verify a prefab's *components*, not its name. - **A GA "projectile" prefab self-propels** (non-kinematic `Rigidbody`+collider+`ProjectileMoveScript`) — strip to particles before `Start` (`CombatFeedbackSystem.StripCosmetic`). Verify *components*, not the name.
### Aim controls ### Aim controls
- **Client-derived aim rides the EXISTING `PlayerInput.Aim` `[GhostField]`** — mouse-cursor aim computed in `PlayerInputGatherSystem` (managed `SystemBase`, `GhostInputSystemGroup`): `Mouse.current.position``Camera.main.ScreenPointToRay``AimMath.PlanarAimFromRay` (pure, unit-tested) → player→cursor direction. Only the direction crosses the wire; strafe-while-aiming is free (`Move` already decoupled from `Aim`). - **Client-derived aim rides the EXISTING `PlayerInput.Aim` `[GhostField]`** — mouse-cursor aim computed in `PlayerInputGatherSystem` (managed `SystemBase`, `GhostInputSystemGroup`): `Mouse.current.position``Camera.main.ScreenPointToRay``AimMath.PlanarAimFromRay` (pure, unit-tested) → player→cursor direction. Only the direction crosses the wire; strafe-while-aiming is free (`Move` already decoupled from `Aim`).
@@ -1,7 +1,15 @@
--- ---
date: 2026-06-03 date: 2026-06-03
type: session type: session
tags: [session, input, controls, aiming, gamepad, netcode, presentation] tags:
- session
- input
- controls
- aiming
- gamepad
- netcode
- presentation
permalink: gamevault/07-sessions/2026/2026-06-03-aim-controls-cursor-gamepad
--- ---
# Session 2026-06-03 — Aim controls: mouse cursor + gamepad twin-stick # Session 2026-06-03 — Aim controls: mouse cursor + gamepad twin-stick
@@ -40,4 +48,4 @@ After the first pass landed and tested well, the operator asked to make KBM aimi
## Next ## Next
- Operator focused click-test of cursor aim + device switching; then consider ability-slot expansion or controller aim-assist tuning. - Operator focused click-test of cursor aim + device switching; then consider ability-slot expansion or controller aim-assist tuning.
@@ -1,7 +1,14 @@
--- ---
date: 2026-06-03 date: 2026-06-03
type: session type: session
tags: [session, m6, core-loop, netcode, ghost-relevancy, design] tags:
- session
- m6
- core-loop
- netcode
- ghost-relevancy
- design
permalink: gamevault/07-sessions/2026/2026-06-03-m6-aether-cycle-core-loop
--- ---
# Session 2026-06-03 — M6 "The Aether Cycle": core-loop research, plan, and Stages 01 # Session 2026-06-03 — M6 "The Aether Cycle": core-loop research, plan, and Stages 01
@@ -130,4 +137,4 @@ See [[DR-013_M6_Aether_Cycle_Region_Split]] for the full architecture + validate
## Next ## Next
Checkpoint for operator feedback on the working core-loop skeleton, then continue Stage 2 (resources + harvest) Checkpoint for operator feedback on the working core-loop skeleton, then continue Stage 2 (resources + harvest)
— the gather half of the economy — followed by build placement (Stage 3) and persistence/goal (Stage 4). — the gather half of the economy — followed by build placement (Stage 3) and persistence/goal (Stage 4).
@@ -1,7 +1,15 @@
--- ---
date: 2026-06-03 date: 2026-06-03
type: session type: session
tags: [session, cleanup, housekeeping, netcode, perf, vault, packages] tags:
- session
- cleanup
- housekeeping
- netcode
- perf
- vault
- packages
permalink: gamevault/07-sessions/2026/2026-06-03-pre-m6-cleanup
--- ---
# Session 2026-06-03 — Pre-M6 cleanup (loose ends before Build/Placement) # Session 2026-06-03 — Pre-M6 cleanup (loose ends before Build/Placement)
@@ -45,4 +53,4 @@ Inventory finding up front: the **code layer was already clean** — no open dec
## Next ## Next
- Start **M6 — Build/Placement** (server-authoritative grid placement via RPC) on the locked `BaseGridMath` coordinate space ([[DR-008_M5_HomeBase_BaseLayer_Storage]]). - Start **M6 — Build/Placement** (server-authoritative grid placement via RPC) on the locked `BaseGridMath` coordinate space ([[DR-008_M5_HomeBase_BaseLayer_Storage]]).
@@ -1,7 +1,15 @@
--- ---
date: 2026-06-04 date: 2026-06-04
type: session type: session
tags: [session, core-loop, pacing, netcode, dev-tools, scenes, m8] tags:
- session
- core-loop
- pacing
- netcode
- dev-tools
- scenes
- m8
permalink: gamevault/07-sessions/2026/2026-06-04-m8-persistent-base-player-driven-pacing
--- ---
# Session 2026-06-04 — M8: Persistent base & player-driven pacing # Session 2026-06-04 — M8: Persistent base & player-driven pacing
@@ -61,4 +69,4 @@ Replaces the M6 **forced-timer treadmill** (Expedition 60s → Defend → Build
- **Build/automation/customization expansion** on the now-persistent base (the operator's stated next direction) — the ThreatDirector inert sources + the DR-014 structure tick fields are the additive hooks. - **Build/automation/customization expansion** on the now-persistent base (the operator's stated next direction) — the ThreatDirector inert sources + the DR-014 structure tick fields are the additive hooks.
- Multi-client (MPPM) run of the co-op split-presence + dev-tools-over-a-real-connection (the unconditional RPC type is the enabler). - Multi-client (MPPM) run of the co-op split-presence + dev-tools-over-a-real-connection (the unconditional RPC type is the enabler).
- Optional: base-integrity fail-state if losing a siege should have visible teeth. - Optional: base-integrity fail-state if losing a siege should have visible teeth.
@@ -1,7 +1,15 @@
--- ---
date: 2026-06-04 date: 2026-06-04
type: session type: session
tags: [session, polish, backlog, testing, hygiene, netcode, audio] tags:
- session
- polish
- backlog
- testing
- hygiene
- netcode
- audio
permalink: gamevault/07-sessions/2026/2026-06-04-polish-backlog-pass
--- ---
# Session 2026-06-04 — Polish & Backlog-Clear Pass (Stages AG) # Session 2026-06-04 — Polish & Backlog-Clear Pass (Stages AG)
@@ -72,4 +80,4 @@ This log covers **Stages A, B, C, D, and E(audio)**. Stages AC were done on t
- **Polish stages AF are DONE + validated** (118 EditMode green; the one new netcode surface — `CycleState.WaveNumber` — proven server==client in Play; feel operator-approved; props reskinned + post verified). - **Polish stages AF are DONE + validated** (118 EditMode green; the one new netcode surface — `CycleState.WaveNumber` — proven server==client in Play; feel operator-approved; props reskinned + post verified).
- **Stage G done so far:** timed modifiers, knockback, attack telegraph (all validated). **Remaining:** the ranged **Spitter** (the large one — new `EnemySpitter` + new interpolated `EnemyProjectile` ghost prefabs + spit-fire/move/damage-vs-players systems; re-bake = new ghost TYPES, not an existing-ghost serializer change) and **multi-prefab abilities** (generalize the non-Burst `ProjectileClassificationSystem` to a ghost-type SET; core correctness — no owner-client double-spawn — is Play-only). Small fold-ins still open: standalone-server debug RPC, storage proximity-gate, pickup auto-grant (confirm intent). - **Stage G done so far:** timed modifiers, knockback, attack telegraph (all validated). **Remaining:** the ranged **Spitter** (the large one — new `EnemySpitter` + new interpolated `EnemyProjectile` ghost prefabs + spit-fire/move/damage-vs-players systems; re-bake = new ghost TYPES, not an existing-ghost serializer change) and **multi-prefab abilities** (generalize the non-Burst `ProjectileClassificationSystem` to a ghost-type SET; core correctness — no owner-client double-spawn — is Play-only). Small fold-ins still open: standalone-server debug RPC, storage proximity-gate, pickup auto-grant (confirm intent).
- **Stage H** (rebindable controls + ability slots + ability icon/UI) and **Stage I** (thin-client/MPPM harness + operator-required live runs: two-build LAN co-op, live fire, standalone server perf — the standing ~1.251.75 ticks/frame question). - **Stage H** (rebindable controls + ability slots + ability icon/UI) and **Stage I** (thin-client/MPPM harness + operator-required live runs: two-build LAN co-op, live fire, standalone server perf — the standing ~1.251.75 ticks/frame question).
@@ -1,7 +1,18 @@
--- ---
date: 2026-06-05 date: 2026-06-05
type: session type: session
tags: [session, frontend, menu, ui-toolkit, settings, saves, netcode, world-lifecycle, build, infra] tags:
- session
- frontend
- menu
- ui-toolkit
- settings
- saves
- netcode
- world-lifecycle
- build
- infra
permalink: gamevault/07-sessions/2026/2026-06-05-game-infrastructure-menu-settings-saves
--- ---
# Session 2026-06-05 — Game infrastructure: Main Menu, Settings, Saves foundation, Build wiring # Session 2026-06-05 — Game infrastructure: Main Menu, Settings, Saves foundation, Build wiring
@@ -79,4 +90,4 @@ The core change: adopt the Netcode **frontend pattern** — boot a menu with NO
## Next ## Next
- Operator: run the build + a real LAN join; then resume **M7 Automation** (the next milestone) or base/automation expansion on the now-buildable, persistent-save foundation. - Operator: run the build + a real LAN join; then resume **M7 Automation** (the next milestone) or base/automation expansion on the now-buildable, persistent-save foundation.
@@ -1,7 +1,15 @@
--- ---
date: 2026-06-05 date: 2026-06-05
type: session type: session
tags: [session, hud, ui-toolkit, build-palette, presentation, uitk, juice] tags:
- session
- hud
- ui-toolkit
- build-palette
- presentation
- uitk
- juice
permalink: gamevault/07-sessions/2026/2026-06-05-hud-rework-uitk-build-palette
--- ---
# Session 2026-06-05 — HUD rework to UI Toolkit + build-palette HUD (click-to-place + ghost preview) # Session 2026-06-05 — HUD rework to UI Toolkit + build-palette HUD (click-to-place + ghost preview)
@@ -38,4 +46,4 @@ Converted the in-game HUD from code-built **uGUI** (`HudSystem`'s RawImage bars
- **Per-buildable icons** + a conveyor-facing arrow on the ghost (text-only palette + cube ghost today). - **Per-buildable icons** + a conveyor-facing arrow on the ghost (text-only palette + cube ghost today).
- **Throughput visuals** (item-on-belt) still need a small replicated field (server-only machine buffers don't reach the client). - **Throughput visuals** (item-on-belt) still need a small replicated field (server-only machine buffers don't reach the client).
- Remove the legacy IMGUI `ConnectionUI` "Net: Connected" label (backlog) — the only non-UITK on-screen UI left in-game. - Remove the legacy IMGUI `ConnectionUI` "Net: Connected" label (backlog) — the only non-UITK on-screen UI left in-game.
- Optional: a one-line "BUILD: [name] • click to place, [/] rotate, Esc cancel" hint while in build mode; a build toggle key to open/close the palette focus. - Optional: a one-line "BUILD: [name] • click to place, [/] rotate, Esc cancel" hint while in build mode; a build toggle key to open/close the palette focus.
@@ -1,7 +1,16 @@
--- ---
date: 2026-06-05 date: 2026-06-05
type: session type: session
tags: [session, m7, automation, production-chains, conveyor, persistence, netcode, determinism] tags:
- session
- m7
- automation
- production-chains
- conveyor
- persistence
- netcode
- determinism
permalink: gamevault/07-sessions/2026/2026-06-05-m7-automation
--- ---
# Session 2026-06-05 — M7 Automation: self-running production chains (Harvester → Conveyor → Fabricator) # Session 2026-06-05 — M7 Automation: self-running production chains (Harvester → Conveyor → Fabricator)
@@ -46,4 +55,4 @@ Intake decisions (AskUserQuestion):
- **Build-palette HUD + ghost preview** + a conveyor-facing indicator (dev `[`/`]` rotate + H/F/C keys only today). - **Build-palette HUD + ghost preview** + a conveyor-facing indicator (dev `[`/`]` rotate + H/F/C keys only today).
- **Relevancy ceiling:** `RegionRelevancySystem`'s O(structures×connections)/tick scan becomes load-bearing at higher conveyor counts (DR-014 ceiling note) — batch it when counts grow. - **Relevancy ceiling:** `RegionRelevancySystem`'s O(structures×connections)/tick scan becomes load-bearing at higher conveyor counts (DR-014 ceiling note) — batch it when counts grow.
- **Recipe depth:** multi-input fabricator recipes; fabricator→conveyor output chaining (additive — give the fabricator a `MachineOutput`); per-machine distinct meshes (machines reuse the Turret mesh as a placeholder). - **Recipe depth:** multi-input fabricator recipes; fabricator→conveyor output chaining (additive — give the fabricator a `MachineOutput`); per-machine distinct meshes (machines reuse the Turret mesh as a placeholder).
- **Operator live play-through** + a real 2-build LAN run to exercise the chain under latency (single-client validated). - **Operator live play-through** + a real 2-build LAN run to exercise the chain under latency (single-client validated).
@@ -1,7 +1,16 @@
--- ---
date: 2026-06-06 date: 2026-06-06
type: session type: session
tags: [session, animation, rukhanka, synty, netcode, presentation, dots, slice] tags:
- session
- animation
- rukhanka
- synty
- netcode
- presentation
- dots
- slice
permalink: gamevault/07-sessions/2026/2026-06-06-animation-pipeline-slice1
--- ---
# Session 2026-06-06 — Animation pipeline (Rukhanka + Synty), Slice 1: the player is alive # Session 2026-06-06 — Animation pipeline (Rukhanka + Synty), Slice 1: the player is alive
@@ -45,4 +54,4 @@ Operator (via `/dots-dev`, ultracode): *"Explore animations for this DOTS projec
- Template the pipeline to **enemies** (Husk/Brute/Swarmer) — same flow, swap mesh + reuse `AC_PlayerTopDown` (or per-enemy clips). - Template the pipeline to **enemies** (Husk/Brute/Swarmer) — same flow, swap mesh + reuse `AC_PlayerTopDown` (or per-enemy clips).
- Source a **combat/hit-react/death** anim pack (Base Locomotion is locomotion-only; Death is a crouch placeholder; Fire has no clip yet). - Source a **combat/hit-react/death** anim pack (Base Locomotion is locomotion-only; Death is a crouch placeholder; Fire has no clip yet).
- **Aim-IK** upper body toward the cursor (twin-stick), then ragdoll-on-death, bone-socket weapons, GPU engine + VAT for crowds. - **Aim-IK** upper body toward the cursor (twin-stick), then ragdoll-on-death, bone-socket weapons, GPU engine + VAT for crowds.
- Operator live play-through to tune anim-speed scaling / blend thresholds / the 0.9 offset, and a 2-client MPPM check that remote players animate (the position-delta path). - Operator live play-through to tune anim-speed scaling / blend thresholds / the 0.9 offset, and a 2-client MPPM check that remote players animate (the position-delta path).
@@ -1,7 +1,16 @@
--- ---
date: 2026-06-06 date: 2026-06-06
type: session type: session
tags: [session, cleanup, alignment, docs, refactor, hygiene, connectionui, uitk] tags:
- session
- cleanup
- alignment
- docs
- refactor
- hygiene
- connectionui
- uitk
permalink: gamevault/07-sessions/2026/2026-06-06-cleanup-alignment
--- ---
# Session 2026-06-06 — Cleanup & alignment (docs, dead code, refactor) before more development # Session 2026-06-06 — Cleanup & alignment (docs, dead code, refactor) before more development
@@ -50,4 +59,4 @@ No DR (hygiene pass). Reaffirmed conventions: edit `Assets/*.cs` only via MCP; `
## Next-session intent ## Next-session intent
- Resume feature work on the now-aligned, committed base. Candidate threads from the M7 follow-ups: throughput/belt visuals (one replicated byte), recipe depth (multi-input fabricator, fabricator→conveyor chaining), per-machine meshes; operator live play-through + a real 2-build LAN run. - Resume feature work on the now-aligned, committed base. Candidate threads from the M7 follow-ups: throughput/belt visuals (one replicated byte), recipe depth (multi-input fabricator, fabricator→conveyor chaining), per-machine meshes; operator live play-through + a real 2-build LAN run.
- Optional code-tidy follow-ups (logged in [[Backlog]]) if churn budget allows. - Optional code-tidy follow-ups (logged in [[Backlog]]) if churn budget allows.
@@ -1,7 +1,18 @@
--- ---
date: 2026-06-06 date: 2026-06-06
type: session type: session
tags: [session, animation, rukhanka, synty, enemies, netcode, presentation, dots, slice, inventory] tags:
- session
- animation
- rukhanka
- synty
- enemies
- netcode
- presentation
- dots
- slice
- inventory
permalink: gamevault/07-sessions/2026/2026-06-06-enemy-animation-synty-inventory
--- ---
# Session 2026-06-06 — Enemy animation (Rukhanka, client-derived), Slice 2 + Synty inventory # Session 2026-06-06 — Enemy animation (Rukhanka, client-derived), Slice 2 + Synty inventory
@@ -42,4 +53,4 @@ Operator (via `/dots-dev`, ultracode): *"Extend the animation system to encompas
- **Cyberpunk enemy faction** (PolygonSciFiCity) as new wave variants on this exact pipeline — one material + `EnemyRigTools` variant rows. - **Cyberpunk enemy faction** (PolygonSciFiCity) as new wave variants on this exact pipeline — one material + `EnemyRigTools` variant rows.
- Wire **PolygonParticleFX** (blood/gore/explosion) into `VFXConfig` for richer Husk-death VFX. - Wire **PolygonParticleFX** (blood/gore/explosion) into `VFXConfig` for richer Husk-death VFX.
See [[DR-023_Enemy_Animation_MonsterMash]]. See [[DR-023_Enemy_Animation_MonsterMash]].
@@ -1,7 +1,16 @@
--- ---
date: 2026-06-07 date: 2026-06-07
type: session type: session
tags: [session, hud, ui-toolkit, synty, presentation, juice, build, dots] tags:
- session
- hud
- ui-toolkit
- synty
- presentation
- juice
- build
- dots
permalink: gamevault/07-sessions/2026/2026-06-07-hud-synty-visual-pass
--- ---
# Session 2026-06-07 — Expansive HUD visual pass (Synty sci-fi-soldier kit → UITK) # Session 2026-06-07 — Expansive HUD visual pass (Synty sci-fi-soldier kit → UITK)
@@ -42,4 +51,4 @@ The in-game HUD (DR-021) was code-built UITK but flat-colour + system font + tex
## Next-session intent ## Next-session intent
- Eyeball the HUD at a true 1920 game-view (the narrow ~945 editor window overlaps vitals↔palette — resolution artifact, fine at target res). - Eyeball the HUD at a true 1920 game-view (the narrow ~945 editor window overlaps vitals↔palette — resolution artifact, fine at target res).
- Confirm the conveyor-facing arrow's compass mapping vs the world placement ghost (a 1-line `FacingDegrees` offset if the arrow art's default vector differs); optional polish: cooldown radial, throughput visuals (needs a replicated machine field — DR-020 open). - Confirm the conveyor-facing arrow's compass mapping vs the world placement ghost (a 1-line `FacingDegrees` offset if the arrow art's default vector differs); optional polish: cooldown radial, throughput visuals (needs a replicated machine field — DR-020 open).
@@ -0,0 +1,141 @@
---
date: 2026-08-08
type: session
tags:
- session
- physics
- collision
- character-controller
- enemy-ai
- hud
- uitk
- ui-scaling
permalink: gamevault/07-sessions/2026/2026-06-08-world-collision-hud-scaling
---
# Session 2026-06-08 — World collision (terrain bowl + landmarks + enemies) & HUD scaling
> Driven by `/dots-dev`. Two operator bugs after the [[DR-025_World_Environment_Redo_Natural_Frontier]] world
> redo: the player glides through the world, and the HUD is huge/overlapping in Play.
## Goal
Operator: *"Fix the colliders for the terrain — the player just glides through them and other stuff is in the
middle of things. Then fix the HUD scaling — in Play it's huge and overlapping; make it scale correctly for the
editor and in game."* Intake forks resolved (one `AskUserQuestion`): collision scope = **boundary ring + solid
landmarks** (low cover stays walkable); **enemies must collide too**.
## Root causes
- **Collision:** DR-025 made the whole world cosmetic classic-URP GameObjects with colliders stripped (inert to the
DOTS PhysicsWorld). The player CC sweeps only the baked `Gameplay` subscene, which held just **3 leftover test
colliders** (`Wall_North`/`Wall_East`/`Pillar_Center` — the pillar sat at the player spawn origin). Enemies move
by direct `LocalTransform` writes (physics-blind), so they phase through everything too.
- **HUD:** `RuntimePanelSettings.asset` was effectively **`ConstantPhysicalSize`** (the serialized `m_ScaleMode: 1`
is NOT ScaleWithScreenSize in this Unity version — see gotcha). At 96 dpi that renders the HUD at **1:1 pixels**,
so the `HudSystem.cs` layout (420px bars, 3052px fonts) filled a small Game-view (the 420px health bar spanned
the whole 420px-tall view → "huge and overlapping"). It never scaled with the screen at all.
## What was done
### World collision
- New **`Environment` physics layer** (slot 8). Unity Physics 1.x derives a baked collider's `BelongsTo` from the
GameObject layer; the default layer-collision matrix has Default (player) collide with it → **player blocked for
free, no player-authoring change**.
- New `WorldCollisionConfig{uint EnvironmentMask}` (Simulation) baked by `WorldCollisionAuthoring` (Authoring) from
`1u << LayerMask.NameToLayer("Environment")` — lets the Bursted server AI build a `CollisionFilter` without a
managed lookup or a hardcoded layer index. One instance dropped in the subscene.
- Into the **Gameplay subscene** (open-additive → build via `execute_code` → save → close): a **boundary ring**
per region (base r30 / 16 segs outside the ±16 32×32 build grid; expedition r52 / 24 segs at the cliff line) of
tangent box segments (15% overlap, no gaps), plus **landmark box colliders** on the solid interior structures
(warpgate, cabin, windmill, well, waterwheel; expedition artefact, rock arch, sign, survey tent). Low/flat cover
(flowers, bushes, grass, ground rocks) intentionally **left walkable**. Removed the 3 stale test colliders.
- **Enemy collide-and-slide** in `EnemyAISystem` (server-only, non-predicted → no rollback/desync risk; stays
`[BurstCompile]`): both the seek and knockback moves are now swept with `CollisionWorld.SphereCast`
(closest-hit, non-generic → Burst-safe) filtered to `CollidesWith = EnvironmentMask` (hits only the static world,
never the player collider or other Husks — they have no collider). On a hit: stop at the wall (skin gap) then
slide the remainder along the surface via the new pure, unit-tested `EnemyAIMath.SlideVelocity(vel, normal)`, with
a second short sweep so it can't tunnel a second wall. Sweep radius is a constant 0.5 (decoupled from the
`HitRadius` query so the EnemyAISystem EditMode tests, which build minimal Husks, keep matching).
- `ProjectM.Server.asmdef` gained a direct **`Unity.Physics`** reference (needed for the cast).
### HUD scaling
- `RuntimePanelSettings.asset`: set **`scaleMode = ScaleWithScreenSize`** (the actual fix), `referenceResolution =
1920×1080`, `screenMatchMode = MatchWidthOrHeight`, `match = 0.5` — **applied via the typed `PanelSettings` API**,
not a SerializedObject int (the enum int is non-standard, below). Shared by HUD + menus/pause/settings → all
screens consistent. Verified live: panelScale 0.453 on a 991×420 Game-view (logical 2190×928) — the HUD now ~45%
of its former on-screen size and proportional at any resolution.
- **First attempt was a false fix:** a SerializedObject write of `m_ScaleMode = 1` (assuming 1 = ScaleWithScreenSize)
left it on **ConstantPhysicalSize**. Caught by reading `ps.scaleMode` at runtime in Play, not by the asset YAML.
## Validation
- **EditMode 218/218** (214 prior + 4 new `SlideVelocity` tests). First run caught 3 EnemyAISystem-test regressions
from adding `RefRO<HitRadius>` to the query (test Husks lack it) → fixed by dropping it for a constant radius.
- **Play-mode (server world introspection):** `WorldCollisionConfig.EnvironmentMask == 256`; CollisionWorld has
**50 static bodies** + 1 dynamic (player). SphereCasts on the env filter hit the base ring at 28.7m, the cabin
landmark at 6.5m, and the expedition ring at 50.7m — the exact pipeline `EnemyAISystem` uses, proven live. No
console errors / no Burst ICE in Play.
- **HUD screenshot** at a wide aspect: banner/resources/palette/health all proportionate and readable (no longer
huge or overlapping). At 16:9 the corner panels separate further.
## Gotchas / notes
- **`apply_text_edits` column math bit me twice** — guessed `endCol` values truncated lines (brace-balance validator
caught it) and an accidental `RefRO<LocalTransform>` swap. Lesson: use **full-line ranges** (start-of-line →
start-of-next-line) for multi-line replacements; let the validator + tests catch the rest.
- **Adding a component to a `SystemAPI.Query` tuple silently filters out entities that lack it** — broke 3 existing
tests whose minimal test entities didn't have `HitRadius`. Prefer a constant or a `ComponentLookup` HasComponent
check over widening a hot query when test fixtures build partial archetypes.
- `manage_scene save` saved the **active** (Game) scene, not the additively-opened Gameplay subscene — save the
subscene explicitly via `EditorSceneManager.SaveScene(GetSceneByName("Gameplay"))`.
- **`PanelSettings.m_ScaleMode` serialized int is NON-standard in Unity 6.4:** `ConstantPixelSize=0`,
**`ConstantPhysicalSize=1`**, **`ScaleWithScreenSize=2`** (confirmed by printing `(int)PanelScaleMode.*` at
runtime). Set scale mode via the **typed enum API** (`ps.scaleMode = PanelScaleMode.ScaleWithScreenSize`), never a
raw SerializedObject int — and **verify the live `ps.scaleMode` in Play**, not the asset YAML (the YAML int lies).
## Known limitation (future work)
Enemies collide-and-slide but have **no pathfinding** — they can briefly stall in concave corners (sparse bowl
arena makes this acceptable). A nav pass (flow-field / simple steering-around) is the follow-up if it reads badly.
## Follow-up — verticality / "bowl rim" pass (operator feedback)
Operator: *"if traversal of the terrain/rocks isn't going to be smooth, instead of laying them out create a clear
verticality visual gap where it's clear the player can't go above this — how do Riftbreaker / V Rising handle
height?"* Forks: **raised cliff/rock-rim bowl** + **clear interior scatter, keep landmarks**.
**Design principle (Riftbreaker / V Rising / They Are Billions / Diablo):** the playable area is **flat** — the
player never traverses terrain height. Height is used *only* as a hard, legible boundary: a clear vertical cliff
face that towers over the play plane so it unmistakably reads "can't go up there." Things are **flat = walkable**
or **clearly tall/vertical = blocked**, never the ambiguous middle. Our bug was exactly that middle — rocks/chunks
at ground level the player clipped through, plus an invisible wall in open grass.
**What was done (cosmetic re-dressing of both `Game.unity` biome roots, aligned to the existing colliders):**
- The base (Meadow) biome has **no vertical-wall prefab** (only 105×18 flat terrain *tiles*), so the rim is built
from the **arid `SM_Env_Rock_Cliff`** (22u tall, vertical) — grey rock ringing a green meadow = a natural
mountain basin. A **continuous wall ring** (40 front @ r33 + 22 offset backstop @ r37.5, deterministic LCG,
per-piece ground-snap via renderer-bounds, colliders stripped) sits just behind the boundary collider (r30); the
34 trees re-rung densely *in front* at r28; big rocks pushed to a hidden band r40; flat terrain tiles pushed to
distant backdrop r78. Interior = flat flower meadow + low cover + landmarks only.
- Expedition (Arid) already used native rock cliffs → rebuilt as a continuous wall (46 @ r55 + 26 @ r60); 69 big
rock/spike/arch/mound instances pushed to backdrop r70; outer outpost props pulled inside the wall (~r46) so the
landmark cluster stays visible; low cover (cactus/bramble/craters/bones/pebbles) left walkable.
- `LM_RockArch` collider removed from the subscene (its cosmetic moved to the backdrop → it would've been an
invisible interior wall). Boundary-ring + remaining landmark colliders unchanged and still aligned.
**Validation:** player-eye screenshots both regions show a clear towering rock basin around a clean flat interior
(no horizon gaps); in-Play the gameplay camera confirms HUD + bowl together; server CollisionWorld = 49 static
(50 1 rock arch) + 1 dynamic, base & expedition ring casts still hit. Console clean.
**Technique note:** to ring tall props as a continuous, gap-free wall — overlap two offset rows (front + half-phase
backstop), `LookRotation(outward)` per piece, deterministic LCG jitter on radius/yaw/scale, and **ground-snap each
piece by `groundY - rendererBounds.min.y`** (Synty pivots vary; never trust pivot=base). Verify by screenshotting
from *inside* the bowl looking out (`manage_camera` `view_position`/`view_target`) — watch the region center
(expedition is at x=1000, **z=0**; a z=1000 camera shoots empty desert).
## Next-session intent
Trigger a live siege wave to watch Husks slide along the base ring / landmarks under load; tune boundary radii and
landmark box sizes against the visual props if anything reads off; consider per-tree collision only if the walkable
gaps feel wrong.
@@ -2,6 +2,7 @@
title: CLAUDE.md Build-Gotchas Archive title: CLAUDE.md Build-Gotchas Archive
type: reference type: reference
created: 2026-06-04 created: 2026-06-04
permalink: gamevault/meta/claude-build-gotchas-archive
--- ---
# CLAUDE.md Build-Gotchas Archive # CLAUDE.md Build-Gotchas Archive
@@ -361,4 +362,4 @@ cosmetic classic-URP biomes in `Game.unity`; region-aware `WorldAtmosphereSystem
(mirrors `HudSystem.ExpeditionRegionXMin`). No ECS query, observe-only, `"Game"`-scene guarded so the menu isn't (mirrors `HudSystem.ExpeditionRegionXMin`). No ECS query, observe-only, `"Game"`-scene guarded so the menu isn't
restyled; knobs in a `WorldFeelConfig`-style MonoBehaviour with `SubsystemRegistration` static reset + null-safe restyled; knobs in a `WorldFeelConfig`-style MonoBehaviour with `SubsystemRegistration` static reset + null-safe
fallbacks. Zero sim/netcode impact (writes only global managed `RenderSettings`; `ClientSimulation` filter keeps fallbacks. Zero sim/netcode impact (writes only global managed `RenderSettings`; `ClientSimulation` filter keeps
it off the server/headless world). it off the server/headless world).
+3 -26
View File
@@ -2,7 +2,7 @@
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!78 &1 --- !u!78 &1
TagManager: TagManager:
serializedVersion: 2 serializedVersion: 3
tags: [] tags: []
layers: layers:
- Default - Default
@@ -13,7 +13,7 @@ TagManager:
- UI - UI
- -
- -
- - Environment
- -
- -
- -
@@ -50,27 +50,4 @@ TagManager:
- Light Layer 5 - Light Layer 5
- Light Layer 6 - Light Layer 6
- Light Layer 7 - Light Layer 7
- m_MigratedRenderPipelines: []
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-