Boat Attack使用了Universal RP的许多新图形功能,可以用于探索 Universal RP 的使用方式和技巧。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

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;
}
}
}