1.實現簡單的角色屬性
創建CharactorState腳本:
掛載在敵人和玩家身上
? ? public float damage;//角色傷害
public float maxHp;//最大生命
? ? [SerializeField] private float currentHealth;//當前生命
? ? void Start()
{
currentHealth = maxHp;//初始化將當前生命設置為最大生命
}
? ? public void TakeDamage(float _damage)//受到傷害調用
{
currentHealth -= _damage;
? ? ? ? if (currentHealth < 0)
{
Die();
}
}
? ? private void Die()//暫不給出具體的實現
{
throw new NotImplementedException();
}
Entity腳本:
public CharactorState state { get; private set; }//獲取屬性腳本
?state = GetComponent<CharactorState>();
PlayerAnimationTriggers 腳本:
? ? private void AttackTrigger()
{
Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius);
? ? ? ? foreach(var hit in collider2Ds)
{
if(hit.GetComponent<Enemy>()!=null)
{
hit.GetComponent<Enemy>().Damage();
hit.GetComponent<Enemy>().state.TakeDamage(player.state.damage);//調用傷害函數
}
}
}
2.實現簡單的角色狀態腳本
在游戲里,玩家可能會裝備裝備,這些狀態會影響玩家的屬性,我們不妨創建一個State腳本來統一修改這些屬性:
[System.Serializable]
public class State?
{
[SerializeField] private int baseValue;//每個狀態的基礎屬性
? ? public ?List<int> modifiers;//每個狀態對應的修改器,即修改基礎屬性的數值
? ? public int ?GetValue()//其它腳本獲取屬性
{
int finalValue = baseValue;
? ? ? ? foreach (int modifier in modifiers)//依次應用修改器
{
finalValue += modifier;
}
? ? ? ? return finalValue;
}
? ? public void AddModify(int _modifier)//添加修改器
{
modifiers.Add( _modifier );
}
? ? public void RemoveModify(int _modifier)//移除修改器
{
modifiers.RemoveAt( _modifier );
}
}
CharactorState腳本:
public State damage;//將傷害和最大生命都修改為狀態,它們會因為各種因素而修改自己的基礎值
public State maxHealth;
[SerializeField] private float currentHealth;
void Start()
{
currentHealth = maxHealth.GetValue();
? ? damage.AddModify(4);//調試用,成功調用則在原有攻擊數值上加上4
}
PlayerAnimationTriggers 腳本:
? ? private void AttackTrigger()
{
Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius);
? ? ? ? foreach(var hit in collider2Ds)
{
if(hit.GetComponent<Enemy>()!=null)
{
hit.GetComponent<Enemy>().Damage();
hit.GetComponent<Enemy>().state.TakeDamage(player.state.damage.GetValue());
? ? ? ? ? ? ? ? Debug.Log(player.state.damage.GetValue());//檢測用
}
}
}
設定基礎攻擊為7,加上4后輸出11