- Home /
UNET OnTriggerEnter called due to placement of Network-GameObjects on Clients
In the multiplayer scene I have a platform, consisting of these components: NetworkTransform, NetworkIdentity (bool Local) and a PlatformController. It can be moved when a player is entering a triggerCollider-GameObject.
.
The triggerCollider-GameObject has an Activator script with an UnityEvent, that is fired upon OnTriggerEnter(). I drag the corresponding Platform on its UnityEvent-Slot and selecting its MoveFunction which moves the platform and increments the waypointIndex by 1.
.
This works good when both players connect simultanuesly. However,
.
if the host is on the trigger that had activate the platform to move at waypoint 1 and client joins afterwards, the platform of the Client application jitters immediatly. This is caused due to the Host-GameObject instantiation which is positioned at the triggerCollider thus calling OnTriggerEnter() on its Activator script again which moves the platform.
.
How do I block OnTriggerEnter when joining? Turning off the trigger-collider on the client side is not a good solution because the client could never activate the platform.
.
I send the waypointindex of the platform as an SyncVar calling Cmd -> Rpc to syncronize the targetwaypoint of the platform for all players but that doesnt help removing the jittering.
public class PlatformNetwork : NetworkBehaviour {
[SyncVar]
public int waypointIndex;
private Platform p;
private void Awake(){
p = GetComponent<Platform> ();
}
//TODO Causes jitter of Platform at Client if Host on PlatformTrigger, because Host-GO is created in same position of PlatFormTrigger which calls OnTriggerEnter() -> leading to misbehaviour at Client
private void Update () {
if (!isLocalPlayer)
return;
Cmd_Data(waypointIndex = p.waypointIndex);
}
[Command] //Called from client, run on Server
public void Cmd_Data(int myIndex) {
Rpc_Data(myIndex);
}
[ClientRpc]//ClientRpc calls - which are called on the server and run on clients.
private void Rpc_Data(int myIndex) {
p.waypointIndex = myIndex;
}
}
Your answer
Follow this Question
Related Questions
SyncListString not changing in a Command 0 Answers
SyncListString not changing properly 0 Answers
UNet SyncVar not working 3 Answers
SyncListStruct Not Syncing to Rest of Server! 0 Answers
Gameobject wont move through a function to a ClientRPC 0 Answers