From ecf4d19b87cd196970515e9669b5e43f9ab65500 Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Sat, 07 Nov 2020 10:45:22 +0800 Subject: [PATCH] 隐藏怪物血条前的等级 --- Assets/Scripts/Core/Health/HealthVisualizer.cs | 289 +++++++++++++++++++++++++++++---------------------------- 1 files changed, 147 insertions(+), 142 deletions(-) diff --git a/Assets/Scripts/Core/Health/HealthVisualizer.cs b/Assets/Scripts/Core/Health/HealthVisualizer.cs index 76709d8..e3273ee 100644 --- a/Assets/Scripts/Core/Health/HealthVisualizer.cs +++ b/Assets/Scripts/Core/Health/HealthVisualizer.cs @@ -6,161 +6,166 @@ namespace Core.Health { - /// <summary> - /// Class to visualizer the health of a damageable - /// </summary> - public class HealthVisualizer : MonoBehaviour - { - /// <summary> - /// The DamageableBehaviour that will be used to assign the damageable - /// </summary> - [Tooltip("This field does not need to be populated here, it can be set up in code using AssignDamageable")] - public DamageableBehaviour damageableBehaviour; - - /// <summary> - /// The object whose X-scale we change to decrease the health bar. Should have a default uniform scale - /// </summary> - public Transform healthBar; - - /// <summary> - /// The object whose X-scale we change to increase the health bar background. Should have a default uniform scale - /// </summary> - public Transform backgroundBar; + /// <summary> + /// Class to visualizer the health of a damageable + /// </summary> + public class HealthVisualizer : MonoBehaviour + { + /// <summary> + /// The DamageableBehaviour that will be used to assign the damageable + /// </summary> + [Tooltip("This field does not need to be populated here, it can be set up in code using AssignDamageable")] + public DamageableBehaviour damageableBehaviour; + + /// <summary> + /// The object whose X-scale we change to decrease the health bar. Should have a default uniform scale + /// </summary> + public Transform healthBar; + + /// <summary> + /// The object whose X-scale we change to increase the health bar background. Should have a default uniform scale + /// </summary> + public Transform backgroundBar; - /// <summary> - /// 处理当前的TextMeshPro. - /// </summary> - public TextMeshPro textMesh; + /// <summary> + /// 处理当前的TextMeshPro. + /// </summary> + public TextMeshPro textMesh; - /// <summary> - /// 替换levelMaterial对应的GameObject. - /// </summary> - public GameObject levelQuad; + /// <summary> + /// 替换levelMaterial对应的GameObject. + /// </summary> + public GameObject levelQuad; - public List<Material> levelMaterial; + public List<Material> levelMaterial; - /// <summary> - /// Whether to show this health bar even when it is full - /// </summary> - public bool showWhenFull; + /// <summary> + /// Whether to show this health bar even when it is full + /// </summary> + public bool showWhenFull; - /// <summary> - /// Camera to face the visualization at - /// </summary> - protected Transform m_CameraToFace; + /// <summary> + /// Camera to face the visualization at + /// </summary> + protected Transform m_CameraToFace; - /// <summary> - /// Damageable whose health is visualized - /// </summary> - protected Damageable m_Damageable; + /// <summary> + /// Damageable whose health is visualized + /// </summary> + protected Damageable m_Damageable; - /// <summary> - /// 是否反方的HealthBar. - /// </summary> - public bool bOpponent { get; set; } + /// <summary> + /// 是否反方的HealthBar. + /// </summary> + public bool bOpponent { get; set; } - //protected int BloodTest = 1234; + //protected int BloodTest = 1234; - /// <summary> - /// Updates the visualization of the health - /// </summary> - /// <param name="normalizedHealth">Normalized health value</param> - public void UpdateHealth(float normalizedHealth) - { - Vector3 scale = Vector3.one; - - if (healthBar != null) - { - //scale.x = normalizedHealth; - //healthBar.transform.localScale = scale; - healthBar.transform.DOScaleX(normalizedHealth, 0.3f); - } - - if (backgroundBar != null) - { - scale.x = 1;// - normalizedHealth; - backgroundBar.transform.localScale = scale; - } - - // TEST CODE: 测试场景内飘字的效果,可以继续加强这一块的效果. - if (this.textMesh) - this.textMesh.text = Math.Floor(m_Damageable.currentHealth).ToString(); - - SetVisible((showWhenFull || normalizedHealth < 1.0f) && (!this.bOpponent)); - } - - /// <summary> - /// Sets the visibility status of this visualiser - /// </summary> - public void SetVisible(bool visible) - { - gameObject.SetActive(visible); - } - - /// <summary> - /// Assigns the damageable, subscribing to the damaged event - /// </summary> - /// <param name="damageable">Damageable to assign</param> - public void AssignDamageable(Damageable damageable) - { - if (m_Damageable != null) - { - m_Damageable.healthChanged -= OnHealthChanged; - } - m_Damageable = damageable; - m_Damageable.healthChanged += OnHealthChanged; - } - - /// <summary> - /// Turns us to face the camera,公告板的算法原理: - /// </summary> - protected virtual void Update() - { - Vector3 direction = m_CameraToFace.transform.forward; - transform.forward = -direction; - } - - /// <summary> - /// Assigns a damageable if damageableBehaviour is populated - /// </summary> - protected virtual void Awake() - { - if (damageableBehaviour != null) - { - AssignDamageable(damageableBehaviour.configuration); - } - } - - /// <summary> - /// Caches the main camera - /// </summary> - protected virtual void Start() - { - m_CameraToFace = UnityEngine.Camera.main.transform; - - } - - /// <summary> - /// 设置血条对应的等级数据。 - /// </summary> - /// <param name="lvl"></param> - public void SetHealthLevel( int lvl) + /// <summary> + /// Updates the visualization of the health + /// </summary> + /// <param name="normalizedHealth">Normalized health value</param> + public void UpdateHealth(float normalizedHealth) { - if (lvl < 0) - { - levelQuad.gameObject.SetActive(false); - return; - } + Vector3 scale = Vector3.one; - if( this.levelQuad) - levelQuad.GetComponent<MeshRenderer>().material = levelMaterial[lvl]; + if (healthBar != null) + { + //scale.x = normalizedHealth; + //healthBar.transform.localScale = scale; + healthBar.transform.DOScaleX(normalizedHealth, 0.3f); + } + + if (backgroundBar != null) + { + scale.x = 1;// - normalizedHealth; + backgroundBar.transform.localScale = scale; + } + + // TEST CODE: 测试场景内飘字的效果,可以继续加强这一块的效果. + if (this.textMesh) + this.textMesh.text = Math.Floor(m_Damageable.currentHealth).ToString(); + + SetVisible((showWhenFull || normalizedHealth < 1.0f) && (!this.bOpponent)); } - void OnHealthChanged(HealthChangeInfo healthChangeInfo) - { - UpdateHealth(m_Damageable.normalisedHealth); - } - } + /// <summary> + /// Sets the visibility status of this visualiser + /// </summary> + public void SetVisible(bool visible) + { + gameObject.SetActive(visible); + } + + /// <summary> + /// Assigns the damageable, subscribing to the damaged event + /// </summary> + /// <param name="damageable">Damageable to assign</param> + public void AssignDamageable(Damageable damageable) + { + if (m_Damageable != null) + { + m_Damageable.healthChanged -= OnHealthChanged; + } + m_Damageable = damageable; + m_Damageable.healthChanged += OnHealthChanged; + } + + /// <summary> + /// Turns us to face the camera,公告板的算法原理: + /// </summary> + protected virtual void Update() + { + Vector3 direction = m_CameraToFace.transform.forward; + transform.forward = -direction; + } + + /// <summary> + /// Assigns a damageable if damageableBehaviour is populated + /// </summary> + protected virtual void Awake() + { + if (damageableBehaviour != null) + { + AssignDamageable(damageableBehaviour.configuration); + } + } + + /// <summary> + /// Caches the main camera + /// </summary> + protected virtual void Start() + { + m_CameraToFace = UnityEngine.Camera.main.transform; + } + + /// <summary> + /// 设置血条对应的等级数据。 + /// </summary> + /// <param name="lvl"></param> + public void SetHealthLevel(int lvl) + { + if (levelQuad.activeSelf) + { + levelQuad.gameObject.SetActive(false); + + } + return; + if (lvl < 0) + { + levelQuad.gameObject.SetActive(false); + return; + } + + if (this.levelQuad) + levelQuad.GetComponent<MeshRenderer>().material = levelMaterial[lvl]; + } + + void OnHealthChanged(HealthChangeInfo healthChangeInfo) + { + UpdateHealth(m_Damageable.normalisedHealth); + } + } } \ No newline at end of file -- Gitblit v1.9.1