From 0e3b3a1ccf066a6a76608054ce29696bdfb72db8 Mon Sep 17 00:00:00 2001 From: Nikita Dugin Date: Tue, 7 Apr 2026 17:33:44 +0300 Subject: [PATCH] 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