本游戏为Unity 5.6开发的回合制战斗演示版,提供策略性对战体验。玩家可在精心设计的地图上指挥角色,选择技能和战术,战胜敌人以取得胜利。
在回合制战斗DEMO中加入了动画状态的代码实现如下:
```csharp
public enum HeroStatus {
idle = 0, // 空闲
attack, // 攻击
other, // 其他
hit, // 受击
die, // 死亡
defense, // 防御
cast, // 施法
miss, // 闪避
seriousInjury,//重伤
move, // 移动
exit // 获取下一个状态
}
public class hero : MonoBehaviour {
public UISpriteAnimation m_spriteAnimation = null;
public HeroStatus m_staus = HeroStatus.exit;
private BoxCollider m_bodyBC = null;
public string m_name = ;
public AttackCrash m_attackCrash = null;
public byte m_posIndex = 0;
void Awake() {
m_spriteAnimation = transform.GetComponent
();
m_bodyBC = transform.GetComponent();
}
void Start () {
// 添加攻击动画回调函数
m_spriteAnimation.AddFrameCallBack(HeroStatus.attack, 1, AttackCallBack);
m_spriteAnimation.AddFrameCallBack(HeroStatus.attack, 4, AttackCallBack);
m_spriteAnimation.AddFrameCallBack(HeroStatus.attack, 7, AttackCallBack);
}
public float m_speed = 1f;
public float m_offset = 0.5f;
public Vector3 m_destination = Vector3.zero;
public List m_actionList = new List();
void Update () {
switch (m_staus) {
case HeroStatus.idle:
if(m_actionList.Count > 0){
m_staus = HeroStatus.exit;
}
break;
case HeroStatus.attack:
if(!m_spriteAnimation.isPlaying){
m_staus = HeroStatus.exit;
}
break;
// 其他状态处理代码...
case HeroStatus.move:
transform.position = Vector3.MoveTowards(transform.position, m_destination, m_speed * Time.deltaTime);
if (transform.position == m_destination){
m_staus = HeroStatus.exit;
}
break;
case HeroStatus.exit:
// 获取下一个状态
if(m_actionList.Count > 0){
string str = idle;
switch(m_actionList[0].status) {
default:
str = Enum.GetName(typeof(HeroStatus), m_actionList[0].status);
break;
}
m_spriteAnimation.namePrefix = str;
// 其他代码...
} else {
m_staus = HeroStatus.idle;
}
break;
// 更多状态处理...
}
}
public void AttackCallBack(){
GameObject go = (GameObject)Resources.Load(AttackCrash);
// 创建攻击特效
}
private void OnCollisionEnter(Collision co){
Debug.Log(进入碰撞!);
GameObject go = (GameObject)Resources.Load(Effect);
Defense();
Hit();
}
public void Attack(GameObject aims){
ActionData tmpAD = new ActionData();
// 添加动作数据
}
// 更多方法...
}
```
这段代码定义了英雄的状态,并处理各种状态的转换和动画播放。每个状态都有对应的逻辑,例如攻击时会调用AttackCallBack函数创建特效等。
需要注意的是这段代码可能未完全调试通过且仅作为学习使用,实际项目中需要进一步完善和优化。