From 11ab63660896bc78be168153502c68ab4ba2a170 Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Tue, 7 Apr 2026 17:30:17 +0300 Subject: [PATCH 1/7] Fix missing shader in build --- Assets/Features/VoxelWorld/Prefabs.meta | 8 ++ .../VoxelWorld/Prefabs/VoxelWorld.prefab | 49 ++++++++ .../VoxelWorld/Prefabs/VoxelWorld.prefab.meta | 7 ++ .../VoxelWorld/Runtime/VoxelWorldAtlas.cs | 8 +- .../VoxelWorld/Runtime/VoxelWorldGenerator.cs | 3 +- .../Scenes/VoxelWorldTestScene.unity | 105 ++++++++++-------- 6 files changed, 130 insertions(+), 50 deletions(-) create mode 100644 Assets/Features/VoxelWorld/Prefabs.meta create mode 100644 Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab create mode 100644 Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab.meta diff --git a/Assets/Features/VoxelWorld/Prefabs.meta b/Assets/Features/VoxelWorld/Prefabs.meta new file mode 100644 index 00000000..421001a2 --- /dev/null +++ b/Assets/Features/VoxelWorld/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67e1b040a2dcc344dbf491999c0877ba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab b/Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab new file mode 100644 index 00000000..f9bd641e --- /dev/null +++ b/Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab @@ -0,0 +1,49 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &797018065588400165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 74135865886311664} + - component: {fileID: 2927522923773808063} + m_Layer: 0 + m_Name: VoxelWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &74135865886311664 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797018065588400165} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2927522923773808063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 797018065588400165} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62cd563780165844caddc098f92ff23f, type: 3} + m_Name: + m_EditorClassIdentifier: VoxelWorld.Runtime::InfiniteWorld.VoxelWorld.VoxelWorldGenerator + streamTarget: {fileID: 0} + config: {fileID: 11400000, guid: b8cf28a5522134b479c23f017234070c, type: 2} + _terrainShader: {fileID: 4800000, guid: ec80aebd8cb61f44cbfa6b7d5f087211, type: 3} diff --git a/Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab.meta b/Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab.meta new file mode 100644 index 00000000..6c1042ed --- /dev/null +++ b/Assets/Features/VoxelWorld/Prefabs/VoxelWorld.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 91b5caa5457131b4f8c542529f4ad7c3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Features/VoxelWorld/Runtime/VoxelWorldAtlas.cs b/Assets/Features/VoxelWorld/Runtime/VoxelWorldAtlas.cs index ed24f97f..1c00ae72 100644 --- a/Assets/Features/VoxelWorld/Runtime/VoxelWorldAtlas.cs +++ b/Assets/Features/VoxelWorld/Runtime/VoxelWorldAtlas.cs @@ -41,7 +41,7 @@ namespace InfiniteWorld.VoxelWorld internal sealed class VoxelWorldAtlas : IDisposable { private const int FallbackTileSize = 32; - private const string ShaderName = "Infinite World/VoxelWorld/TextureArrayUnlit"; + // private const string ShaderName = "Infinite World/VoxelWorld/TextureArrayUnlit"; private static readonly VoxelSurfaceType[] SurfaceOrder = { @@ -76,7 +76,7 @@ namespace InfiniteWorld.VoxelWorld return layerLookup[0][surfaceType]; } - public static VoxelWorldAtlas CreateRuntimeAtlas(IReadOnlyList biomeProfiles) + public static VoxelWorldAtlas CreateRuntimeAtlas(IReadOnlyList biomeProfiles, Shader terrainShader) { List sourceBiomes = new List(); if (biomeProfiles != null) @@ -134,11 +134,11 @@ namespace InfiniteWorld.VoxelWorld textureArray.Apply(false, false); - Shader shader = Shader.Find(ShaderName); + Shader shader = terrainShader; if (shader == null) { shader = Shader.Find("Universal Render Pipeline/Unlit") ?? Shader.Find("Standard"); - Debug.LogError($"Shader '{ShaderName}' was not found. Falling back to '{shader?.name ?? ""}', but voxel texture array sampling will not work until the shader asset is imported correctly."); + Debug.LogError($"Shader was not found. Falling back to '{shader?.name ?? ""}', but voxel texture array sampling will not work until the shader asset is imported correctly."); } Material material = new Material(shader) diff --git a/Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs b/Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs index d3c37bae..fb0e468c 100644 --- a/Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs +++ b/Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs @@ -10,6 +10,7 @@ namespace InfiniteWorld.VoxelWorld [Header("References")] [SerializeField] private Transform streamTarget; [SerializeField] private VoxelWorldConfig config; + [SerializeField] private Shader _terrainShader; private readonly Dictionary chunks = new Dictionary(); private readonly Dictionary regions = new Dictionary(); @@ -134,7 +135,7 @@ namespace InfiniteWorld.VoxelWorld } atlas?.Dispose(); - atlas = VoxelWorldAtlas.CreateRuntimeAtlas(biomeProfiles); + atlas = VoxelWorldAtlas.CreateRuntimeAtlas(biomeProfiles, _terrainShader); atlasBiomeCount = atlas.BiomeCount; RefreshRegionMaterials(); } diff --git a/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity b/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity index 1d2b6978..38d3bbbd 100644 --- a/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity +++ b/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity @@ -383,56 +383,71 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1842209026 -GameObject: +--- !u!1001 &6493552143235564167 +PrefabInstance: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1842209028} - - component: {fileID: 1842209027} - m_Layer: 0 - m_Name: VoxelWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1842209027 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1842209026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62cd563780165844caddc098f92ff23f, type: 3} - m_Name: - m_EditorClassIdentifier: VoxelWorld.Runtime::InfiniteWorld.VoxelWorld.VoxelWorldGenerator - streamTarget: {fileID: 1331065949} - config: {fileID: 11400000, guid: b8cf28a5522134b479c23f017234070c, type: 2} ---- !u!4 &1842209028 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1842209026} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 74135865886311664, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 797018065588400165, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: m_Name + value: VoxelWorld + objectReference: {fileID: 0} + - target: {fileID: 2927522923773808063, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} + propertyPath: streamTarget + value: + objectReference: {fileID: 1331065949} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - {fileID: 1331065949} - {fileID: 47249972} - - {fileID: 1842209028} + - {fileID: 6493552143235564167} From 0e3b3a1ccf066a6a76608054ce29696bdfb72db8 Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Tue, 7 Apr 2026 17:33:44 +0300 Subject: [PATCH 2/7] Add test player with FishNet --- Assets/DefaultPrefabObjects.asset | 1 + .../VoxelWorld/Prefabs/TestPlayer.prefab | 284 ++++++++++++++++++ .../VoxelWorld/Prefabs/TestPlayer.prefab.meta | 7 + .../Scenes/VoxelWorldTestScene.unity | 106 +++++++ Assets/Scripts.meta | 8 + Assets/Scripts/Players.meta | 8 + Assets/Scripts/Players/PlayerMoving.cs | 25 ++ Assets/Scripts/Players/PlayerMoving.cs.meta | 3 + 8 files changed, 442 insertions(+) create mode 100644 Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab create mode 100644 Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab.meta create mode 100644 Assets/Scripts.meta create mode 100644 Assets/Scripts/Players.meta create mode 100644 Assets/Scripts/Players/PlayerMoving.cs create mode 100644 Assets/Scripts/Players/PlayerMoving.cs.meta diff --git a/Assets/DefaultPrefabObjects.asset b/Assets/DefaultPrefabObjects.asset index d304fcc5..f0bbbe06 100644 --- a/Assets/DefaultPrefabObjects.asset +++ b/Assets/DefaultPrefabObjects.asset @@ -20,6 +20,7 @@ MonoBehaviour: - {fileID: 8475222101369129519, guid: 8cf33e8e99a9b0c4c8f29ff725650de6, type: 3} - {fileID: 4512293259955182956, guid: dafef736ca1ae384e9a19eb672843563, type: 3} - {fileID: 201277550, guid: 5b712878ecece354ba4ffb026c0a221c, type: 3} + - {fileID: 6486868354670318784, guid: ab80b9a343dfa4c4b93abcde04f97f7c, type: 3} - {fileID: 4512293259955182956, guid: b8017cef39731ba439c70fecc09488e3, type: 3} - {fileID: 4512293259955182956, guid: 44611030e61220d42ab7c37ba3c0ea92, type: 3} - {fileID: 8192566354860284824, guid: 6331b3542e64a564c81bc39cedf70c8d, type: 3} diff --git a/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab new file mode 100644 index 00000000..5be71cf4 --- /dev/null +++ b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab @@ -0,0 +1,284 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4648252273784777908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 223370878831388739} + - component: {fileID: 3666431777996120290} + - component: {fileID: 534432799490794514} + - component: {fileID: 1002096626426394237} + - component: {fileID: 6486868354670318784} + - component: {fileID: -2928917776349411095} + - component: {fileID: -8563501143336689971} + - component: {fileID: 9116505237391369033} + - component: {fileID: 589237069399113730} + m_Layer: 0 + m_Name: TestPlayer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &223370878831388739 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3666431777996120290 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &534432799490794514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1002096626426394237 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6486868354670318784 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} + m_Name: + m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject + k__BackingField: 0 + WasActiveDuringEdit: 0 + WasActiveDuringEdit_Set1: 1 + k__BackingField: 0 + k__BackingField: {fileID: 0} + k__BackingField: {fileID: 0} + NetworkBehaviours: + - {fileID: -2928917776349411095} + - {fileID: -8563501143336689971} + - {fileID: 589237069399113730} + InitializedParentNetworkBehaviour: {fileID: 0} + InitializedNestedNetworkObjects: [] + RuntimeParentNetworkBehaviour: {fileID: 0} + RuntimeChildNetworkBehaviours: [] + _isNetworked: 1 + _isSpawnable: 1 + _isGlobal: 0 + _initializeOrder: 0 + _preventDespawnOnDisconnect: 0 + _defaultDespawnType: 0 + _initializedTimestamp: -8584260413153218752 + _localLevelOfDetailCalculationType: 0 + _useLevelOfDetail: 0 + _useRootLevelOfDetail: 1 + NetworkObserver: {fileID: 0} + _enablePrediction: 0 + _predictionType: 0 + _localReconcileCorrectionType: 2 + _graphicalObject: {fileID: 0} + _detachGraphicalObject: 0 + _enableStateForwarding: 1 + _networkTransform: {fileID: 0} + _ownerInterpolation: 1 + _ownerSmoothedProperties: 255 + _adaptiveInterpolation: 3 + _spectatorSmoothedProperties: 255 + _spectatorInterpolation: 2 + _enableTeleport: 0 + _teleportThreshold: 1 + k__BackingField: 7 + k__BackingField: 0 + k__BackingField: 13376045637011561578 + SceneId: 0 + SerializedTransformProperties: + Position: {x: 0, y: 1, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 1} + Scale: {x: 1, y: 1, z: 1} + IsValid: 1 +--- !u!114 &-2928917776349411095 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3} + m_Name: + m_EditorClassIdentifier: FishNet.Runtime::FishNet.Component.Transforming.NetworkTransform + _componentIndexCache: 0 + _addedNetworkObject: {fileID: 6486868354670318784} + _networkObjectCache: {fileID: 6486868354670318784} + _componentConfiguration: 0 + _synchronizeParent: 0 + _packing: + Position: 1 + Rotation: 1 + Scale: 0 + _useScaledTime: 1 + _interpolation: 2 + _extrapolation: 2 + _enableTeleport: 0 + _teleportThreshold: 1 + _clientAuthoritative: 1 + _sendToOwner: 1 + _interval: 1 + _synchronizePosition: 1 + _positionSensitivity: 0.001 + _positionSnapping: + X: 0 + Y: 0 + Z: 0 + _synchronizeRotation: 1 + _rotationSnapping: + X: 0 + Y: 0 + Z: 0 + _synchronizeScale: 1 + _scaleSensitivity: 0.001 + _scaleSnapping: + X: 0 + Y: 0 + Z: 0 +--- !u!114 &-8563501143336689971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a6a39c46bf52104ba8efe3100bce3f7, type: 3} + m_Name: + m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.EmptyNetworkBehaviour + _componentIndexCache: 1 + _addedNetworkObject: {fileID: 6486868354670318784} + _networkObjectCache: {fileID: 6486868354670318784} +--- !u!143 &9116505237391369033 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &589237069399113730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5c6622ebbd074d37a0d6e873d1ce5fb5, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Players.PlayerMoving + _componentIndexCache: 2 + _addedNetworkObject: {fileID: 6486868354670318784} + _networkObjectCache: {fileID: 6486868354670318784} + _moveSpeed: 200 + _characterController: {fileID: 9116505237391369033} diff --git a/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab.meta b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab.meta new file mode 100644 index 00000000..ed3dc2b1 --- /dev/null +++ b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ab80b9a343dfa4c4b93abcde04f97f7c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity b/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity index 38d3bbbd..1396ced6 100644 --- a/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity +++ b/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity @@ -246,6 +246,110 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &171707222 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 171707223} + m_Layer: 0 + m_Name: SpawnPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &171707223 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 171707222} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 18, y: 1, z: 0.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1165873058 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalPosition.x + value: 10.58689 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalPosition.y + value: -9.02278 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalPosition.z + value: -9.29275 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606050, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: _spawnablePrefabs + value: + objectReference: {fileID: 11400000, guid: 4ec3872aba40595448fd43a68bbb722a, type: 2} + - target: {fileID: 7443408887813606051, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: m_Name + value: NetworkManager + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606060, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: _playerPrefab + value: + objectReference: {fileID: 6486868354670318784, guid: ab80b9a343dfa4c4b93abcde04f97f7c, type: 3} + - target: {fileID: 7443408887813606060, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: Spawns.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7443408887813606060, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} + propertyPath: 'Spawns.Array.data[0]' + value: + objectReference: {fileID: 171707223} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} --- !u!1 &1331065945 GameObject: m_ObjectHideFlags: 0 @@ -451,3 +555,5 @@ SceneRoots: - {fileID: 1331065949} - {fileID: 47249972} - {fileID: 6493552143235564167} + - {fileID: 1165873058} + - {fileID: 171707223} diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta new file mode 100644 index 00000000..3a94a179 --- /dev/null +++ b/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78e78b94f5de6944c996b4e4fb8a4761 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Players.meta b/Assets/Scripts/Players.meta new file mode 100644 index 00000000..8bd85ac5 --- /dev/null +++ b/Assets/Scripts/Players.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35bd5ef7798f2cf429ce5b8a8fe07d0a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Players/PlayerMoving.cs b/Assets/Scripts/Players/PlayerMoving.cs new file mode 100644 index 00000000..4968e3af --- /dev/null +++ b/Assets/Scripts/Players/PlayerMoving.cs @@ -0,0 +1,25 @@ +using System; +using FishNet.Object; +using UnityEngine; + +namespace Players +{ + public sealed class PlayerMoving : NetworkBehaviour + { + [SerializeField] private float _moveSpeed = 5f; + [SerializeField] private CharacterController _characterController; + + private void Update() + { + if (!IsOwner) + return; + + float horizontal = Input.GetAxisRaw("Horizontal"); + float vertical = Input.GetAxisRaw("Vertical"); + + Vector3 offset = new Vector3(horizontal, Physics.gravity.y, vertical).normalized * (_moveSpeed * Time.deltaTime); + + _characterController.Move(offset); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Players/PlayerMoving.cs.meta b/Assets/Scripts/Players/PlayerMoving.cs.meta new file mode 100644 index 00000000..e05f566b --- /dev/null +++ b/Assets/Scripts/Players/PlayerMoving.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5c6622ebbd074d37a0d6e873d1ce5fb5 +timeCreated: 1775564440 \ No newline at end of file From 78a23c3367321e394d0da46608240c367db781cc Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Tue, 7 Apr 2026 23:19:35 +0300 Subject: [PATCH 3/7] Move through camera direction. Simple x-ray shader for player --- Assets/DefaultPrefabObjects.asset | 1 + .../VoxelWorld/Prefabs/MainCamera.prefab | 160 +++++++++++++++ .../VoxelWorld/Prefabs/MainCamera.prefab.meta | 7 + .../VoxelWorld/Prefabs/TestPlayer.prefab | 186 +++++++++++++++++- .../Scenes/VoxelWorldTestScene.unity | 152 +------------- Assets/Materials.meta | 8 + Assets/Materials/PlayerRevealUnlit.mat | 139 +++++++++++++ Assets/Materials/PlayerRevealUnlit.mat.meta | 8 + Assets/Scripts/Players/CameraFollow.cs | 42 ++++ Assets/Scripts/Players/CameraFollow.cs.meta | 3 + Assets/Scripts/Players/PlayerMoving.cs | 20 +- .../Scripts/Players/PlayerRevealController.cs | 65 ++++++ .../Players/PlayerRevealController.cs.meta | 3 + Assets/Shaders.meta | 8 + Assets/Shaders/RadiusRevealUnlit.shader | 92 +++++++++ Assets/Shaders/RadiusRevealUnlit.shader.meta | 9 + 16 files changed, 745 insertions(+), 158 deletions(-) create mode 100644 Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab create mode 100644 Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab.meta create mode 100644 Assets/Materials.meta create mode 100644 Assets/Materials/PlayerRevealUnlit.mat create mode 100644 Assets/Materials/PlayerRevealUnlit.mat.meta create mode 100644 Assets/Scripts/Players/CameraFollow.cs create mode 100644 Assets/Scripts/Players/CameraFollow.cs.meta create mode 100644 Assets/Scripts/Players/PlayerRevealController.cs create mode 100644 Assets/Scripts/Players/PlayerRevealController.cs.meta create mode 100644 Assets/Shaders.meta create mode 100644 Assets/Shaders/RadiusRevealUnlit.shader create mode 100644 Assets/Shaders/RadiusRevealUnlit.shader.meta diff --git a/Assets/DefaultPrefabObjects.asset b/Assets/DefaultPrefabObjects.asset index f0bbbe06..ca74b4a5 100644 --- a/Assets/DefaultPrefabObjects.asset +++ b/Assets/DefaultPrefabObjects.asset @@ -22,6 +22,7 @@ MonoBehaviour: - {fileID: 201277550, guid: 5b712878ecece354ba4ffb026c0a221c, type: 3} - {fileID: 6486868354670318784, guid: ab80b9a343dfa4c4b93abcde04f97f7c, type: 3} - {fileID: 4512293259955182956, guid: b8017cef39731ba439c70fecc09488e3, type: 3} + - {fileID: 5587832464535924346, guid: bc1373177ca13d8418f05b9dd87d621e, type: 3} - {fileID: 4512293259955182956, guid: 44611030e61220d42ab7c37ba3c0ea92, type: 3} - {fileID: 8192566354860284824, guid: 6331b3542e64a564c81bc39cedf70c8d, type: 3} - {fileID: 4512293259955182956, guid: f32d4c19de900e64cb73cedcb8ba6f70, type: 3} diff --git a/Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab b/Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab new file mode 100644 index 00000000..508b114c --- /dev/null +++ b/Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab @@ -0,0 +1,160 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5177362097893586452 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2155430825551146630} + - component: {fileID: 8957384475855038515} + - component: {fileID: 2868274918310715830} + - component: {fileID: 7814884211758925764} + - component: {fileID: 5507089623476542463} + m_Layer: 0 + m_Name: MainCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2155430825551146630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5177362097893586452} + serializedVersion: 2 + m_LocalRotation: {x: 0.2778159, y: 0.3649717, z: -0.115075134, w: 0.88111955} + m_LocalPosition: {x: 8, y: 12, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &8957384475855038515 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5177362097893586452} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!81 &2868274918310715830 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5177362097893586452} + m_Enabled: 1 +--- !u!114 &7814884211758925764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5177362097893586452} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!114 &5507089623476542463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5177362097893586452} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cd37f3ec0bf4c66960bab1545ac666f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Players.CameraFollow + _componentIndexCache: 0 + _addedNetworkObject: {fileID: 0} + _networkObjectCache: {fileID: 0} + _offset: {x: -10, y: 15, z: -10} + _rotation: {x: 45, y: 45, z: 0} + _target: {fileID: 0} + _orbitAngle: 0 + _mouseOrbitSensitivity: 180 diff --git a/Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab.meta b/Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab.meta new file mode 100644 index 00000000..0c36a977 --- /dev/null +++ b/Assets/Features/VoxelWorld/Prefabs/MainCamera.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bc1373177ca13d8418f05b9dd87d621e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab index 5be71cf4..ca54828c 100644 --- a/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab +++ b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab @@ -1,5 +1,163 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &4229103394069051166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6953774078570393484} + - component: {fileID: 82861378256693561} + - component: {fileID: 6532273981309083836} + - component: {fileID: 1233264528206448334} + - component: {fileID: 3532080573254851317} + m_Layer: 0 + m_Name: MainCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6953774078570393484 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4229103394069051166} + serializedVersion: 2 + m_LocalRotation: {x: 0.35355338, y: 0.35355338, z: -0.1464466, w: 0.8535535} + m_LocalPosition: {x: -10, y: 15, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 223370878831388739} + m_LocalEulerAnglesHint: {x: 45, y: 45, z: 0} +--- !u!20 &82861378256693561 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4229103394069051166} + m_Enabled: 0 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!81 &6532273981309083836 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4229103394069051166} + m_Enabled: 1 +--- !u!114 &1233264528206448334 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4229103394069051166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!114 &3532080573254851317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4229103394069051166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cd37f3ec0bf4c66960bab1545ac666f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Players.CameraFollow + _componentIndexCache: 0 + _addedNetworkObject: {fileID: 6486868354670318784} + _networkObjectCache: {fileID: 0} + _offset: {x: -10, y: 15, z: -10} + _rotation: {x: 45, y: 45, z: 0} + _target: {fileID: 223370878831388739} + _orbitAngle: 0 + _mouseOrbitSensitivity: 180 --- !u!1 &4648252273784777908 GameObject: m_ObjectHideFlags: 0 @@ -17,6 +175,7 @@ GameObject: - component: {fileID: -8563501143336689971} - component: {fileID: 9116505237391369033} - component: {fileID: 589237069399113730} + - component: {fileID: 5771682633975047943} m_Layer: 0 m_Name: TestPlayer m_TagString: Untagged @@ -36,7 +195,8 @@ Transform: m_LocalPosition: {x: 0, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 6953774078570393484} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &3666431777996120290 @@ -73,6 +233,7 @@ MeshRenderer: m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + - {fileID: 2100000, guid: 01c6913c53e417748bef75656d45169d, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -151,7 +312,7 @@ MonoBehaviour: _initializeOrder: 0 _preventDespawnOnDisconnect: 0 _defaultDespawnType: 0 - _initializedTimestamp: -8584260413153218752 + _initializedTimestamp: -8584260344466227969 _localLevelOfDetailCalculationType: 0 _useLevelOfDetail: 0 _useRootLevelOfDetail: 1 @@ -172,7 +333,7 @@ MonoBehaviour: _teleportThreshold: 1 k__BackingField: 7 k__BackingField: 0 - k__BackingField: 13376045637011561578 + k__BackingField: 13006684163472284730 SceneId: 0 SerializedTransformProperties: Position: {x: 0, y: 1, z: 0} @@ -282,3 +443,22 @@ MonoBehaviour: _networkObjectCache: {fileID: 6486868354670318784} _moveSpeed: 200 _characterController: {fileID: 9116505237391369033} +--- !u!114 &5771682633975047943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4648252273784777908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9da7d22d0c6d4292ab5d5c0c93ed65af, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Players.PlayerRevealController + _componentIndexCache: 255 + _addedNetworkObject: {fileID: 6486868354670318784} + _networkObjectCache: {fileID: 0} + _center: {fileID: 223370878831388739} + _revealRadius: 6 + _edgeSoftness: 1 + _centerOffset: {x: 0, y: 0, z: 0} diff --git a/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity b/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity index 1396ced6..a8028415 100644 --- a/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity +++ b/Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity @@ -285,18 +285,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} - propertyPath: m_LocalPosition.x - value: 10.58689 - objectReference: {fileID: 0} - - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} - propertyPath: m_LocalPosition.y - value: -9.02278 - objectReference: {fileID: 0} - - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} - propertyPath: m_LocalPosition.z - value: -9.29275 - objectReference: {fileID: 0} - target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} propertyPath: m_LocalRotation.w value: 1 @@ -350,143 +338,6 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3} ---- !u!1 &1331065945 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1331065949} - - component: {fileID: 1331065948} - - component: {fileID: 1331065947} - - component: {fileID: 1331065946} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1331065946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1331065945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_VolumeFrameworkUpdateModeOption: 2 - m_RenderPostProcessing: 0 - m_Antialiasing: 0 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 - m_AllowHDROutput: 1 - m_UseScreenCoordOverride: 0 - m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} - m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_TaaSettings: - m_Quality: 3 - m_FrameInfluence: 0.1 - m_JitterScale: 1 - m_MipBias: 0 - m_VarianceClampScale: 0.9 - m_ContrastAdaptiveSharpening: 0 - m_Version: 2 ---- !u!81 &1331065947 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1331065945} - m_Enabled: 1 ---- !u!20 &1331065948 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1331065945} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 300 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1331065949 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1331065945} - serializedVersion: 2 - m_LocalRotation: {x: 0.2778159, y: 0.3649717, z: -0.115075134, w: 0.88111955} - m_LocalPosition: {x: 8, y: 12, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &6493552143235564167 PrefabInstance: m_ObjectHideFlags: 0 @@ -542,7 +393,7 @@ PrefabInstance: - target: {fileID: 2927522923773808063, guid: 91b5caa5457131b4f8c542529f4ad7c3, type: 3} propertyPath: streamTarget value: - objectReference: {fileID: 1331065949} + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -552,7 +403,6 @@ PrefabInstance: SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 1331065949} - {fileID: 47249972} - {fileID: 6493552143235564167} - {fileID: 1165873058} diff --git a/Assets/Materials.meta b/Assets/Materials.meta new file mode 100644 index 00000000..adcc1fda --- /dev/null +++ b/Assets/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e370644e63186544ad98ca7578cb001 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/PlayerRevealUnlit.mat b/Assets/Materials/PlayerRevealUnlit.mat new file mode 100644 index 00000000..f83fe0e0 --- /dev/null +++ b/Assets/Materials/PlayerRevealUnlit.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: PlayerRevealUnlit + m_Shader: {fileID: 4800000, guid: 09e1c4f7331d42fda781999d558d2841, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, 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: 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 + - _Alpha: 1 + - _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 + - _EdgeSoftness: 2.76 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _RevealRadius: 11.83 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.49056602, g: 0.49056602, b: 0.49056602, 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 &6329224151418787501 +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/Materials/PlayerRevealUnlit.mat.meta b/Assets/Materials/PlayerRevealUnlit.mat.meta new file mode 100644 index 00000000..75a3f101 --- /dev/null +++ b/Assets/Materials/PlayerRevealUnlit.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01c6913c53e417748bef75656d45169d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Players/CameraFollow.cs b/Assets/Scripts/Players/CameraFollow.cs new file mode 100644 index 00000000..ee50cad0 --- /dev/null +++ b/Assets/Scripts/Players/CameraFollow.cs @@ -0,0 +1,42 @@ +using FishNet.Object; +using UnityEngine; + +namespace Players +{ + [RequireComponent(typeof(Camera))] + public sealed class CameraFollow : NetworkBehaviour + { + [SerializeField] private Vector3 _offset = new(-10, 15, -10); + [SerializeField] private Vector3 _rotation = new(45, 45, 0); + [SerializeField] private Transform _target; + [SerializeField, Range(0f, 360f)] private float _orbitAngle; + [SerializeField] private float _mouseOrbitSensitivity = 180f; + + private float _mouseOrbitAngle; + + public override void OnStartClient() + { + base.OnStartClient(); + + if(!IsOwner) + return; + + Camera cam = GetComponent(); + cam.enabled = true; + } + + private void Update() + { + if(!IsOwner || _target == null) + return; + + if (Input.GetMouseButton(1)) + _mouseOrbitAngle += Input.GetAxis("Mouse X") * _mouseOrbitSensitivity * Time.deltaTime; + + var orbitRotation = Quaternion.Euler(0f, _orbitAngle + _mouseOrbitAngle, 0f); + + transform.position = _target.position + orbitRotation * _offset; + transform.rotation = orbitRotation * Quaternion.Euler(_rotation); + } + } +} diff --git a/Assets/Scripts/Players/CameraFollow.cs.meta b/Assets/Scripts/Players/CameraFollow.cs.meta new file mode 100644 index 00000000..ab905e07 --- /dev/null +++ b/Assets/Scripts/Players/CameraFollow.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9cd37f3ec0bf4c66960bab1545ac666f +timeCreated: 1775572726 \ No newline at end of file diff --git a/Assets/Scripts/Players/PlayerMoving.cs b/Assets/Scripts/Players/PlayerMoving.cs index 4968e3af..5e59a7d2 100644 --- a/Assets/Scripts/Players/PlayerMoving.cs +++ b/Assets/Scripts/Players/PlayerMoving.cs @@ -1,4 +1,3 @@ -using System; using FishNet.Object; using UnityEngine; @@ -8,6 +7,15 @@ namespace Players { [SerializeField] private float _moveSpeed = 5f; [SerializeField] private CharacterController _characterController; + + private Transform _cameraTransform; + + private void Awake() + { + Camera playerCamera = GetComponentInChildren(true); + if (playerCamera != null) + _cameraTransform = playerCamera.transform; + } private void Update() { @@ -16,10 +24,14 @@ namespace Players float horizontal = Input.GetAxisRaw("Horizontal"); float vertical = Input.GetAxisRaw("Vertical"); - - Vector3 offset = new Vector3(horizontal, Physics.gravity.y, vertical).normalized * (_moveSpeed * Time.deltaTime); + + Transform directionSource = _cameraTransform != null ? _cameraTransform : transform; + Vector3 forward = Vector3.ProjectOnPlane(directionSource.forward, Vector3.up).normalized; + Vector3 right = Vector3.ProjectOnPlane(directionSource.right, Vector3.up).normalized; + Vector3 moveDirection = (right * horizontal + forward * vertical).normalized; + Vector3 offset = moveDirection * (_moveSpeed * Time.deltaTime); _characterController.Move(offset); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Players/PlayerRevealController.cs b/Assets/Scripts/Players/PlayerRevealController.cs new file mode 100644 index 00000000..a914f50e --- /dev/null +++ b/Assets/Scripts/Players/PlayerRevealController.cs @@ -0,0 +1,65 @@ +using FishNet.Object; +using UnityEngine; + +namespace Players +{ + public sealed class PlayerRevealController : NetworkBehaviour + { + private static readonly int RevealCenterId = Shader.PropertyToID("_RevealCenter"); + private static readonly int RevealRadiusId = Shader.PropertyToID("_GlobalRevealRadius"); + private static readonly int RevealEdgeSoftnessId = Shader.PropertyToID("_GlobalRevealEdgeSoftness"); + + [SerializeField] private Transform _center; + [SerializeField, Min(0f)] private float _revealRadius = 6f; + [SerializeField, Min(0.001f)] private float _edgeSoftness = 1f; + [SerializeField] private Vector3 _centerOffset; + + public override void OnStartClient() + { + base.OnStartClient(); + UpdateShaderGlobals(); + } + + public override void OnStopClient() + { + if (IsOwner) + ClearShaderGlobals(); + + base.OnStopClient(); + } + + private void LateUpdate() + { + if (!IsOwner) + return; + + UpdateShaderGlobals(); + } + + private void OnDisable() + { + if (IsOwner) + ClearShaderGlobals(); + } + + private void UpdateShaderGlobals() + { + if (!IsOwner) + return; + + Transform center = _center != null ? _center : transform; + Vector3 worldCenter = center.position + _centerOffset; + + Shader.SetGlobalVector(RevealCenterId, new Vector4(worldCenter.x, worldCenter.y, worldCenter.z, 1f)); + Shader.SetGlobalFloat(RevealRadiusId, _revealRadius); + Shader.SetGlobalFloat(RevealEdgeSoftnessId, _edgeSoftness); + } + + private void ClearShaderGlobals() + { + Shader.SetGlobalVector(RevealCenterId, Vector4.zero); + Shader.SetGlobalFloat(RevealRadiusId, 0f); + Shader.SetGlobalFloat(RevealEdgeSoftnessId, 0f); + } + } +} diff --git a/Assets/Scripts/Players/PlayerRevealController.cs.meta b/Assets/Scripts/Players/PlayerRevealController.cs.meta new file mode 100644 index 00000000..17afff93 --- /dev/null +++ b/Assets/Scripts/Players/PlayerRevealController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9da7d22d0c6d4292ab5d5c0c93ed65af +timeCreated: 1775565000 diff --git a/Assets/Shaders.meta b/Assets/Shaders.meta new file mode 100644 index 00000000..13fb2c3e --- /dev/null +++ b/Assets/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e0775f178f244708fcd2e68163654f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/RadiusRevealUnlit.shader b/Assets/Shaders/RadiusRevealUnlit.shader new file mode 100644 index 00000000..57ff55bd --- /dev/null +++ b/Assets/Shaders/RadiusRevealUnlit.shader @@ -0,0 +1,92 @@ +Shader "The Decline Of Warriors/Radius Reveal Unlit" +{ + Properties + { + _BaseMap("Base Map", 2D) = "white" {} + _BaseColor("Base Color", Color) = (1, 1, 1, 1) + _RevealRadius("Reveal Radius", Float) = 6 + _EdgeSoftness("Edge Softness", Float) = 1 + _Alpha("Alpha", Range(0, 1)) = 1 + } + + SubShader + { + Tags + { + "RenderType"="Transparent" + "Queue"="Transparent" + "RenderPipeline"="UniversalPipeline" + } + + Pass + { + Name "RadiusReveal" + Tags { "LightMode"="UniversalForward" } + + Blend SrcAlpha OneMinusSrcAlpha + Cull Back + ZWrite Off + ZTest Always + + HLSLPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 2.0 + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + + TEXTURE2D(_BaseMap); + SAMPLER(sampler_BaseMap); + + CBUFFER_START(UnityPerMaterial) + float4 _BaseMap_ST; + half4 _BaseColor; + float _RevealRadius; + float _EdgeSoftness; + float _Alpha; + CBUFFER_END + + float4 _RevealCenter; + float _GlobalRevealRadius; + float _GlobalRevealEdgeSoftness; + + struct Attributes + { + float4 positionOS : POSITION; + float2 uv : TEXCOORD0; + }; + + struct Varyings + { + float4 positionHCS : SV_POSITION; + float2 uv : TEXCOORD0; + float3 positionWS : TEXCOORD1; + }; + + Varyings vert(Attributes input) + { + Varyings output; + VertexPositionInputs positionInputs = GetVertexPositionInputs(input.positionOS.xyz); + output.positionHCS = positionInputs.positionCS; + output.positionWS = positionInputs.positionWS; + output.uv = TRANSFORM_TEX(input.uv, _BaseMap); + return output; + } + + half4 frag(Varyings input) : SV_Target + { + float radius = _GlobalRevealRadius > 0.0 ? _GlobalRevealRadius : _RevealRadius; + float softness = _GlobalRevealEdgeSoftness > 0.0 ? _GlobalRevealEdgeSoftness : _EdgeSoftness; + float distanceToCenter = distance(input.positionWS, _RevealCenter.xyz); + float mask = 1.0 - smoothstep(radius - softness, radius, distanceToCenter); + + clip(mask - 0.001); + + half4 albedo = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv) * _BaseColor; + albedo.a *= mask * _Alpha; + return albedo; + } + ENDHLSL + } + } +} diff --git a/Assets/Shaders/RadiusRevealUnlit.shader.meta b/Assets/Shaders/RadiusRevealUnlit.shader.meta new file mode 100644 index 00000000..993969ed --- /dev/null +++ b/Assets/Shaders/RadiusRevealUnlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 09e1c4f7331d42fda781999d558d2841 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: From 8948bd3eee3380e0b73effad935cef900539d5e2 Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Tue, 7 Apr 2026 23:20:26 +0300 Subject: [PATCH 4/7] Adjust player speed --- .../Features/VoxelWorld/Prefabs/TestPlayer.prefab | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab index ca54828c..0c843d96 100644 --- a/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab +++ b/Assets/Features/VoxelWorld/Prefabs/TestPlayer.prefab @@ -150,9 +150,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9cd37f3ec0bf4c66960bab1545ac666f, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::Players.CameraFollow - _componentIndexCache: 0 + _componentIndexCache: 4 _addedNetworkObject: {fileID: 6486868354670318784} - _networkObjectCache: {fileID: 0} + _networkObjectCache: {fileID: 6486868354670318784} _offset: {x: -10, y: 15, z: -10} _rotation: {x: 45, y: 45, z: 0} _target: {fileID: 223370878831388739} @@ -302,6 +302,8 @@ MonoBehaviour: - {fileID: -2928917776349411095} - {fileID: -8563501143336689971} - {fileID: 589237069399113730} + - {fileID: 5771682633975047943} + - {fileID: 3532080573254851317} InitializedParentNetworkBehaviour: {fileID: 0} InitializedNestedNetworkObjects: [] RuntimeParentNetworkBehaviour: {fileID: 0} @@ -312,7 +314,7 @@ MonoBehaviour: _initializeOrder: 0 _preventDespawnOnDisconnect: 0 _defaultDespawnType: 0 - _initializedTimestamp: -8584260344466227969 + _initializedTimestamp: -8584260139898225418 _localLevelOfDetailCalculationType: 0 _useLevelOfDetail: 0 _useRootLevelOfDetail: 1 @@ -441,7 +443,7 @@ MonoBehaviour: _componentIndexCache: 2 _addedNetworkObject: {fileID: 6486868354670318784} _networkObjectCache: {fileID: 6486868354670318784} - _moveSpeed: 200 + _moveSpeed: 30 _characterController: {fileID: 9116505237391369033} --- !u!114 &5771682633975047943 MonoBehaviour: @@ -455,9 +457,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9da7d22d0c6d4292ab5d5c0c93ed65af, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::Players.PlayerRevealController - _componentIndexCache: 255 + _componentIndexCache: 3 _addedNetworkObject: {fileID: 6486868354670318784} - _networkObjectCache: {fileID: 0} + _networkObjectCache: {fileID: 6486868354670318784} _center: {fileID: 223370878831388739} _revealRadius: 6 _edgeSoftness: 1 From 8b1a4a939a3d700494fb716af4c2810e21a23db8 Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Tue, 7 Apr 2026 23:47:27 +0300 Subject: [PATCH 5/7] Add message pipe to project --- Packages/manifest.json | 2 ++ Packages/packages-lock.json | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/Packages/manifest.json b/Packages/manifest.json index b11cab1f..dc547b8d 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,5 +1,7 @@ { "dependencies": { + "com.cysharp.messagepipe": "https://github.com/Cysharp/MessagePipe.git?path=src/MessagePipe.Unity/Assets/Plugins/MessagePipe", + "com.cysharp.messagepipe.vcontainer": "https://github.com/Cysharp/MessagePipe.git?path=src/MessagePipe.Unity/Assets/Plugins/MessagePipe.VContainer", "com.unity.2d.sprite": "1.0.0", "com.unity.ai.navigation": "2.0.12", "com.unity.burst": "1.8.28", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index ba95910d..58209c83 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,19 @@ { "dependencies": { + "com.cysharp.messagepipe": { + "version": "https://github.com/Cysharp/MessagePipe.git?path=src/MessagePipe.Unity/Assets/Plugins/MessagePipe", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "2b49ed40436b89e023df4cc0d39db67de2c78735" + }, + "com.cysharp.messagepipe.vcontainer": { + "version": "https://github.com/Cysharp/MessagePipe.git?path=src/MessagePipe.Unity/Assets/Plugins/MessagePipe.VContainer", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "2b49ed40436b89e023df4cc0d39db67de2c78735" + }, "com.unity.2d.sprite": { "version": "1.0.0", "depth": 0, From e2425d66342bdd77baa6c7c6170a1512192965d5 Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Tue, 7 Apr 2026 23:50:52 +0300 Subject: [PATCH 6/7] [VContainer] Add application lifetime scope and configure message pipe --- Assets/Resources.meta | 8 +++ .../Resources/ApplicationLifetimeScope.prefab | 50 +++++++++++++++++++ .../ApplicationLifetimeScope.prefab.meta | 7 +++ Assets/Resources/VContainerSettings.asset | 18 +++++++ .../Resources/VContainerSettings.asset.meta | 8 +++ Assets/Scripts/ApplicationLifetimeScope.cs | 30 +++++++++++ .../Scripts/ApplicationLifetimeScope.cs.meta | 3 ++ 7 files changed, 124 insertions(+) create mode 100644 Assets/Resources.meta create mode 100644 Assets/Resources/ApplicationLifetimeScope.prefab create mode 100644 Assets/Resources/ApplicationLifetimeScope.prefab.meta create mode 100644 Assets/Resources/VContainerSettings.asset create mode 100644 Assets/Resources/VContainerSettings.asset.meta create mode 100644 Assets/Scripts/ApplicationLifetimeScope.cs create mode 100644 Assets/Scripts/ApplicationLifetimeScope.cs.meta diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 00000000..c5d73515 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: efbe0be7eb809d54498d888bd20f0843 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/ApplicationLifetimeScope.prefab b/Assets/Resources/ApplicationLifetimeScope.prefab new file mode 100644 index 00000000..3f04e943 --- /dev/null +++ b/Assets/Resources/ApplicationLifetimeScope.prefab @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2606815251647872950 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8780821191864940505} + - component: {fileID: 2815566013290875396} + m_Layer: 0 + m_Name: ApplicationLifetimeScope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8780821191864940505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2606815251647872950} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2815566013290875396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2606815251647872950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49a3db5919224d6ea8b572dfdb137912, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::ApplicationLifetimeScope + parentReference: + TypeName: + autoRun: 1 + autoInjectGameObjects: [] diff --git a/Assets/Resources/ApplicationLifetimeScope.prefab.meta b/Assets/Resources/ApplicationLifetimeScope.prefab.meta new file mode 100644 index 00000000..e2ff3a7a --- /dev/null +++ b/Assets/Resources/ApplicationLifetimeScope.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c2518ef4cc570d345b84cd7302f34e61 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/VContainerSettings.asset b/Assets/Resources/VContainerSettings.asset new file mode 100644 index 00000000..ded65d72 --- /dev/null +++ b/Assets/Resources/VContainerSettings.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cf4d8df1d704d5689f3c69bd70d1cb9, type: 3} + m_Name: VContainerSettings + m_EditorClassIdentifier: VContainer::VContainer.Unity.VContainerSettings + RootLifetimeScope: {fileID: 2815566013290875396, guid: c2518ef4cc570d345b84cd7302f34e61, type: 3} + EnableDiagnostics: 0 + DisableScriptModifier: 0 + RemoveClonePostfix: 0 diff --git a/Assets/Resources/VContainerSettings.asset.meta b/Assets/Resources/VContainerSettings.asset.meta new file mode 100644 index 00000000..0bf9b8eb --- /dev/null +++ b/Assets/Resources/VContainerSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9440d9ac41836bb4299df8dabc000fa4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ApplicationLifetimeScope.cs b/Assets/Scripts/ApplicationLifetimeScope.cs new file mode 100644 index 00000000..f39d89ef --- /dev/null +++ b/Assets/Scripts/ApplicationLifetimeScope.cs @@ -0,0 +1,30 @@ +using MessagePipe; +using VContainer; +using VContainer.Unity; + +public sealed class ApplicationLifetimeScope : LifetimeScope +{ + protected override void Configure(IContainerBuilder builder) + { + RegisterMessagePipe(builder); + } + + private void RegisterMessagePipe(IContainerBuilder builder) + { +#if UNITY_EDITOR + // Enable stack trace capture for diagnostics + builder.RegisterMessagePipe(options => + { + options.EnableCaptureStackTrace = true; + }); + + // Set the global MessagePipe provider + builder.RegisterBuildCallback(container => + { + GlobalMessagePipe.SetProvider(container.AsServiceProvider()); + }); +#else + builder.RegisterMessagePipe(); +#endif + } +} \ No newline at end of file diff --git a/Assets/Scripts/ApplicationLifetimeScope.cs.meta b/Assets/Scripts/ApplicationLifetimeScope.cs.meta new file mode 100644 index 00000000..23ba0a20 --- /dev/null +++ b/Assets/Scripts/ApplicationLifetimeScope.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 49a3db5919224d6ea8b572dfdb137912 +timeCreated: 1775594105 \ No newline at end of file From 8ec3be6d9c83d34ccbdb1d6bc9b28ef984de6c90 Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Wed, 8 Apr 2026 01:25:20 +0300 Subject: [PATCH 7/7] Few changes --- .../Resources/ApplicationLifetimeScope.prefab | 127 +++++++++++++++++- Assets/Scripts/ApplicationLifetimeScope.cs | 10 ++ Assets/Scripts/Players/PlayerNameService.cs | 25 ++++ .../Scripts/Players/PlayerNameService.cs.meta | 3 + ProjectSettings/ProjectSettings.asset | 113 ++++++++++++++-- 5 files changed, 269 insertions(+), 9 deletions(-) create mode 100644 Assets/Scripts/Players/PlayerNameService.cs create mode 100644 Assets/Scripts/Players/PlayerNameService.cs.meta diff --git a/Assets/Resources/ApplicationLifetimeScope.prefab b/Assets/Resources/ApplicationLifetimeScope.prefab index 3f04e943..f3729fb9 100644 --- a/Assets/Resources/ApplicationLifetimeScope.prefab +++ b/Assets/Resources/ApplicationLifetimeScope.prefab @@ -10,6 +10,8 @@ GameObject: m_Component: - component: {fileID: 8780821191864940505} - component: {fileID: 2815566013290875396} + - component: {fileID: 4592888819032214727} + - component: {fileID: 4927175908239444755} m_Layer: 0 m_Name: ApplicationLifetimeScope m_TagString: Untagged @@ -29,7 +31,8 @@ Transform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 322300495372050347} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2815566013290875396 @@ -48,3 +51,125 @@ MonoBehaviour: TypeName: autoRun: 1 autoInjectGameObjects: [] + _playerNameService: {fileID: 752173706755555797} +--- !u!114 &4592888819032214727 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2606815251647872950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} + m_Name: + m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.NetworkObject + k__BackingField: 0 + WasActiveDuringEdit: 0 + WasActiveDuringEdit_Set1: 1 + k__BackingField: 0 + k__BackingField: {fileID: 0} + k__BackingField: {fileID: 0} + NetworkBehaviours: + - {fileID: 4927175908239444755} + - {fileID: 752173706755555797} + InitializedParentNetworkBehaviour: {fileID: 0} + InitializedNestedNetworkObjects: [] + RuntimeParentNetworkBehaviour: {fileID: 0} + RuntimeChildNetworkBehaviours: [] + _isNetworked: 1 + _isSpawnable: 0 + _isGlobal: 0 + _initializeOrder: 0 + _preventDespawnOnDisconnect: 0 + _defaultDespawnType: 0 + _initializedTimestamp: -8584260108495451619 + _localLevelOfDetailCalculationType: 0 + _useLevelOfDetail: 0 + _useRootLevelOfDetail: 1 + NetworkObserver: {fileID: 0} + _enablePrediction: 0 + _predictionType: 0 + _localReconcileCorrectionType: 2 + _graphicalObject: {fileID: 0} + _detachGraphicalObject: 0 + _enableStateForwarding: 1 + _networkTransform: {fileID: 0} + _ownerInterpolation: 1 + _ownerSmoothedProperties: 255 + _adaptiveInterpolation: 3 + _spectatorSmoothedProperties: 255 + _spectatorInterpolation: 2 + _enableTeleport: 0 + _teleportThreshold: 1 + k__BackingField: 10 + k__BackingField: 0 + k__BackingField: 0 + SceneId: 0 + SerializedTransformProperties: + Position: {x: 0, y: 0, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 1} + Scale: {x: 1, y: 1, z: 1} + IsValid: 1 +--- !u!114 &4927175908239444755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2606815251647872950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a6a39c46bf52104ba8efe3100bce3f7, type: 3} + m_Name: + m_EditorClassIdentifier: FishNet.Runtime::FishNet.Object.EmptyNetworkBehaviour + _componentIndexCache: 0 + _addedNetworkObject: {fileID: 4592888819032214727} + _networkObjectCache: {fileID: 4592888819032214727} +--- !u!1 &6697972755432869286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 322300495372050347} + - component: {fileID: 752173706755555797} + m_Layer: 0 + m_Name: PlayerNameService + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &322300495372050347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697972755432869286} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8780821191864940505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &752173706755555797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697972755432869286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0f8a0d6abee44a7282f69c32e04a6f4c, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Players.PlayerNameService + _componentIndexCache: 1 + _addedNetworkObject: {fileID: 4592888819032214727} + _networkObjectCache: {fileID: 4592888819032214727} diff --git a/Assets/Scripts/ApplicationLifetimeScope.cs b/Assets/Scripts/ApplicationLifetimeScope.cs index f39d89ef..fbc8e13b 100644 --- a/Assets/Scripts/ApplicationLifetimeScope.cs +++ b/Assets/Scripts/ApplicationLifetimeScope.cs @@ -1,12 +1,17 @@ using MessagePipe; +using Players; +using UnityEngine; using VContainer; using VContainer.Unity; public sealed class ApplicationLifetimeScope : LifetimeScope { + [SerializeField] private PlayerNameService _playerNameService; + protected override void Configure(IContainerBuilder builder) { RegisterMessagePipe(builder); + RegisterServices(builder); } private void RegisterMessagePipe(IContainerBuilder builder) @@ -27,4 +32,9 @@ public sealed class ApplicationLifetimeScope : LifetimeScope builder.RegisterMessagePipe(); #endif } + + private void RegisterServices(IContainerBuilder builder) + { + builder.RegisterInstance(_playerNameService).AsSelf(); + } } \ No newline at end of file diff --git a/Assets/Scripts/Players/PlayerNameService.cs b/Assets/Scripts/Players/PlayerNameService.cs new file mode 100644 index 00000000..4eaaeffd --- /dev/null +++ b/Assets/Scripts/Players/PlayerNameService.cs @@ -0,0 +1,25 @@ +using System; +using FishNet.Connection; +using FishNet.Object; +using FishNet.Object.Synchronizing; +using UnityEngine; + +namespace Players +{ + public sealed class PlayerNameService : NetworkBehaviour + { + public static event Action OnPlayerNameChange; + + private readonly SyncDictionary _playerNames = new(); + + private void Awake() + { + _playerNames.OnChange += OnPlayerNamesChange; + } + + private void OnPlayerNamesChange(SyncDictionaryOperation op, NetworkConnection key, string value, bool asServer) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Players/PlayerNameService.cs.meta b/Assets/Scripts/Players/PlayerNameService.cs.meta new file mode 100644 index 00000000..901ade02 --- /dev/null +++ b/Assets/Scripts/Players/PlayerNameService.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0f8a0d6abee44a7282f69c32e04a6f4c +timeCreated: 1775595133 \ No newline at end of file diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index c05a556f..16edc703 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -42,8 +42,8 @@ PlayerSettings: m_SplashScreenLogos: [] m_VirtualRealitySplashScreen: {fileID: 0} m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1920 - defaultScreenHeight: 1080 + defaultScreenWidth: 800 + defaultScreenHeight: 600 defaultScreenWidthWeb: 960 defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 @@ -96,7 +96,7 @@ PlayerSettings: bakeCollisionMeshes: 0 forceSingleInstance: 0 useFlipModelSwapchain: 1 - resizableWindow: 0 + resizableWindow: 1 useMacAppStoreValidation: 0 macAppStoreCategory: public.app-category.games gpuSkinning: 0 @@ -108,7 +108,7 @@ PlayerSettings: xboxEnableFitness: 0 visibleInBackground: 1 allowFullscreenSwitch: 1 - fullscreenMode: 1 + fullscreenMode: 3 xboxSpeechDB: 0 xboxEnableHeadOrientation: 0 xboxEnableGuest: 0 @@ -144,7 +144,9 @@ PlayerSettings: visionOSBundleVersion: 1.0 tvOSBundleVersion: 1.0 bundleVersion: 1.0 - preloadedAssets: [] + preloadedAssets: + - {fileID: 4800000, guid: ec80aebd8cb61f44cbfa6b7d5f087211, type: 3} + - {fileID: 11400000, guid: 9440d9ac41836bb4299df8dabc000fa4, type: 2} metroInputSource: 0 wsaTransparentSwapchain: 0 m_HolographicPauseOnTrackingLoss: 1 @@ -295,8 +297,103 @@ PlayerSettings: AndroidReportGooglePlayAppDependencies: 1 androidSymbolsSizeThreshold: 800 m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] - m_BuildTargetBatching: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 m_BuildTargetShaderSettings: [] m_BuildTargetGraphicsJobs: [] m_BuildTargetGraphicsJobMode: [] @@ -681,7 +778,7 @@ PlayerSettings: qnxGraphicConfPath: apiCompatibilityLevel: 6 captureStartupLogs: {} - activeInputHandler: 2 + activeInputHandler: 0 windowsGamepadBackendHint: 0 cloudProjectId: 16816b7b-2478-42d6-b9aa-1f22b82e4182 framebufferDepthMemorylessMode: 0