mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 11:00:32 +00:00
feature: DistanceInterestManagement custom range component
This commit is contained in:
parent
99316d6ab9
commit
09cbc7e782
@ -6,21 +6,30 @@ namespace Mirror
|
|||||||
{
|
{
|
||||||
public class DistanceInterestManagement : InterestManagement
|
public class DistanceInterestManagement : InterestManagement
|
||||||
{
|
{
|
||||||
[Tooltip("The maximum range that objects will be visible at.")]
|
[Tooltip("The maximum range that objects will be visible at. Add DistanceInterestManagementCustomRange onto NetworkIdentities for custom ranges.")]
|
||||||
public int visRange = 10;
|
public int visRange = 10;
|
||||||
|
|
||||||
[Tooltip("Rebuild all every 'rebuildInterval' seconds.")]
|
[Tooltip("Rebuild all every 'rebuildInterval' seconds.")]
|
||||||
public float rebuildInterval = 1;
|
public float rebuildInterval = 1;
|
||||||
double lastRebuildTime;
|
double lastRebuildTime;
|
||||||
|
|
||||||
|
// helper function to get vis range for a given object, or default.
|
||||||
|
int GetVisRange(NetworkIdentity identity)
|
||||||
|
{
|
||||||
|
DistanceInterestManagementCustomRange custom = identity.GetComponent<DistanceInterestManagementCustomRange>();
|
||||||
|
return custom != null ? custom.visRange : visRange;
|
||||||
|
}
|
||||||
|
|
||||||
public override bool OnCheckObserver(NetworkIdentity identity, NetworkConnection newObserver)
|
public override bool OnCheckObserver(NetworkIdentity identity, NetworkConnection newObserver)
|
||||||
{
|
{
|
||||||
return Vector3.Distance(identity.transform.position, newObserver.identity.transform.position) < visRange;
|
int range = GetVisRange(identity);
|
||||||
|
return Vector3.Distance(identity.transform.position, newObserver.identity.transform.position) < range;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnRebuildObservers(NetworkIdentity identity, HashSet<NetworkConnection> newObservers, bool initialize)
|
public override void OnRebuildObservers(NetworkIdentity identity, HashSet<NetworkConnection> newObservers, bool initialize)
|
||||||
{
|
{
|
||||||
// 'transform.' calls GetComponent, only do it once
|
// cache range and .transform because both call GetComponent.
|
||||||
|
int range = GetVisRange(identity);
|
||||||
Vector3 position = identity.transform.position;
|
Vector3 position = identity.transform.position;
|
||||||
|
|
||||||
// brute force distance check
|
// brute force distance check
|
||||||
@ -36,7 +45,7 @@ public override void OnRebuildObservers(NetworkIdentity identity, HashSet<Networ
|
|||||||
if (conn != null && conn.isAuthenticated && conn.identity != null)
|
if (conn != null && conn.isAuthenticated && conn.identity != null)
|
||||||
{
|
{
|
||||||
// check distance
|
// check distance
|
||||||
if (Vector3.Distance(conn.identity.transform.position, position) < visRange)
|
if (Vector3.Distance(conn.identity.transform.position, position) < range)
|
||||||
{
|
{
|
||||||
newObservers.Add(conn);
|
newObservers.Add(conn);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
// add this to NetworkIdentities for custom range if needed.
|
||||||
|
// only works with DistanceInterestManagement.
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Mirror
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(NetworkIdentity))]
|
||||||
|
[DisallowMultipleComponent]
|
||||||
|
public class DistanceInterestManagementCustomRange : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Tooltip("The maximum range that objects will be visible at.")]
|
||||||
|
public int visRange = 20;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b2e242ee38a14076a39934172a19079b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {fileID: 2800000, guid: 7453abfe9e8b2c04a8a47eb536fe21eb, type: 3}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user