关注了专栏:天文八卦学
关注了专栏:天文八卦学
LoginSys#enterLogin()方法,异步加载场景前,应该先调用一次
GameRoot.Instance.loadingWindow.InitWindow();
进度点的计算参数总长除以2代替Unity中查看
imagePoint.transform.localPosition = new Vector3(-(fgWidth / 2), 0, 0);
float posX = prg * fgWidth - (fgWidth / 2);
如临深渊,如履薄冰,点赞
请问一下 老师有没有什么方法可以直接把传递的数据内容打印出来,比如客户端收到的消息,和服务器收到的消息的具体内容(playerdata 里面的数据项)。 方便调试~
这节课之前出了个BUG 在看课程的时候看漏了一段,结果有一个ToRemove 没有删除.. 而且是在UI的逻辑里的 我查BUG查了一下午 都没去UI里边找.. 最后还是Plane老师帮我找到的...但是经历了这一下午查BUG 我也算是给老师写的服务器和数据库代码吃透了8成 弄明白了逻辑关系..虽然耽误了我将近1天的时间 也算塞翁失马. 还要感谢Plane老师 凌晨12点半还为我 解答了问题.
可能是我Unity版本比较高, 载入角色会在碰撞生效前掉下去. 把资源加载脚本里地图进度检测用的Update改成FixedUpdate就可以了. 这个是好像在物理计算之后更新. 有遇到这种问题的可以参考一下.
这个条有个简单的做法
客户端移植通讯会话
教程中关于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");
}
动画播放仍然有问题,状态机按照教程设定,粒子系统均不能播放,动画会播放两次。什么原因?目前不清楚。
因为有多种技能,都放在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);
}
}
为什么我这边物效只能播放一次呢?PlayerController.cs中设置特效函数:
public override void SetFX(string name,float destroy)
{
GameObject go;
if(fxDic.TryGetValue(name,out go))
{
go.SetActive(true);
timerSvc.AddTimeTask((int tid) =>
{
PECommon.Log("FX Played.");
go.SetActive(false);
}, destroy);
PECommon.Log("FX Found in fxDic");
}
//else
//{
// PECommon.Log("FX was not Found in fxDic");
//}
}
其中调试信息都能输出,就是特效只在第一次能播放。
UI制作视频播放这么快,叫人来不及看,怎么这一块
服务器端配置信息为什么不存到数据库里面呢?
1. UI物体宽度:
imgFG.GetComponent<RectTransform>().sizeDelta().x;
2. UI物体相对父物体位置:
imgPoint.transform.localPosition;
3. UI物体设置位置:
imgFG.GetComponent<RectTransform>().anchoredPosition
4.Action成员变量在函数内lamada赋值,在Update里更新
音乐服务类
0加载音乐并选择缓存
1播放背景音乐
2播放UI音乐
设置窗口状态 初始化 退出化 工具类
1.储存数据
2.异步加载资源
重要