重要
重要
LoginSys#enterLogin()方法,异步加载场景前,应该先调用一次
GameRoot.Instance.loadingWindow.InitWindow();
进度点的计算参数总长除以2代替Unity中查看
imagePoint.transform.localPosition = new Vector3(-(fgWidth / 2), 0, 0);
float posX = prg * fgWidth - (fgWidth / 2);
端正心态不扯裆。
Action将方法作为参数传入,使通用代码复用性更高
流量是要花钱的,只传必要数据。
因为有多种技能,都放在Update里面,代码太多。自己重写了一下更新冷却效果代码,采用倒计时方式,显示剩余百分比,(范围9~0):
private void Update()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
{
ClickSkill1Atk();
}
if (isSk1CD)
{
UpdateSk1FillAmount();
}
}
public Image imgSk1CD;
public Text txtSk1CD;
private bool isSk1CD = false;
private float sk1CDTime;
private int sk1Num;
private float sk1FillCount = 0f;
private float sk1CDTimeCount;//用于保存冷却剩余百分比
public void ClickSkill1Atk()
{
if (isSk1CD == false)
{
BattleSys.Instance.ReqReleaseSkill(1);
isSk1CD = true;
SetActive(imgSk1CD);
imgSk1CD.fillAmount = 1;
//sk1Num = (int)sk1CDTime;
//SetText(txtSk1CD, sk1Num);
sk1CDTimeCount = sk1CDTime;
sk1FillCount = sk1CDTimeCount / sk1CDTime;
imgSk1CD.fillAmount = sk1FillCount;
sk1Num = (int)(sk1FillCount * 10);
SetText(txtSk1CD, sk1Num);
}
}
public void UpdateSk1FillAmount()
{
sk1CDTimeCount -= Time.deltaTime;
if(sk1CDTimeCount>0)
{
sk1FillCount = sk1CDTimeCount / sk1CDTime;
imgSk1CD.fillAmount = sk1FillCount;
sk1Num = (int)(sk1FillCount*10);
SetText(txtSk1CD, sk1Num);
}
else
{
isSk1CD = false;
SetActive(imgSk1CD, false);
}
}
动画播放仍然有问题,状态机按照教程设定,粒子系统均不能播放,动画会播放两次。什么原因?目前不清楚。
教程中关于comboIndex归零的处理太麻烦,而且会丢失一次点击响应,我的代码很简单:
public void ReleaseNormalAtk()
{
if(entitySelfPlayer.currentAniState==AniState.Attack)
{
//在500ms内进行第二次点击,存数据
double nowAtkTime = TimerSvc.Instance.GetNowTime();
if(nowAtkTime-lastAtkTime<Constants.ComboSpace&&lastAtkTime!=0)
{
//索引自动归零
comboIndex =(comboIndex+1)%comboArr.Length;
entitySelfPlayer.comboQue.Enqueue(comboArr[comboIndex]);
lastAtkTime = nowAtkTime;
}
}
else if(entitySelfPlayer.currentAniState==AniState.Idle||entitySelfPlayer.currentAniState==AniState.Move)
{
lastAtkTime = TimerSvc.Instance.GetNowTime();
entitySelfPlayer.Attack(comboArr[0]);
}
PECommon.Log("Click Normal Attack");
}