游戏场景——坦克基类
类字段
抽象方法
由于每个坦克的开火方式都不同,所以这里没有办法具体写逻辑,只有进行抽象
虚函数
受伤
死亡
关联死亡特效
播放死亡特效
控制音效
直到当前BaseTankObj的代码为
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class TankBaseObj : MonoBehaviour
{
//坦克的一些属性
public int atk;
public int def;
public int maxHP;
public int hp;
//速度相关
public int moveSpeed = 10;
public int turnSpeed = 100;
public int headTurnSpeed = 100;
//关联的特效
public GameObject deadEff;
//关联的炮台
public Transform tankHead;
/// <summary>
/// 开火
/// </summary>
public abstract void Fire();
/// <summary>
/// 受伤
/// </summary>
/// <param name="other">攻击我的那个坦克</param>
public virtual void Wound(TankBaseObj other)
{
//计算伤害
int dmg = other.atk - this.def;
//判断伤害是否有效
if (dmg <= 0)
return;
else
this.hp -= dmg;
//如果血量小于0了,就死亡
if (this.hp <= 0)
{
this.hp = 0;
Dead();
}
}
/// <summary>
/// 死亡
/// </summary>
public virtual void Dead()
{
//先摧毁坦克
Destroy(this.gameObject);
//播放特效
if (deadEff != null)
{
//先实例化特效
GameObject effObj = Instantiate(deadEff, this.transform.position, this.transform.rotation);
//然后得到特效预制体上的音源组件,并设置其音量和是否是静音
AudioSource audioSource = effObj.GetComponent<AudioSource>();
audioSource.volume = GameDataMgr.Instance.musicData.soundValue;
audioSource.mute = !GameDataMgr.Instance.musicData.isOpenSound;
//播放音效
audioSource.Play();
}
}
}