您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
60 行
1.7 KiB
60 行
1.7 KiB
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace BoatAttack.UI
|
|
{
|
|
public class PlayerMarker : MonoBehaviour
|
|
{
|
|
public TextMeshProUGUI placeText;
|
|
public TextMeshProUGUI nameText;
|
|
|
|
private RectTransform _rect;
|
|
private BoatData _boatData;
|
|
private Boat _boat;
|
|
private int _curPlace = -1;
|
|
|
|
private void OnEnable()
|
|
{
|
|
RenderPipelineManager.beginFrameRendering += UpdatePosition;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
RenderPipelineManager.beginFrameRendering -= UpdatePosition;
|
|
}
|
|
|
|
public void Setup(BoatData boat)
|
|
{
|
|
_boatData = boat;
|
|
_boat = boat.Boat;
|
|
nameText.text = boat.boatName;
|
|
_rect = transform as RectTransform;
|
|
}
|
|
|
|
private void LateUpdate()
|
|
{
|
|
UpdatePlace();
|
|
}
|
|
|
|
private void UpdatePlace()
|
|
{
|
|
if (!_boat || _curPlace == _boat.Place) return;
|
|
_curPlace = _boat.Place;
|
|
placeText.text = _curPlace.ToString();
|
|
}
|
|
|
|
private void UpdatePosition(ScriptableRenderContext context, Camera[] cameras)
|
|
{
|
|
if (_boatData == null || Camera.main == null) return; // if no boat or camera, the player marker cannot work
|
|
|
|
var screenPos = Camera.main.WorldToViewportPoint(_boatData.BoatObject.transform.position + Vector3.up * 3f);
|
|
if (screenPos.z < 0)
|
|
{
|
|
screenPos = -Vector3.one;
|
|
}
|
|
_rect.anchorMin = _rect.anchorMax = screenPos;
|
|
_rect.anchoredPosition = Vector2.zero;
|
|
}
|
|
}
|
|
}
|