Unity-WebSocket/Assets/FishNet/Demos/HashGrid/Scripts/MoveRandomly.cs
2025-06-28 11:28:54 +03:30

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 (!base.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 (!base.Owner.IsValid)
transform.position = (_start + RandomInsideRange());
}
public override void OnStartClient()
{
if (base.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 (base.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;
}
}
}