Some extra scripts that are part of the Network Playground that may be useful
A simple spawn script that Instantiates the Networked Player on a Keypress
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnCharacter: MonoBehaviour
{
public KeyCode KeyPress;
public GameObject NetworkedCharacter;
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyPress))
{
Instantiate(NetworkedCharacter);
}
}
}
Simple Input to get your Game Objects Moving
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SimpleMovement : MonoBehaviour
{
public float speed = 1f;
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
transform.position += transform.forward * (v * speed * Time.deltaTime);
transform.position += transform.right * (h * speed * Time.deltaTime);
}
}
An Event System you put on the Prefab with coherenceSync
that can handle Network Commands and transfer Authority
using Coherence;
using UnityEngine;
using UnityEngine.Events;
using Coherence.Toolkit;
public class CoherenceCommandHandler : MonoBehaviour
{
private CoherenceSync sync;
public UnityEvent onCommandReceived;
private GameObject fxInstance;
private void Awake()
{
sync = GetComponent<CoherenceSync>();
}
public void Adopt()
{
if (!sync || sync.isSimulated)
{
return;
}
sync.RequestAuthority();
}
public void Orphan()
{
if (!sync || !sync.isSimulated)
{
return;
}
sync.AbandonAuthority();
}
public void ToggleAuthority()
{
if (!sync)
{
return;
}
if (sync.isSimulated)
{
Orphan();
}
else
{
Adopt();
}
}
public void Command(CoherenceSync sender)
{
sync.SendCommand<SampleCommandHandler>("ReceiveCommand", MessageTarget.All);
}
public void ReceiveCommand()
{
onCommandReceived.Invoke();
}
public void InstantiateFX(GameObject fx)
{
if (fxInstance)
{
Destroy(fxInstance);
}
var t = fx.transform;
fxInstance = Instantiate(fx, transform.position + t.position, transform.rotation);
}
}
An Event System you put on an empty game object in your
scene that handles Global Connection/Disconnection
using UnityEngine;
using UnityEngine.Events;
using Coherence;
public class CoherenceConnectionEvents : MonoBehaviour
{
public UnityEvent onConnect;
public UnityEvent onDisconnect;
private void OnEnable()
{
Coherence.Network.OnConnected += OnConnect;
Coherence.Network.OnDisconnected += OnDisconnect;
}
private void OnDisable()
{
Coherence.Network.OnConnected -= OnConnect;
Coherence.Network.OnDisconnected -= OnDisconnect;
}
private void OnConnect()
{
onConnect.Invoke();
}
private void OnDisconnect()
{
onDisconnect.Invoke();
}
}