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

 

猜你喜欢

转载自www.cnblogs.com/whpu-wzp/p/9230860.html