浏览代码

Keep health between scenes

/main
uChema 3 年前
当前提交
57caaba3
共有 10 个文件被更改,包括 127 次插入29 次删除
  1. 2
      UOP1_Project/Assets/Prefabs/Characters/PigChef.prefab
  2. 4
      UOP1_Project/Assets/Prefabs/UI/GameplayScene/Health System/UIHealthDisplay.prefab
  3. 29
      UOP1_Project/Assets/Scripts/Characters/Damageable.cs
  4. 49
      UOP1_Project/Assets/Scripts/UI/UIHealthBarManager.cs
  5. 15
      UOP1_Project/Assets/ScriptableObjects/Events/Healthbar/DeathEvent.asset
  6. 8
      UOP1_Project/Assets/ScriptableObjects/Events/Healthbar/DeathEvent.asset.meta
  7. 16
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Config/Health/PlayersHealth.asset
  8. 8
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Config/Health/PlayersHealth.asset.meta
  9. 14
      UOP1_Project/Assets/Scripts/Characters/Config/HealthSO.cs
  10. 11
      UOP1_Project/Assets/Scripts/Characters/Config/HealthSO.cs.meta

2
UOP1_Project/Assets/Prefabs/Characters/PigChef.prefab


m_Name:
m_EditorClassIdentifier:
_healthConfigSO: {fileID: 11400000, guid: e45145042f2750b448851311cae4a1ec, type: 2}
_currentHealthSO: {fileID: 11400000, guid: 9f77d45699a310c4c893d07ae96f341a, type: 2}
_getHitEffectSO: {fileID: 11400000, guid: 670b8ed8d060e674aa8c90b1187ea592, type: 2}
_mainMeshRenderer: {fileID: 2643181883930254223}
_droppableRewardSO: {fileID: 11400000, guid: f155590e3f62ce94ea050caa8fd5403e, type: 2}

_deathEvent: {fileID: 11400000, guid: 0a29544909be226418bc1677ec369790, type: 2}
--- !u!114 &3326384532942868502
MonoBehaviour:
m_ObjectHideFlags: 0

4
UOP1_Project/Assets/Prefabs/UI/GameplayScene/Health System/UIHealthDisplay.prefab


m_Script: {fileID: 11500000, guid: f8dfad91156ef4bff806fff3c3f9eacd, type: 3}
m_Name:
m_EditorClassIdentifier:
_currentHealth: {fileID: 11400000, guid: 9f77d45699a310c4c893d07ae96f341a, type: 2}
_healthConfig: {fileID: 11400000, guid: e45145042f2750b448851311cae4a1ec, type: 2}
_heartImages:
- {fileID: 1496849399793334725}
- {fileID: 2698728842335926261}

healthText: {fileID: 0}
_setHealthBar: {fileID: 11400000, guid: 22e3f27f002de44b4948988138dd9377, type: 2}
_deathEvent: {fileID: 11400000, guid: 0a29544909be226418bc1677ec369790, type: 2}
--- !u!114 &5382124729891650614
MonoBehaviour:
m_ObjectHideFlags: 0

29
UOP1_Project/Assets/Scripts/Characters/Damageable.cs


public class Damageable : MonoBehaviour
{
[SerializeField] private HealthConfigSO _healthConfigSO;
[SerializeField] private HealthSO _currentHealthSO;
[SerializeField] private GetHitEffectConfigSO _getHitEffectSO;
[SerializeField] private Renderer _mainMeshRenderer;
[SerializeField] private DroppableRewardConfigSO _droppableRewardSO;

[SerializeField] private IntEventChannelSO _setHealthBar = default;
[SerializeField] private IntEventChannelSO _inflictDamage = default;
[SerializeField] private IntEventChannelSO _restoreHealth = default;
[SerializeField] private VoidEventChannelSO _deathEvent = default;
private int _currentHealth = default;
public bool GetHit { get; set; }
public bool IsDead { get; set; }

public int CurrentHealth => _currentHealth;
_currentHealth = _healthConfigSO.MaxHealth;
if (_currentHealthSO == null)
{
_currentHealthSO = new HealthSO();
_currentHealthSO.MaxHealth = _healthConfigSO.MaxHealth;
_currentHealthSO.CurrentHealth = _healthConfigSO.MaxHealth;
}
_setHealthBar.RaiseEvent(_currentHealth);
_setHealthBar.RaiseEvent(_currentHealthSO.CurrentHealth);
ReceiveAnAttack(_currentHealth);
ReceiveAnAttack(_currentHealthSO.CurrentHealth);
}
public void ReceiveAnAttack(int damage)

if (_inflictDamage != null)
_inflictDamage.RaiseEvent(damage);
_currentHealth -= damage;
_currentHealthSO.CurrentHealth -= damage;
if (_currentHealth <= 0)
if (_currentHealthSO.CurrentHealth <= 0)
if (_deathEvent != null)
_deathEvent.RaiseEvent();
_currentHealth = _healthConfigSO.MaxHealth;
_currentHealthSO.CurrentHealth = _healthConfigSO.MaxHealth;
_setHealthBar.RaiseEvent(_currentHealth);
_setHealthBar.RaiseEvent(_currentHealthSO.CurrentHealth);
IsDead = false;
}
public void restoreHealth(int healthToAdd)

_currentHealth += healthToAdd;
_currentHealthSO.CurrentHealth += healthToAdd;
if (_restoreHealth != null)
_restoreHealth.RaiseEvent(healthToAdd);
}

49
UOP1_Project/Assets/Scripts/UI/UIHealthBarManager.cs


using TMPro;
public class UIHealthBarManager : MonoBehaviour
{
int _maxHealth;
float _currentHealth;
[SerializeField]
private HealthSO _currentHealth = default;
[SerializeField]
private HealthConfigSO _healthConfig = default;
[SerializeField] private IntEventChannelSO _setHealthBar = default;
[SerializeField] private VoidEventChannelSO _deathEvent = default;
_setHealthBar.OnEventRaised += SetHealthBar;
_deathEvent.OnEventRaised += SetHealthBar;
_deathEvent.OnEventRaised += RegisterDeath;
SetHealthBar();
_setHealthBar.OnEventRaised -= SetHealthBar;
_deathEvent.OnEventRaised -= SetHealthBar;
_deathEvent.OnEventRaised -= RegisterDeath;
public void SetHealthBar(int _maxHealth)
private void Start()
{
}
private void OnLevelWasLoaded(int level)
this._maxHealth = _maxHealth;
_currentHealth = _maxHealth;
SetHeartImages();
}
public void SetHealthBar()
{
_currentHealth.MaxHealth = _healthConfig.MaxHealth;
_currentHealth.CurrentHealth = _healthConfig.MaxHealth;
_currentHealth -= _damage;
_currentHealth += _healthToAdd;
public void RegisterDeath()
{
SetHealthBar();
}
int heartValue = _maxHealth / _heartImages.Length;
int filledHeartCount = Mathf.FloorToInt(_currentHealth / heartValue);
int heartValue = _currentHealth.MaxHealth / _heartImages.Length;
int filledHeartCount = Mathf.FloorToInt((float)_currentHealth.CurrentHealth / heartValue);
for (int i = 0; i < _heartImages.Length; i++)
{

}
else if (i == filledHeartCount)
{
heartPercent = ((float)_currentHealth - (float)filledHeartCount * (float)heartValue) / (float)heartValue;
heartPercent = ((float)_currentHealth.CurrentHealth - (float)filledHeartCount * (float)heartValue) / (float)heartValue;
}
else
{

15
UOP1_Project/Assets/ScriptableObjects/Events/Healthbar/DeathEvent.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7fafac715ff920c4383fed91a38a351e, type: 3}
m_Name: DeathEvent
m_EditorClassIdentifier:
description:

8
UOP1_Project/Assets/ScriptableObjects/Events/Healthbar/DeathEvent.asset.meta


fileFormatVersion: 2
guid: 0a29544909be226418bc1677ec369790
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

16
UOP1_Project/Assets/ScriptableObjects/StateMachine/Config/Health/PlayersHealth.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c4d37316dbf36c846802c755566e127b, type: 3}
m_Name: PlayersHealth
m_EditorClassIdentifier:
_maxHealth: 0
_currentHealth: 0

8
UOP1_Project/Assets/ScriptableObjects/StateMachine/Config/Health/PlayersHealth.asset.meta


fileFormatVersion: 2
guid: 9f77d45699a310c4c893d07ae96f341a
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

14
UOP1_Project/Assets/Scripts/Characters/Config/HealthSO.cs


using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "PlayersHealth", menuName = "EntityConfig/Player's Health")]
public class HealthSO : ScriptableObject
{
[Tooltip("Initial health")]
[SerializeField] private int _maxHealth;
[Tooltip("current health")]
[SerializeField] private int _currentHealth;
public int MaxHealth { get; set; }
public int CurrentHealth { get; set; }
}

11
UOP1_Project/Assets/Scripts/Characters/Config/HealthSO.cs.meta


fileFormatVersion: 2
guid: c4d37316dbf36c846802c755566e127b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
正在加载...
取消
保存