我的Unity学习笔记----------API常用方法和类详解(一)

一.API的定义


应用程序编程接口(Unity提供的方法、类,以便于去实现某些功能)。


二.如何查看API文档和API手册


新建工程—Help—Unity
Manual和Scripting Reference(没有的话官网重新下载补充安装Documentation模块)


三.事件方法:如Start、Update(有自己的命名规则和触发时机)


FixedUpdate:每秒固定调用次数(任何情况下不擅自更改)

Update/LateUpdate:根据游戏运行实际情况决定每秒调用次数

【Update和LateUpdate调用次数相同,因为在同一帧里依次调用】

Gizemos:在Sence窗口辅助显示线条、线框等

OnApplicationPause:在项目运行暂停时调用

【禁用游戏物体时运行程序,Disable调用,且Update、LateUpdate和FixedUpdate不再调用,再次启用物体时先调用Enable,然后恢复Update、LateUpdate和FixedUpdate的调用】

【可以将与运动有关的指令放入FixedUpdate函数中以保证运动的平滑而不受电脑性能影响。】


四.Time类讲解(静态变量)


Time.captureFramerate:通过设置Framerate(帧速率)在当前帧进行屏幕截图

Time.deltaTime:代表当前帧所占用的时间(大概为1/60左右)

Time.fixedDeltaTime:代表规定中当前帧所占用时间(固定为1/60)

Time.fixedTime:从游戏开始运行到现在所用时间

Time.frameCount:从游戏开始运行到现在一共运行的帧数

Time.timeScale:时间比例,用来使游戏暂停或加速播放

(查看帧数:Edit—Project Settings—Time)

Time.timeSinceLevelLoad:以场景为单位进行计时

Time.realtimeSinceStartup:
从游戏开始运行到现在一共运行的时间(当游戏暂停或后台运行时仍然计时)

Time.smoothDeltaTime:平滑运动时间(将变化趋近于平缓化)


五.使物体平滑移动


cube.Translate(Vector3.forward* Time.deltaTime * 倍数);  
//每秒运动1米
Time.timeScale = 3f; 
//对所有运动物体的速度产生影响

物体在原有运动速度基础上* Time.timeScale的数值=现有速度


六.Time.realtimeSinceStartup可以用来做性能测试

测试两个方法Method1()和Method2()谁更耗费性能:

public int runCount = 10000;  //定义执行次数

void Start () {

          float time1 = Time.realtimeSinceStartup;  //得到开始时间

          for (int i = 0; i < runCount; i++)

          {

              Method1();

           }

         float time2 = Time.realtimeSinceStartup;  //得到结束时间

         Debug.Log(time2 - time1);

         //同理,比较出time2- time1和time4 - time3的大小

         float time3 = Time.realtimeSinceStartup;

         for (int i = 0; i< runCount; i++)

         {

             Method2();

         }

         float time4 = Time.realtimeSinceStartup;

          Debug.Log(time4- time3);

        }

【举例:测试加法和乘法谁更耗费性能,可以设置没有内容的Method0()作为空白对照】


七. 创建游戏物体的三种方法


1. 构造方法,一般用来创建空物体

new GameObject();//可以在括号里为新建物体命名

new GameObject(“cube”);   //创建一个名为cube的游戏物体

“cube”是该游戏物体的参数

如果想对该物体进行后续操作,得到该物体的返回值:

GameObject go = new GameObject ("Cube");

2. (静态方法)根据prefab进行实例化[需要有0bject可以传入] (克隆)

public GameObject prefab;   //提前定义 Prefab

GameObject.Instantiate (prefab);   //实例化提前定义好的Prefab

前提是必须有一个真实存在的Prefab,可以是灯光、特效、物体等等

可以根据Prefab或者另外一个游戏物体克隆

3. 创建原始图形(需要指定类型)

GameObject.CreatePrimitive (PrimitiveType.Plane);
//Plane是类型

八. 通过代码给游戏物体添加组件


GameObject go = GameObject.CreatePrimitiveType.Plane;

//创建一个可返回的实例化物体
go. AddComponent <Rigidbody>( );

//得到该物体并添加内置组件(钢体)
go. AddComponent <脚本>( );

//也可以添加外置组件如提前写好的脚体

九. 如何禁用和启用一个游戏物体(游戏物体的常用变量)


Transform:定位,每个游戏物体都有,且只有一个,且不能被移除

Tag:标签,区分场景中的某个游戏物体

activeInHierarchy:表示物体是否处于激活状态

activeSelf:表示自身是否处于激活状态

activeInHierarchy和activeSelf的区别:

假设有一个父物体Cube下有一个子物体Object

当禁用父物体Cube时,activeInHierarchy的属性为“false”

即Cube和Object的activeInHierarchy属性都为false

但因为并没有直接禁用Object(虽然Object和Cube都为未激活)

所以Object的activeSelf属性为true,Cube的activeSelf属性为false

如何禁用一个游戏物体Cube:

GameObject go = GameObject.CreatePrimitive (PrimitiveType.Cube);

  //创建Cube

go. SetActive (false); //禁用

启动Cube: go.SetActive (true);

输出Cube的标签: Debug.Log(go.tag);

当一个游戏物体处于未激活状态时,仍可以获取到该物体的各种属性,只是该物体不在游戏场景中显示并且不运行Update方法。占用内存但不耗费性能。


你可能感兴趣的:(unity,c#,经验分享,程序人生)