该项目的目的是同时测试和演示来自 Unity DOTS 技术堆栈的多个新包。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

99 行
3.1 KiB

using Unity.Sample.Core;
using UnityEngine;
using UnityEngine.UI;
public class HUDCrosshair : MonoBehaviour
{
#pragma warning disable 649
[ConfigVar(Name = "debug.hudmarker", DefaultValue = "0", Description = "Debug show hud markers")]
static ConfigVar debugHudMarker;
#pragma warning restore 649
public float hitIndicatorShowDuration = 0.5f;
public float deathIndicatorShowDuration = 1.0f;
public float damageDirectionShowDuration = 1.0f;
public RawImage hitMaker;
public RawImage deathMarker;
public RawImage damageIndicator;
void Awake()
{
hitMaker.gameObject.SetActive(false);
deathMarker.gameObject.SetActive(false);
damageIndicator.gameObject.SetActive(false);
}
public void FrameUpdate(PlayerCameraControl.State cameraSettings)
{
if (debugHudMarker.IntValue > 0)
{
if (debugHudMarker.IntValue == 1)
{
hitMaker.gameObject.SetActive(true);
m_hideHitIndicatorTime = Time.time + 5.0f;
}
else if (debugHudMarker.IntValue == 2)
{
deathMarker.gameObject.SetActive(true);
m_hideDeathIndicatorTime = Time.time + 5.0f;
}
debugHudMarker.Value = "0";
}
if (hitMaker.gameObject.activeSelf)
{
if (Time.time > m_hideHitIndicatorTime)
hitMaker.gameObject.SetActive(false);
}
if (deathMarker.gameObject.activeSelf)
{
if (Time.time > m_hideDeathIndicatorTime)
deathMarker.gameObject.SetActive(false);
}
if (damageIndicator.gameObject.activeSelf)
{
UpdateHitDirectionIndicator(cameraSettings.rotation);
if (Time.time > m_hideHitDirectionTime)
damageIndicator.gameObject.SetActive(false);
}
}
public void ShowHitMarker(bool lethal)
{
hitMaker.gameObject.SetActive(true);
m_hideHitIndicatorTime = Time.time + hitIndicatorShowDuration;
if (lethal)
{
m_hideDeathIndicatorTime = Time.time + deathIndicatorShowDuration;
deathMarker.gameObject.SetActive(true);
}
}
public void UpdateHitDirectionIndicator(Quaternion cameraRotation)
{
var cameraForward = cameraRotation * Vector3.forward;
var camDirPlane = Vector3.ProjectOnPlane(cameraForward, Vector3.up);
var camAngle = Vector3.Angle(Vector3.forward, camDirPlane);
var cross2 = Vector3.Cross(Vector3.forward, camDirPlane);
if (cross2.y < 0)
camAngle = -camAngle;
var angle = MathHelper.SignedAngle(camAngle, m_damageAngle);
var rot = Quaternion.Euler(0, 0, 180 - angle);
damageIndicator.transform.rotation = rot;
}
public void ShowHitDirectionIndicator(float damageAngle)
{
m_damageAngle = damageAngle;
damageIndicator.gameObject.SetActive(true);
m_hideHitDirectionTime = Time.time + damageDirectionShowDuration;
}
float m_damageAngle;
float m_hideHitIndicatorTime;
float m_hideDeathIndicatorTime;
float m_hideHitDirectionTime;
}