86 lines
2.3 KiB
C#
86 lines
2.3 KiB
C#
using FishNet.Object;
|
|
using UnityEngine;
|
|
|
|
namespace FishNet.Demo.HashGrid
|
|
{
|
|
public class MoveRandomly : NetworkBehaviour
|
|
{
|
|
// Colors green for client.
|
|
[SerializeField]
|
|
private Renderer _renderer;
|
|
|
|
// How quickly to move over 1s.
|
|
private float _moveRate = 0.5f;
|
|
// Maximum range for new position.
|
|
public const float Range = 25f;
|
|
// Position to move towards.
|
|
private Vector3 _goal;
|
|
// Position at spawn.
|
|
private Vector3 _start;
|
|
|
|
private void Update()
|
|
{
|
|
if (!IsController)
|
|
return;
|
|
|
|
transform.position = Vector3.MoveTowards(transform.position, _goal, _moveRate * Time.deltaTime);
|
|
if (transform.position == _goal)
|
|
RandomizeGoal();
|
|
}
|
|
|
|
public override void OnStartNetwork()
|
|
{
|
|
_start = transform.position;
|
|
RandomizeGoal();
|
|
}
|
|
|
|
public override void OnStartServer()
|
|
{
|
|
if (!Owner.IsValid)
|
|
transform.position = _start + RandomInsideRange();
|
|
}
|
|
|
|
public override void OnStartClient()
|
|
{
|
|
if (Owner.IsLocalClient)
|
|
{
|
|
_renderer.material.color = Color.green;
|
|
_moveRate *= 3f;
|
|
transform.position -= new Vector3(0f, 0f, 1f);
|
|
Camera c = Camera.main;
|
|
c.transform.SetParent(transform);
|
|
c.transform.localScale = Vector3.one;
|
|
c.transform.localPosition = new(0f, 0f, -5f);
|
|
}
|
|
else
|
|
{
|
|
_renderer.material.color = Color.gray;
|
|
}
|
|
}
|
|
|
|
public override void OnStopClient()
|
|
{
|
|
if (IsOwner)
|
|
{
|
|
Camera c = Camera.main;
|
|
if (c != null)
|
|
{
|
|
c.transform.SetParent(null);
|
|
c.transform.localScale = Vector3.one;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void RandomizeGoal()
|
|
{
|
|
_goal = _start + RandomInsideRange();
|
|
}
|
|
|
|
private Vector3 RandomInsideRange()
|
|
{
|
|
Vector3 goal = Random.insideUnitSphere * Range;
|
|
goal.z = transform.position.z;
|
|
return goal;
|
|
}
|
|
}
|
|
} |