Roll a Ball
还是老模式。既然是随笔,就记录些自己在学习中遇到的有趣的点关于Roll a Ball...
为什么如球体之类的unity中初始的对象都会埋在平面下面呢? 坐标相同(0,0,0),比例一般是1:1:1或1:2:1的unity单位,故而只需把默认大小(1,1,1)的球体沿y轴上移0.5个单位(跟据大小和比例算的)
注意:在Scene视图中,对于某个Hierarchy里的对象,在Inspector视图里如果折叠Collider组件的话就不会显示绿色的碰撞线(Gizmos)。
关于摄像机关于第三人称的设计:首先要在Scene中调好初始摄影机的位置,方向(如Position(0,10,-10),Rotation(45,0,0)),然后不要把摄像机直接设为目标子对象(不然Game开始后会天旋地转)。可以通过在摄像机上挂脚本来实现基本第三人称的功效。如
public GameObject player; //记得在Camera中Inspector引用摄影目标 private Vector3 offset; //偏移量 void Start() { offset = transform.position - player.transform.position; } void LateUpdate() { transform.position = player.transform.position + offset; }
代码作用:一旦我们使用键盘来控制角色移动,在每一帧摄像机展示拍摄画面之前,摄像机都会先移动跟角色相关的新的位置。
不要害怕使用空物体(Creat Empty),把它们当成是Hierarchy中的文件夹(当然记得要把空物体重置到原点位置)。
使某个动作需要平滑一些,并且与帧率无关,记得乘上Time.deltaTime。
void OnTriggerEnter(COllider other) //指第一次和碰撞体接触,容易出现和其他非目标物体(地面、墙壁)发生非刻意碰撞 { if(other.gameObject.CompareTag("Pick Up")) // 为了防止和地板、墙面等出现bug { other.gameObject.setActive(false); //更加省资源,不用Destroy }
注意:Unity有关优化它的物理系统。
首先要知道在Unity中任何带有碰撞器(Collider)和刚体(Rigidbody)组件的游戏对象(GameObject),都被认为是动态的。任何带有碰撞器但没有刚体的游戏对象都被认为是静态的(如地面、墙壁)。Uinty会计算出所有静态碰撞器的体积,存入缓存中。每次我们移动、旋转、或者缩放一个静态碰撞器,Unity都会重新计算所有的静态碰撞器,更新缓存,浪费资源。故我们可以在那些要有变化(移动,旋转,缩放)的静态游戏对象添加Rigidbody组件,变为动态游戏对象。然后可以勾选Is Kinematic选项,使这个刚体不会对物理力有反应,但可以依赖transform来移动或变化。
标准(Standard)刚体依赖物理力移动。
运动(Kinematic)刚体依赖transform组件来移动和变化。
Ui界面里,在Rect Transform组件中“回”中按住“Shift”+“Alt”可以快速实现UI组件在Game界面中的位置变化及锚点位置变化(再通过坐标微调),同时UI底下的“Paragraph”中也有一定的调节作用。
最后附上我们的Roll a Ball小项目的实例:
https://pan.baidu.com/s/1jhoWt0dplVOqSSUwSHOFuw