You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RizzeProjectile/Assets/Photon/Fusion/Runtime/FusionBasicBillboard.cs

75 lines
1.7 KiB
C#

namespace Fusion {
using UnityEngine;
/// <summary>
/// Component which automatically faces this GameObject toward the supplied Camera. If Camera == null, will face towards Camera.main.
/// </summary>
[Fusion.ScriptHelp(BackColor = ScriptHeaderBackColor.Olive)]
[ExecuteAlways]
public class FusionBasicBillboard : Fusion.Behaviour {
/// <summary>
/// Force a particular camera to billboard this object toward. Leave null to use Camera.main.
/// </summary>
[InlineHelp]
public Camera Camera;
// Camera find is expensive, so do it once per update for ALL implementations
static float _lastCameraFindTime;
static Camera _currentCam;
private void OnEnable() {
UpdateLookAt();
}
private void OnDisable() {
transform.localRotation = default;
}
Camera MainCamera {
set {
_currentCam = value;
}
get {
var time = Time.time;
// Only look for the camera once per Update.
if (time == _lastCameraFindTime)
return _currentCam;
_lastCameraFindTime = time;
var cam = Camera.main;
_currentCam = cam;
return cam;
}
}
#if UNITY_EDITOR
private void OnDrawGizmos() {
LateUpdate();
}
#endif
private void LateUpdate() {
UpdateLookAt();
}
public void UpdateLookAt() {
var cam = Camera ? Camera : MainCamera;
if (cam) {
if (enabled) {
transform.rotation = cam.transform.rotation;
}
}
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void ResetStatics() {
_currentCam = default;
_lastCameraFindTime = default;
}
}
}