demo过程中遇到的坑和经验总结
- Button,Image属于UGUI,需要一个Canvas(画布)。手机适配,在CanvasScaler中选择Scale withScreen Size进行适配,根据屏幕进行拉伸。
- 2D的碰撞需要collider2D,并且添加刚体rigidbody 2D组件,注意设置重力为0。检测碰撞需要使用2D相关的,如果碰撞体任意一方勾选isTrigger,使用trigger碰撞函数。
- 世界坐标(transform)与本地坐标(localtransform)注意区分
- pivot是物体的中心点,锚点是设置相对父物体的位置
- 动画可以使用骨骼动画,安装龙骨插件;也可以使用animation,每个动画需要有一个animation controller。
- 父物体和子物体的碰撞独立开,需要两个物体都添加刚体组件,否则子物体碰撞会触发父物体的碰撞检测函数
- 位置变换,当闪烁,可以使用transform = newpos,当需要位移效果,缓慢移动到相应位置,需要插值,方法有Vector3.MoveTowards 、Vector3.Lerp
- 一切脚本都是组件,可以使用GetComponent、AddComponent获取和添加
- 限制人物移动客户端这边可以用碰撞体,然后射线Physics2D.Raycast,映射到具体的层(1 << LayerMask.NameToLayer)
- 人物移动理论上是服务器计算,可以传一个力度和方向给服务器,但是demo这边是客户端移动后把位置传给服务器然后转发
- 物品的拖动,继承IDragHandler,OnDrag相关函数
- 时间控制等可以使用协程,如时间条,进度条
- 常用物体可以生成预制体,prefab,Resources.Load("") as GameObject; Instantiate(itemGo[i]) as GameObject
- 尽量少使用static变量,这样有利于重新初始化,最后有个问题是demo需要杀进程重启。。影响游戏体验