学习游戏制作记录(各种独特物品效果)8.18
1.实现雷击物品效果
自行创建一个雷击的预制体,需要有碰撞器和动画控制器
创建ThunderStrike_Effect脚本:
[CreateAssetMenu(fileName = "ThunderStrikeEffect", menuName = "Data/Effect/ThunderStrike")]
public class ThunderStrike_Effect : ItemEffect//继承
{
[SerializeField] private GameObject thunderStrikePrefab;//预制体
public override void ExcuteEffect(Transform _enemyPositon)
{
GameObject thunderStrike =Instantiate(thunderStrikePrefab, _enemyPositon.position,Quaternion.identity);在敌人位置生成预制体
}
}
创建ThunderStrike_Control脚本并挂载在雷击预制体上:
protected void OnTriggerEnter2D(Collider2D collision)//触发器
{
PlayerStats playerStats = PlayerManage.instance.player.GetComponent<PlayerStats>();
if(collision.GetComponent<EnemyStats>() != null )//检测到敌人则对敌人造成魔法伤害
{
EnemyStats enemyStats = collision.GetComponent<EnemyStats>();
playerStats.DoMagicDamage(enemyStats);
Destroy(gameObject, 1f);
}
}
PlayerAnimationTriggers脚本:
ItemData_Equipment itemData_Equipment=Inventory.instance.GetEquipment(EquipmentType.Weapon);
if (itemData_Equipment!=null)//确保玩家装装备时才会调用效果函数
{
itemData_Equipment.Effect(hit.transform);//雷击
}
2.实现冰与火的物品效果
当玩家攻击到第三下时会发出一个飞弹
自行创建冰与火飞弹攻击的预制件,挂载刚体,碰撞器,动画控制器等组件
创建IceAndFireEffect脚本:
[CreateAssetMenu(fileName = "Ice And Fire Effect", menuName = "Data/Effect/IceAndFire")]
public class IceAndFireEffect : ItemEffect
{
[SerializeField] GameObject iceAndfirePrefab;//预制体
[SerializeField] private float xVelocity;//飞行速度
public override void ExcuteEffect(Transform _respawnPositon)
{
Player player = PlayerManage.instance.player;
bool thirdAttack = player.primaryAttackState.comboCount == 2;//检查是否攻击到第三下
if(thirdAttack)
{
GameObject iceAndFire = Instantiate(iceAndfirePrefab, _respawnPositon.position, player.transform.rotation);//生成
iceAndFire.GetComponent<Rigidbody2D>().velocity = new Vector2(xVelocity * player.facingDir, 0);//设置速度
Destroy(iceAndFire,10);//10秒后销毁
}
}
}
创建IceAndFIre_Control挂载在预制体上:
public class IceAndFIre_Control : ThunderStrike_Control//造成伤害
{
protected override void OnTriggerEnter2D(Collider2D collision)
{
base.OnTriggerEnter2D(collision);
}
}
3.实现雷击饰品效果
当装备该饰品时,水晶和剑攻击将附带雷击效果
Crystal_Skill_Control脚本:
public void AnimationExplodeEvent()//水晶造成伤害的函数
{
Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(transform.position,cd.radius);
foreach (var hit in collider2Ds)
{
if (hit.GetComponent<Enemy>() != null)
{
player.state.DoMagicDamage(hit.GetComponent<CharactorState>());
ItemData_Equipment itemAmulet = Inventory.instance.GetEquipment(EquipmentType.Amulet);//检测是否装备饰品
if(itemAmulet != null)
{
itemAmulet.Effect(hit.transform);//调用效果
}
}
}
}
Sword_Skill_Control脚本:
private void SwordSkillDamage(Enemy enemy)//剑造成伤害的函数
{
player.state.DoDamage(enemy.GetComponent<CharactorState>());
enemy.StartCoroutine("FreezeTimeFor", freezeTimeDuration);
ItemData_Equipment itemAmulet = Inventory.instance.GetEquipment(EquipmentType.Amulet);//同理
if (itemAmulet != null)
{
itemAmulet.Effect(enemy.transform);
}
}