1、Event Function函数

事件函数

事件 作用 省流
Reset() 被附加脚本时、在游戏物体的组件上按Reset时会触发该事件函数
Start() 在游戏初始化时会执行一次
Update() 每一帧都会运行这个方法
FixedUpdate() 会在指定帧调用该方法多少次
LateUpdate() 晚于Update的运行顺序,但是FPS和Update是一样的
Awake() Start() 都是在游戏物体初始化运行一次,但是Awake的运行顺序高于Start的,并且只要脚本中存在Awake方法,则无论是否挂载了该脚本都会执行该方法
OnEnable(): 当将物体的SetActive设置为true时就会自动调用调用该方法
OnDestory(): 当关闭游戏则会调用该方法

2、Time类

时间类函数

函数 函数作用
Time.time 表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算。
Time.deltaTime 表示从上一帧到当前帧时间,以秒为单位。【一般用来控制角色、动画的运动。】
Time.timeScale 时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,回放等、非常有用。如果游戏中控制运动的都是使用了Time.deltatime的话,则可以通过设置Time.timeScale=0来暂停其运动等。
Time.frameCount 总帧数。
Time.timeSinceLevelLoad 表示从当前Scene开始到目前为止的时间,也会随着暂停操作而停止。
Time.fixedTime 表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
Time.fixedDeltaTime 表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。
Time.SmoothDeltaTime 表示一个平稳的deltaTime,根据前 N帧的时间加权平均的值。
Time.realtimeSinceStartup 表示自游戏开始后的总时间,即使暂停也会不断的增加。【一般用作性能测试。】
Time.captureFramerate 表示设置每秒的帧率,然后不考虑真实时间。
Time.unscaledDeltaTime 以秒计算,完成最后一帧的时间 不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。
Time.unscaledTime 从游戏开始到现在所用的时间 不考虑timescale时候与time相同,若timescale被设置,则无效。

3、GameObject类

创建游戏物体的三种方法

方法 描述
GameObjectgo=new GameObejct(“游戏物体名”); 通过其构造器来创建(一般是用来创建空的游戏来存放其他东西的)
GameObject.Instantiate(prefab) 根据Prefab或者是另外一个游戏物体来创建(克隆Colon),可以实例粒子、等其他的游戏物体,很是常用的
GameObject.CreatePrimitive(PrimitiveType.**) 创建原始的游戏物体,基本的几何体

为游戏物体添加组件, 其中组件可以是我们自己自定义的脚本

GameObject.AddComponent<组件名>

属性、变量

方法 描述
GameObject.activeInHierarchy 游戏物体是否处于激活状态,与父类有关,父类被取消激活,则子类也是取消激活的
GameObject.activeSelf 自身的激活状态,与父类无关,只与自身有关。控制组件的激活与取消激活则使用.enable=false/true
GameObject.tag 游戏物体的tag标签,具体的由程序员自定义设置
GameObject.SetActive(false/true) 通过参数的控制来设置其游戏物体的激活状态,true为激活状态,反之为取消激活状态

UnityEngine.Object中的共有方法与变量

方法 描述
name 名字,调用该变量,则无论是通过GameObject还是Component都是返回游戏物体的名字
Destroy() 删除游戏物体,但是不会立马在unity中删除,而是会先进行回收,等确定没对象使用的时候,在进行删除
DontDestroyOnLoad() 当加载新的场景的时候,不删除这个场景中的某个游戏物体
FindObjectType<> 通过类型来进行查找,是进行全局的查找,则就是在整个场景中进行查找
FindObjectsType<> 通过类型来进行查找,是进行全局的查找,则就是在整个场景中进行查找
FindGameObjectWithTag 如果查到的是多个,则只返回查找到的第一个
FindGameObejctsWithTag 返回查找到的游戏物体集合

消息的发送

方法 描述
BroadcastMessage() 广播发送消息,则该物体上对应的方法会被调用,同时这个游戏物体上的子物体上对应的方法也会被调用的
SendMessage() 发送消息,只会对这个游戏物体中脚本上的方法发送消息
SendMessageUpwards() 广播发送消息,但是和BroadcastMessage()是相反的,在调用自身的方法时也会向上传递,调用其父类的方法

游戏组件的查找

方法 描述
Cube cube = target.GetComponent(); 返回一个对应的组件,如果有多个,则只返回第一个
Cube[] cc = target.GetComponents(); 返回该游戏物体上所有符合条件的组件,返回一个组件数组
Cube[] xx = target.GetComponentsInChildren(); 返回该游戏物体上的对应组件,同时返回该游戏物体的子类上对应的组件
Cube[] yy = target.GetComponentsInParent(); 返回该游戏物体上的对应组件,同时返回该游戏物体的父类上对应的组件

4、MonoBehaviours类

继承的变量成员

方法 描述
enabled 返回该组件是否被激活或者是被禁用,可以通过该变量来进行设置
isActiveAndEnabled 只能返回该组件是否激活的标志位,不能设置该变量,为只读的
tag 该组件所对应的游戏物体的标签
name 该组件所对应的游戏物体的名字

Invoke等方法、变量:

将添加要调用的方法添加到等待队列中,然后等待用户设定的时间后,进行队列中的方法调用。

方法 描述
Invoke(“方法1”,float time) 在等待time的时间后调用方法1
bool i= IsInvoking(“方法1”) 返回bool值,如果方法被添加到队列中,但没有被运行则返回true,如果经过一段时间后该方法被调用了则会返回false
InvokeRepeating(“方法1”,time,number) 等待time时间后,会重复开始运行方法1,每秒钟运行number次
CancelInvoke() 会暂停通过Involve/InvokeRepeating的运行,但是一般来说CancelInvoke会和InvokeRepeating组合调用。参数由自己设定

扩充: 在脚本的类前添加[ExecuteInEditMode]:则该脚本不用按游戏运行按钮就会开始编译,只限在编辑模式里面

在脚本的共有变量前添加[HideInInspector]:则该共有变量不会在Inspector面板进行显示

5、Coroutines协程

定义协程:

1
2
3
4
5
6
7
8
IEnumerator 方法名( 
{

yield return 0/null ;

yield return new WaitForSeconds(1.0f); //等待一定时间在运行下面的代码

}

开启协程:

​ StartCoroutines(方法名());

说明:协程开启会继续执行下面代码,不会等协程方法运行完再执行接下来的方法

开启与关闭协程时,StartCoriutine(参数)、StopCoroutine(参数) 其中的参数要互相对应,如果传递的是方法名,则两个方法中的参数就要是方法名,如果是IEnumerator的返回值,则其中两个方法发的参数就要是IEnumerator的返回值

1
2
3
4
5
6
7
 private IEnumerator coroutine;

coroutine = WaitAndPrint();

StartCoroutine(coroutine);

StopCoroutine(coroutine);

1
2
3
StartCoroutine("WaitAndPrint");

StopCoroutine("WaitAndPrint");

StopAllCoroutines() 停止所有的协程,不管你是怎么调用的

6、OnMousexx鼠标触发事件:

如果是通过Collider进行触发检测的话,则要在设置中打开允许进行射线检测。

事件名称 描述
OnMouseDown() 当鼠标按下的时候触发,按一次触发一次
OnMouseDrag() 当鼠标按住不放的时候一直触发,是每一帧进行触发
OnMouseUp() 当鼠标抬起的时候触发,只执行一次
OnMouseEnter() 当鼠标进入的时候触发,进入一次触发一次
OnMouseOver() 当鼠标在触发物体的上面时,则一直触发
OnMouseExit() 当鼠标移出的时候触发
OnMouseUpAsButton() 相当于是按钮的功能,当鼠标在同一个游戏物体上按下抬起的时候才会触发,按下与抬起不在同一个游戏上的话则不会进行触发。

7、Mathf类:所有的成员均为静态的

方法 描述
Mathf.Abs() 返回绝对值
Mathf.Ceil() 向上取整,例如:10.1 –> 11
Mathf.Clamp(value,min,max) 限制value的值在min和max之间。如果value的值小于min,则返回min,如果value的值大于max,则返回max。常用于控制角色血量,确保血量值在0到100之间。
Mathf.ClosePowerOfTwo(value) 取得离value的2次方最近的值
Mathg.DeltaAngke 取得两个角度之间的最小夹角
Mathf.Floor 向下取整
Mathf.Pow(i,j) 取得i的j次方
Mathf.MoveToWards() 一般用来做移动控制,是匀速的运动,加速度固定的
Mathf.Lerp() 差值运算,用于控制动画、运动等,越往后运行得越慢。
Mathf.PingPong(t,maxValue) 类似乒乓球的来回运动。起始值是0,通过t变量来控制值由0向maxValue移动,当t大于maxValue的时候又向0进行移动,如此往复。t变量常用Time.deltatime来控制。

8、Input类

输入类

方法 描述
GetKey() 按键一直按着时触发
GetKeyDown() 按键被按下那一刻进行触发
GetKeyUp() 按键被按下后抬起时触发
GetMouseButton(0/1/2) 1:左键 2:右键 3:中键 鼠标一直按着时触发
GetMouseButtonDown() 鼠标按下那一刻触发
GetMouseButtonUp() 鼠标抬起的那一刻时触发
GetButtonDown() 用户自定义的虚拟按键被按下那一刻触发
GetButton() 用户自定义的虚拟按键被按着时触发
GetButtonUp() 用户自定义的虚拟按键抬起时触发
GetAxis(“虚拟轴名”) 通过按下的虚拟轴来返回-1~1之间的值,开始值是0,然后向-1/1进行渐渐的变化,有一定的加速度。一般用来控制运动的,比如是赛车的加速运动等。
GetAxisRaw() 其他的和GetAxis差不多,就是少了渐变效果,返回值只有 0 1 -1三个。
anyKeyDown() 当任何按键被按下(包括鼠标按键)时返回true。
anyKey() 当任何按键被按着(包括鼠标)时返回true。
mousePosition() 返回鼠标在屏幕上的像素坐标,屏幕坐标z轴衡为0的。

9、Vector2

二维向量

方法 描述
magnitude 返回向量的长度
normalized 返回这个向量长度为1的矢量,不管这个向量多长,也是返回1的矢量,只是返回值,不对原向量的值产生影响
Normalize() 无参数的,也是向量化,但是调用该方法会改变原向量值,使其的值被向量化 了
ClampMagnitude() 将一个向量限制在参数中指定的长度之间
MoveToWards() 用来做匀速的运动,由一个位置向另一个位置进行移动
sqrMagnitude 对求向量的的长度时不进行开平方根运算了,减少性能的损耗,一般是用来比较两个向量的长度大小的。

其他的参考API文档即可,较为简单。

扩充:向量是结构体,为值类型,修改其中的变量的时候要整体进行修改,不能单独的进行单个变量的赋值修改

10、Vector3

三维变量

方法 描述
Cross() 插乘运算【左手法则】,通过两个向量来获得另一个向量的方向,然后进行相关的判断
Project() 投影运算
Reflect() 反射运算
Slerp() 按照角度进行插值,与lerp的按照位置信息进行插值的,一般用在炮台的旋转,使旋转的更加平滑

11、Random类

随机数类

方法 描述
InitState() 通过参数指定的种子,然后再调用Range()产生随机数的时候会依据种子来进行生成,则每一次运行所生成的随机数都是一样的,是伪随机数。一般要生成的随机数不同,可以设置参数为System.DataTime.Now.Ticks:通过时间戳来完成**
insideUnitFCircle 在单位为1的园内随机生成一个位置信息,如果要在更大的圆中生成,则可以在后面*圆的半径信息。一般用来控制随机生成敌人的位置信息
**insideUnitSphere: 在单位为1的球内随机生成一个位置信息,如果要在更大的球中生成,则可以在后面*圆的半径信息

12、Quaternion:

四元数

欧拉角【eylarAngles】与面板中的值对应和四元数【rotation】之间是可以进行转换的,一般欧拉角是用来让用户可以直观的看到的,而四元数是用来控制内部的运算 的。

方法 描述
.eulerAngles 将四元数转变为欧拉角
Euler() 将欧拉角转变为四元数
.LookRotation() 让玩家通过设置四元数来进行望向敌人的旋转,将向量方向转变为四元数
Vector3 temp = enemy.position - player.position; 获得两个位置信息之间的变量,是主角望向敌人,所以要设置向量的方向是指向敌人的
enemp.y = 0; 如果不想主角在望向他的时候出现低头的情况,也就是y轴的值出现了变化了。
player.rotation= Quaternion.LookRotation(temp); 让主角朝向敌人旋转,这里使用了Quaternion.LookRotation函数,将向量temp作为参数传入,返回一个四元数,表示主角朝向敌人的旋转角度。然后将这个四元数赋值给player的rotation属性,使得主角朝向敌人旋转。
slerp() 在做朝向的旋转的时候,不建议使用lerp,而是建议使用slerp,使其的旋转朝向更为平滑,更加的自然
Quaternion target= Quaternion.LookRotation(temp); (定义一个目标四元数target,这个四元数表示主角朝向敌人的旋转角度。这里使用了Quaternion.LookRotation函数,将向量temp作为参数传入,返回一个四元数。这个四元数赋值给target变量。)
player.rotation = Quaternion.Slerp(player.rotation, target, Time.deltaTime); //插值的缓慢旋转 (使用Quaternion.Slerp函数对主角的当前旋转角度和目标旋转角度进行平滑插值,得到一个平滑的旋转角度。然后将这个插值结果赋值给player的rotation属性,使得主角按照平滑的旋转角度进行旋转。这里使用了Time.deltaTime作为插值的时间参数,使得插值的结果更加平滑。同时,注释说明了这是一个缓慢的旋转过程。)

13、Rigidbody

刚体组件,控制角色的移动

方法 描述
.position 可以通过刚体来控制运动,在控制运动方面,使用rigibody.positon比transform.porition计算要快的多,相关的物理计算也是在刚体中计算好了,但是不建议使用这个方法来持续的控制物体的运动,不平滑,控制一两次的时候还可以使用
MovePosition() 对position的优化,其中利用了插值运算,一般持续运动的则使用这个方法,不出现卡顿的现象
rotation、MoveRotation 不建议使用rotation,比较耗性能,建议使用MoveRotation(),然后配合Quaternion,slerp()进行使用,使其更加的平滑
AddForce() 为刚体添加力,一般可以用在赛车游戏中,当进行短时的加速则可以给以限定时间的AddForce方法

14、Camera

相机组件

方法 描述
Camer.main 用来进行主相机cream组件的查找射线
Ray ray = cameraMain.ScreenPointToRay(Input.mousePosition) 获得相机到鼠标之间的射线
RaycastHit hit; 用来存放射线检测到的游戏物体的信息
bool temp = Physics.Raycast(ray, out hit) 进行射线检测

15、Application

方法 描述
SreeamingAcsets 该文件下的资源不会被压缩,导入是什么类型还是什么类型,【主要是音频、视频资源】
dataPath 工程文件路径
streamingAssetsPath 可以通过文件流来进行读取的文件路径
persistenDataPath 可以实例的文件路径
tempporaryCachePath 临时的文件路径
Application.OpenURL(“”) 打开指定的网址
Application.Quit() 退出游戏的运行
Application.CapturScreenshot(“游戏截图”) 用来截图的,字符串为截图fileName
Application.identifier 标识名
.companyName 公司名
.productName 产品名
.instalMode 安装包名
.isEditor 是否在编辑器模式
.isFocused 是否在焦点
.isMoliePlatform 是否是移动平台
.isPlaying
.isWebPlayer
.platform 编辑器的平台
.unityVersion unity版本号
.version 项目文件版本号
.runInBackground 是否可以在后台运行
UnityEditor.EditorApplication.isPlaying=false; //在编辑器模式下推出编辑状态 在编辑器模式下退出编辑状态,将游戏停止运行。这是在Unity编辑器中控制游戏运行的一种方法。通过将isPlaying属性设置为false,可以停止游戏的运行。这在调试和测试过程中非常有用,可以随时暂停游戏以便检查和调整代码。注意,这个方法只能在Unity编辑器中运行,无法在最终的游戏中运行。在最终的游戏中,你需要使用其他方法来控制游戏的运行。例如,你可以使用Application.Quit()方法来退出游戏。在游戏运行时,你可以使用Application.isPlaying属性来检查游戏是否正在运行。如果isPlayingtrue,则游戏正在运行;如果为false,则游戏已停止。这是Unity游戏开发中的一个常见做法。此外,你还可以使用Application.LoadLevel()方法来加载不同的游戏场景或关卡。这可以在游戏运行时动态更改游戏内容。例如,你可以根据玩家的选择或游戏状态来加载不同的关卡或场景。这是实现游戏中的不同关卡或任务的一种常见方法。

16、SceneManager类

场景类

方法 描述
SceneManager.LoadScene() 加载下一个场景,一般是用在另一个场景不是太大的情况下
SceneManager.LoadSceneAsync() 异步加载下一个场景,返回AsyncOperation类型,里面包含了加载的信息,加载的进度条等等。可以让用户缓解等待加载场景的时间
sceneCount 获得当前加载的场景个数
sceneCountInBuildSettings 在Build面板中加载的场景个数
GetActiveScene() 获取已经加载的当前场景的信息
GetSceneAt(index) 加载index索引的场景
activeSceneChanged 当有新场景被加载的时候就会调用这个事件
sceneLoaded 当有新场景加载完成的时候就会触发这个事件

扩充:事件的注册时通过加方法来进行注册的:

SceneManger.activeSceneChanged+=OnAcitiveScenenChanged;

17、射线检测

一般射线检测要在射线检测的范围内,并且被检测物体要有Collider

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Ray ray=new Ray(起点,方向);
PaycastHit hit; //hit中存放的是射线检测的碰撞信息
bool temp=Physics.Raycast(ray,out hit); //具体的重载方法边用边查

Ray ray = new Ray(this.transform.position + transform.forward, transform.forward); //创建射线

RaycastHit hit; //存储射线检测到的游戏物体信息

if(Physics.Raycast(ray,out hit)) //通过返回值来判断射线是否检测到相关的物体了

{

Debug.Log(hit.collider.gameObject.name);

}

扩充:

Raycast;检测的是射线碰撞到的第一个物体,不具有穿透性

RaycastAll:返回的是RaycastHit数组,具有穿透性,可以返回检测到的多个游戏物体

18、代码监听触发事件

内容 描述
当触发button组件,则会触发指定的方法名的方法
使用UnityEgine.EventSystems; 导入命名空间 通过实现接口来注册监听事件
IPointerDownHandler 鼠标按下的事件,具体的接口参考手册
Raycast Target 如果取消勾选则不做事件监听了,则无法实现检测了

19、www类(已弃用)

下载 是用来在网络中下载资源的

1
2
3
4
5
6
7
8
9
public string url = "http://img.taopic.com/uploads/allimg/120727/201995-120HG1030762.jpg";  

IEnumerator Start()
{
WWW www = new WWW(url);
yield return www;
Renderer renderer = this.GetComponent<Renderer>();
renderer.material.mainTexture = www.texture;
}

20、Touches触摸事件:

方法 描述
Input.touches 返回放在屏幕上的手指信息,返回数组
Touch touch1=Input.touches[0] 获取第一个手指的信息
touch1.position 获取手指的位置
TouchPhase pahse=touch1.phase 返回手指的状态,用于判断手指的当前状态,如按下、移动、松开等

Input.touches: 返回放在屏幕上的手指信息,返回数组

Touch touch1=Input.touches[0];

touch1.position;

TouchPhase pahse=touch1.phase phase 是用来返回手指的状态的

21、Debug.DrawRay(ray.oridin,ray.direction)

绘制射线,第一个参数是原点,第二个是方向

22、CharacterController

角色控制器

方法 描述
SimpleMove([vector3]) 简单移动
isGrounded 判断是否到地面上,bool值
Move() 与simpleMove的区别是要*Time.deltatime、而且simpleMove会使用自带的重力
OnCOntrollerColliderHit(ControllerCollidrHit hit) 当有碰撞到其他的碰撞器的时候会触发这个事件函数【hit保存碰撞到的物体信息】

23、Mesh

设置

方法 描述
material mesh 指定人是什么样子的
material 指定人的肤色是什么样子的

24、API变更:

弃用:Application.LoadLevel();

新的:SceneManager.LoadScene(); 加载新的场景

弃用

新的:Scene scene=SceneManager.GetActiveScene(); //获得当前活动场景的信息

SceneManger.LoadScene(scene.buildIndex) //重新加载当前场景

OnLevelWasLoaded() 当场景被加载的时候调用,被弃用了

改成事件了:sceenLoaded

25、特性

名称 知识点 示例
Serializable 自定义类型可以被访问
字典(无论怎样都不行)
[System.Serializable]
Header Header 特性 [Header("分组说明")]
Tooltip 悬停注释 Tooltip,为变量添加说明 [Tooltip("说明内容")]
Range 修饰数值的滑条范围 Range [Range(最小值, 最大值)]
Space 间隔特性 Space 让两个字段间出现间隔 [Space()]
Multiline 多行显示字符串 Multiline
默认不写参数显示3行
最少显示3行,最多4行,超过4行就显示滚动条
[Multiline(4)]
TextArea 滚动条显示字符串 TextArea
默认不写参数就是超过3行显示滚动条
最少显示3行,最多4行,超过4行就显示滚动条
[TextArea(3, 4)]
ContextMenuItem 为变量添加快捷方法 ContextMenuItem
参数1 显示按钮名
参数2 方法名 不能有参数
[ContextMenuItem("显示按钮名", "方法名")]
Inspector 为方法添加特性在 Inspector 中执行 [ContextMenu("测试函数")]

收录Unity常用API(感觉挺实用的)_unity 一些实用的功能-CSDN博客

Unity常用API