学习游戏制作记录(角色属性和状态脚本)8.4
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