#游戏unity-音之国度#战斗系统优化
起初,在之前的博客中我们已经讲解过了回合制战斗系统的主要代码逻辑,但是这种代码逻辑并不是什么游戏都适用的;就像悲惨的博主,写了各自人物和敌人的代码,在最后写有关协程的控制代码的时候,才心酸的发现,这样安排代码逻辑,也能达到博主想要的交替战斗控制权的效果,但是代码很绕很不具有可读性。博主之前是这样想的——在每一个模型上绑定两个脚本,一个是作为主权进行主动攻击的Player脚本,一个是在受到攻击后,进行随机反击的Monster脚本,其中包括作为相对于另一方的敌人的时候的AI算法。但是,在写Control脚本时,发现,这样的话,在写协程的交替控制的时候,就需要实例化四个脚本的实例;其中,每个模型上的每个脚本各一个,之所以这样做,是因为在协程中要调用不同脚本的的不同方法以达到想要的功能实现。博主也确实硬着头皮那样写了写,但是发现,实例的四个脚本在调用时,会忘记谁是谁,哪个包括什么方法,这对码农本身就增加了阅读难度好嘛。这就是血的教训啊,划重点!
所以,博主果断扔掉了原来的脚本,重新上阵,根据网上查询,增加了有关经验值的数值计算的算法,重写了脚本,对其进行了优化。
其实博主发生那样的错误,完全是因为想当然——因为惯性思维就是把方法能按状态分开在不同的脚本写就分开呀,在一个脚本里多乱呀,但是这次就遇到了特殊情况了不是….所以,朋友们一定要提前写好代码逻辑的框架呀。
这次,博主把人物在所有状态下响应的所有方法都放置在一个Hero脚本中,主要的代码逻辑放在Control中来写。还对其中的数据进行了私有的封装处理而Hero中的逻辑和博主之前讲过的是大致相似的,有补充和改变的,博主也清楚的写了注释了,还有问题的话,请留言或者私信博主哦。
优化后的Hero脚本——
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Hero : MonoBehaviour//攻击脚本
{
public Transform progress;
public int MAX_HP;
private int attack;
private int _hp;
public int exp=0;//经验值
private bool Islife;
private bool Ismyturn;
GameObject monster;
private Hero enemyScript;
//等待玩家操作