removing server components, added spawners to distribute spawned NetworkObjects
This commit is contained in:
Родитель
d820661640
Коммит
8bc7dd10b3
|
@ -0,0 +1,166 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &5284988466819114021
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8373467377857417617}
|
||||
- component: {fileID: 4231830031299418752}
|
||||
- component: {fileID: 6182280289221153755}
|
||||
- component: {fileID: 1543022949020387717}
|
||||
m_Layer: 0
|
||||
m_Name: Cube
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8373467377857417617
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5284988466819114021}
|
||||
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: 3682548716856462275}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &4231830031299418752
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5284988466819114021}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &6182280289221153755
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5284988466819114021}
|
||||
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_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 6750cd9a1da90fa488af7e19aaa240d1, 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_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!65 &1543022949020387717
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5284988466819114021}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &7644212253084754912
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3682548716856462275}
|
||||
- component: {fileID: 5695542437304748681}
|
||||
m_Layer: 0
|
||||
m_Name: DistributableNetworkObject
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &3682548716856462275
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7644212253084754912}
|
||||
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:
|
||||
- {fileID: 8373467377857417617}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5695542437304748681
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7644212253084754912}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 3754074548
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 1
|
||||
AlwaysReplicateAsRoot: 0
|
||||
SynchronizeTransform: 1
|
||||
ActiveSceneSynchronization: 0
|
||||
SceneMigrationSynchronization: 1
|
||||
SpawnWithObservers: 1
|
||||
DontDestroyWithOwner: 0
|
||||
AutoObjectParentSync: 1
|
|
@ -1,6 +1,6 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &7644212253084754912
|
||||
--- !u!1 &6593855247915494816
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
|
@ -8,22 +8,23 @@ GameObject:
|
|||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3682548716856462275}
|
||||
- component: {fileID: 5695542437304748681}
|
||||
- component: {fileID: 1529386441307592499}
|
||||
- component: {fileID: 4062270686501891993}
|
||||
- component: {fileID: 5555888092083092198}
|
||||
m_Layer: 0
|
||||
m_Name: In-SceneObject
|
||||
m_Name: NetworkObjectSpawner
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &3682548716856462275
|
||||
--- !u!4 &1529386441307592499
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7644212253084754912}
|
||||
m_GameObject: {fileID: 6593855247915494816}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
|
@ -32,22 +33,22 @@ Transform:
|
|||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5695542437304748681
|
||||
--- !u!114 &4062270686501891993
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7644212253084754912}
|
||||
m_GameObject: {fileID: 6593855247915494816}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 623003820
|
||||
GlobalObjectIdHash: 669164662
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 1
|
||||
Ownership: 0
|
||||
AlwaysReplicateAsRoot: 0
|
||||
SynchronizeTransform: 1
|
||||
ActiveSceneSynchronization: 0
|
||||
|
@ -55,3 +56,16 @@ MonoBehaviour:
|
|||
SpawnWithObservers: 1
|
||||
DontDestroyWithOwner: 0
|
||||
AutoObjectParentSync: 1
|
||||
--- !u!114 &5555888092083092198
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6593855247915494816}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c6b3b77ed60ae4bf1a5dafef483c475c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_NetworkObject: {fileID: 0}
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: affd742a72b854da2ade9c015cceada7
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -169,9 +169,6 @@ PrefabInstance:
|
|||
- targetCorrespondingSourceObject: {fileID: 4416926081852918481, guid: 64dce48905ffd9b4293e595fa6941544, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: -3062321976565574425}
|
||||
- targetCorrespondingSourceObject: {fileID: 4416926081852918481, guid: 64dce48905ffd9b4293e595fa6941544, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: -2755784201116707001}
|
||||
- targetCorrespondingSourceObject: {fileID: 4416926081852918481, guid: 64dce48905ffd9b4293e595fa6941544, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 5667156634780145037}
|
||||
|
@ -230,7 +227,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 4217728462
|
||||
GlobalObjectIdHash: 3868643671
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 0
|
||||
|
@ -241,23 +238,6 @@ MonoBehaviour:
|
|||
SpawnWithObservers: 1
|
||||
DontDestroyWithOwner: 0
|
||||
AutoObjectParentSync: 1
|
||||
--- !u!114 &-2755784201116707001
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1116025501350672692}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c521a646e08a84279a7bcf9c775080a4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
isObjectPickedUp:
|
||||
m_InternalValue: 0
|
||||
m_LocalHeldPosition: {x: 0, y: 2.85, z: 0}
|
||||
spawnPosition:
|
||||
m_InternalValue: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5667156634780145037
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -270,7 +250,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 147847c03d82a4e809c6ab71e2b3ce97, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_ServerPlayerMove: {fileID: -2755784201116707001}
|
||||
m_ServerPlayerMove: {fileID: 0}
|
||||
m_CharacterController: {fileID: 1116025501350672702}
|
||||
m_ThirdPersonController: {fileID: 1116025501350672703}
|
||||
m_CapsuleCollider: {fileID: 1021551417513153853}
|
||||
|
@ -302,7 +282,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 53b28d1b2108d4d199dae3ac8f537c27, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
AuthorityMode: 0
|
||||
AuthorityMode: 1
|
||||
UseUnreliableDeltas: 0
|
||||
SyncPositionX: 1
|
||||
SyncPositionY: 1
|
||||
|
@ -322,7 +302,7 @@ MonoBehaviour:
|
|||
InLocalSpace: 0
|
||||
Interpolate: 1
|
||||
SlerpPosition: 0
|
||||
m_ServerPlayerMove: {fileID: -2755784201116707001}
|
||||
m_ServerPlayerMove: {fileID: 0}
|
||||
--- !u!114 &1116025501350672696 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 4416926081852918493, guid: 64dce48905ffd9b4293e595fa6941544, type: 3}
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -9,13 +9,9 @@ using UnityEngine;
|
|||
/// Handling movement inside this component's OnNetworkSpawn method only ensures the mitigation of race condition issues
|
||||
/// arising due to the execution order of other NetworkBehaviours' OnNetworkSpawn methods.
|
||||
/// </remarks>
|
||||
[RequireComponent(typeof(ServerPlayerMove))]
|
||||
[DisallowMultipleComponent]
|
||||
public class ClientDrivenNetworkTransform : NetworkTransform
|
||||
{
|
||||
[SerializeField]
|
||||
ServerPlayerMove m_ServerPlayerMove;
|
||||
|
||||
protected override bool OnIsServerAuthoritative()
|
||||
{
|
||||
return false;
|
||||
|
@ -27,23 +23,18 @@ public class ClientDrivenNetworkTransform : NetworkTransform
|
|||
|
||||
if (IsClient && IsOwner)
|
||||
{
|
||||
SetPosition(Vector3.zero, m_ServerPlayerMove.spawnPosition.Value);
|
||||
m_ServerPlayerMove.spawnPosition.OnValueChanged += SetPosition;
|
||||
// TODO: add spawn points
|
||||
SetPosition(Vector3.zero);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
base.OnNetworkDespawn();
|
||||
|
||||
if (m_ServerPlayerMove != null)
|
||||
{
|
||||
m_ServerPlayerMove.spawnPosition.OnValueChanged -= SetPosition;
|
||||
}
|
||||
}
|
||||
|
||||
void SetPosition(Vector3 previousValue, Vector3 newValue)
|
||||
void SetPosition(Vector3 newValue)
|
||||
{
|
||||
transform.position = newValue;
|
||||
Teleport(newValue, Quaternion.identity, Vector3.one);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,13 +8,8 @@ using UnityEngine.InputSystem;
|
|||
/// <summary>
|
||||
/// Assumes client authority
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(ServerPlayerMove))]
|
||||
[DefaultExecutionOrder(1)] // after server component
|
||||
public class ClientPlayerMove : NetworkBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
ServerPlayerMove m_ServerPlayerMove;
|
||||
|
||||
[SerializeField]
|
||||
CharacterController m_CharacterController;
|
||||
|
||||
|
@ -72,36 +67,4 @@ public class ClientPlayerMove : NetworkBehaviour
|
|||
var cinemachineVirtualCamera = FindObjectOfType<CinemachineVirtualCamera>();
|
||||
cinemachineVirtualCamera.Follow = m_CameraFollow;
|
||||
}
|
||||
|
||||
void OnPickUp()
|
||||
{
|
||||
/*if (m_ServerPlayerMove.isObjectPickedUp.Value)
|
||||
{
|
||||
m_ServerPlayerMove.ServerDropObjectRpc();
|
||||
}
|
||||
else
|
||||
{
|
||||
// detect nearby ingredients
|
||||
var hits = Physics.BoxCastNonAlloc(transform.position,
|
||||
Vector3.one,
|
||||
transform.forward,
|
||||
m_HitColliders,
|
||||
Quaternion.identity,
|
||||
1f,
|
||||
LayerMask.GetMask(new[] { "PickupItems" }),
|
||||
QueryTriggerInteraction.Ignore);
|
||||
if (hits > 0)
|
||||
{
|
||||
var ingredient = m_HitColliders[0].collider.gameObject.GetComponent<ServerIngredient>();
|
||||
if (ingredient != null)
|
||||
{
|
||||
var netObj = ingredient.NetworkObjectId;
|
||||
// Netcode is a server driven SDK. Shared objects like ingredients need to be interacted with using ServerRPCs. Therefore, there
|
||||
// will be a delay between the button press and the reparenting.
|
||||
// This delay could be hidden with some animations/sounds/VFX that would be triggered here.
|
||||
m_ServerPlayerMove.ServerPickupObjectRpc(netObj);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
|
||||
public class NetworkObjectSpawner : NetworkBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
NetworkObject m_NetworkObjectToSpawn;
|
||||
|
||||
NetworkVariable<bool> m_Initialized = new NetworkVariable<bool>(false, NetworkVariableReadPermission.Everyone, NetworkVariableWritePermission.Owner);
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
// TODO: fetch item from pool
|
||||
|
||||
if (IsSessionOwner && !m_Initialized.Value)
|
||||
{
|
||||
SpawnNetworkObject();
|
||||
m_Initialized.Value = true;
|
||||
}
|
||||
base.OnNetworkSpawn();
|
||||
}
|
||||
|
||||
void SpawnNetworkObject()
|
||||
{
|
||||
m_NetworkObjectToSpawn.InstantiateAndSpawn(NetworkManager.Singleton, position: transform.position);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c6b3b77ed60ae4bf1a5dafef483c475c
|
|
@ -1,99 +0,0 @@
|
|||
using System;
|
||||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Server side script to do some movements that can only be done server side with Netcode. In charge of spawning (which happens server side in Netcode)
|
||||
/// and picking up objects
|
||||
/// </summary>
|
||||
[DefaultExecutionOrder(0)] // before client component
|
||||
public class ServerPlayerMove : NetworkBehaviour
|
||||
{
|
||||
public NetworkVariable<bool> isObjectPickedUp = new NetworkVariable<bool>();
|
||||
|
||||
NetworkObject m_PickedUpObject;
|
||||
|
||||
[SerializeField]
|
||||
Vector3 m_LocalHeldPosition;
|
||||
|
||||
public NetworkVariable<Vector3> spawnPosition;
|
||||
|
||||
// DOC START HERE
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
if (!IsServer)
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
OnServerSpawnPlayer();
|
||||
|
||||
base.OnNetworkSpawn();
|
||||
}
|
||||
|
||||
void OnServerSpawnPlayer()
|
||||
{
|
||||
// Note: specific to Netcode for GameObjects v1.8.0 & v1.8.1
|
||||
// Previous versions of this sample utilizing Netcode for GameObjects <v1.8.0 had set the player's position at
|
||||
// this point. However, a regression with these two particular versions forced the new pattern for modifying a
|
||||
// player's initial position, which is:
|
||||
// we store the server-determined spawn position inside of a NetworkVariable, and have that be consumed by the
|
||||
// owning client, inside ClientDrivenNetworkTransform. This approach navigates potential OnNetworkSpawn race
|
||||
// conditions that popped up in these two Netcode versions, and is now a recommended approach for setting spawn
|
||||
// positions on OnNetworkSpawn for owner-authoritative NetworkTransforms.
|
||||
|
||||
// this is done server side, so we have a single source of truth for our spawn point list
|
||||
Transform spawnPoint = /*ServerPlayerSpawnPoints.Instance.ConsumeNextSpawnPoint()*/null;
|
||||
spawnPosition.Value = spawnPoint != null ? spawnPoint.transform.position : Vector3.zero;
|
||||
|
||||
// A note specific to owner authority (see the note above why this would not work for Netcode for GameObjects
|
||||
// v1.8.0 & 1.8.1):
|
||||
// Setting the position works as and can be set in OnNetworkSpawn server-side unless there is a
|
||||
// CharacterController that is enabled by default on the authoritative side. With CharacterController, it
|
||||
// needs to be disabled by default (i.e. in Awake), the server applies the position (OnNetworkSpawn), and then
|
||||
// the owner of the NetworkObject should enable CharacterController during OnNetworkSpawn. Otherwise,
|
||||
// CharacterController will initialize itself with the initial position (before synchronization) and updates the
|
||||
// transform after synchronization with the initial position, thus overwriting the synchronized position.
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server)]
|
||||
public void ServerPickupObjectRpc(ulong objToPickupID)
|
||||
{
|
||||
NetworkManager.SpawnManager.SpawnedObjects.TryGetValue(objToPickupID, out var objectToPickup);
|
||||
if (objectToPickup == null || objectToPickup.transform.parent != null)
|
||||
{
|
||||
// object already picked up, server authority says no
|
||||
return;
|
||||
}
|
||||
|
||||
if (objectToPickup.TrySetParent(transform))
|
||||
{
|
||||
m_PickedUpObject = objectToPickup;
|
||||
objectToPickup.transform.localPosition = m_LocalHeldPosition;
|
||||
/*objectToPickup.GetComponent<ServerIngredient>().ingredientDespawned += IngredientDespawned;*/
|
||||
isObjectPickedUp.Value = true;
|
||||
}
|
||||
}
|
||||
|
||||
void IngredientDespawned()
|
||||
{
|
||||
m_PickedUpObject = null;
|
||||
isObjectPickedUp.Value = false;
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server)]
|
||||
public void ServerDropObjectRpc()
|
||||
{
|
||||
if (m_PickedUpObject != null)
|
||||
{
|
||||
/*m_PickedUpObject.GetComponent<ServerIngredient>().ingredientDespawned -= IngredientDespawned;*/
|
||||
// can be null if enter drop zone while carrying
|
||||
m_PickedUpObject.TrySetParent(parent: (Transform)null);
|
||||
m_PickedUpObject = null;
|
||||
}
|
||||
|
||||
isObjectPickedUp.Value = false;
|
||||
}
|
||||
// DOC END HERE
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c521a646e08a84279a7bcf9c775080a4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -96,8 +96,11 @@ Material:
|
|||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 1
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
|
@ -106,6 +109,7 @@ Material:
|
|||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
|
@ -120,13 +124,14 @@ Material:
|
|||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _UVSec: 0
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0.48507768, g: 0.67556465, b: 0.7830189, a: 1}
|
||||
- _Color: {r: 0.48507768, g: 0.67556465, b: 0.7830189, a: 1}
|
||||
- _Color: {r: 0.48507768, g: 0.6755646, b: 0.7830188, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
|
|
@ -98,8 +98,11 @@ Material:
|
|||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 1
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
|
@ -108,6 +111,7 @@ Material:
|
|||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.477
|
||||
|
@ -122,13 +126,14 @@ Material:
|
|||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _UVSec: 0
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0.5110952, g: 0.62652487, b: 0.6886792, a: 1}
|
||||
- _Color: {r: 0.5110952, g: 0.62652487, b: 0.6886792, a: 1}
|
||||
- _Color: {r: 0.51109517, g: 0.62652487, b: 0.6886792, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
|
Загрузка…
Ссылка в новой задаче