协程方法,Mathf、Input、Vector2、Vector3、Random、Quaternion、Rigidbody、Camera、Application、SceneManager类
一、协程
1、普通方法的执行顺序:从上到下,如果遇到函数的调用,Start函数会先等待调用函数的执行,结束后才会返回Start函数继续执行。
协程方法的执行顺序则是:从上到下的顺序,当Start函数中有协程方法的调用时,Start函数并不会等待函数的调用,则会继续进行,即协程方法则会与Start函数一起执行。 写成方法也可在运行的时候进行暂停。
1)返回值是IEnumerator
2) 返回参数的时候使用yield return null/0;
3)协程方法的调用用StartCoroutine(method())
执行协程方法和Start方法的先后顺序是不确定的,需要看CPU的调度问题
协程方法开启后,会继续运行下面的代码,不会等协程方法运行结束才继续运行
2、协程方法暂停时使用yield return new WaitForSeconds(3);暂停三秒
3、可以在任意地方开启协程方法
4、用协程方法实现动画的效果
1)
2)差值的方式实现
Color color=cube.GetComponent().material.color;
Color newColor=Color.Lerp(color,Color.red,0.02f); //差值,从当前颜色过渡到红色,每间隔0.02个距离
cube.GetComponent().material.color=newColor;
yield return new WaitForSeconds(0.02f); //暂停时间
5、参数可以是方法名,也可以是协程变量
1)StartCouroutine 启动协程
2)StopCouroutine 停止协程的调用
3)StopAllCouroutine 停止所有的协程
二、Mathf类
1、Static Variables
1)Deg2Rad 由度数变为弧度
2)Rad2Deg 由弧度转为度数
3)Epsilon 一个非常小的小数 ,可忽略不计 (anyValue+Epsilon=anyValue/anyValue-Epsilon=anyValue)
4)Infinity 一个无限大的数 (所有数字中都没有它大)
5)NegativeInfinity 一个无限小的数(所有数字中都没有它小)
6)PI 3.1415926358979…计算周长和面积
2、Static Functions
1)Abs 取绝对值
2)Ceil 向上取整(10.2返回11,-10.2返回-10)
3)CeilToInt 向上取整,int类型
4)Clamp(value,min,max) 如果Value<min时,返回min;如果Value>max时,返回max;如果value在min和max之间,则返回value。(常用于血量的增加减少,把一个变量限制在一个范围之内)
5) Clamp01(把一个值限制在0和1之间)
6)ClosestPowerOfTwo(value) 取得2的value次方
7)DeltaAngle 计算两个角度之间的最小夹角
8)Exp e的多少次方
9)Floor 向下取整
10)FloorToInt 向下取整,Int类型
11)Lerp(float a,float b,float t)a代表开始值,b代表结束值,t代表一个比例(可设置为:Time.deltaTimespeed)(大于0小于1) 差值运算(先快后慢的运动)
t小于零时,取a值;t大于零时,取b值。
12)LerpAngle 保证差值在360°以内
13)Max 取得最大值
14)Min 取得最小值
15)Pow(flloat f,float p) f的p次方
16)Sqrt(float f) 取得f的平方根
17)MoveTowards (当前值,目标值,间距(负值为远离目标值,可设置为:Time.deltaTimespeed)) 向某个位置移动
匀速运动(当前值+间距)直到达到最大值
18)PingPong(t,length(最大值)) 来回运动变换的值
从0到最大值之间运动,t即为运行速度
三、Input类输入类(按键、触摸相关检测)
1、设置与Input相关的轴: Edit–Project settings–Input
2、Static Variables:
1)imelsSelected
2)anyKey
3)anyKeyDown 只要有任意键按下都会被触发
4)mousePosition 鼠标位置,随鼠标的移动而改变,z轴恒为0
3、Static Function:
1)GetKey(KeyCode/name) 键盘中的某个键(每个键上都会对应一个KeyCode),检测键盘中的某个按键,按下键时会一直执行
2)GetKeyDown(KeyCode/name) 键盘中某个键的按下,只会在按下的那一帧返回
3)GetKeyUp(KeyCode/name) 键盘中某个键的抬起 ,只会在按键抬起的那一帧返回
4)GetMouseButton(int button/button name(虚拟键。在 Edit–Project settings–Input中都为虚拟键))中键为2,右键为1,左键为0。再按下过程中会一直触发
5)GetMouseBottonDown 只会执行一次
6)GetMouseBottonUp
7)GetBotton 虚拟按键
8)GetAxis()返回值是float类型的,监测轴的按下
控制运动(加速、减速)
9)GetAxisRaw() 没有渐变过程,直接返回0或1
10)GetTouch 控制触摸(easytouch)
四、Vector2(结构体(值类型))中的变量
向量是结构体,是值类型,要整体赋值
1、Static Variables:
1)down(0,-1)
2)left(-1,0)
3)right(1,0)
4)up(0,-1)
5)one(1,1)
6)zero(0,0)
2、Variables:
1)magnitude 取得向量的长度
2)normalized 对向量进行单位化(长度变为1,方向保持不变)
3)sqrMagnitude 还没有求平方根的长度(优化性能)
4)x 或者 y
5)this[int] 获取具体的x,y值
3、Public Functions:
1)Equals 判断两个向量是否相等
2)Normalize 把自身单位化,没有返回值,对向量产生影响
3)Set 对X,Y赋值
4)ToString 转变为字符串
4、Static Functions:
1)Angle 取得两个向量的夹角
2)ClampMagnitude 把向量限定在Max Length之内
3)Distance 取得a和b的距离
4)Dot 两个向量进行点乘
5)Lerp 差值运算(进行了两次差值运算,.x , .y)
6)LerpUnclamped(a,b,t) 不限定
7)Max 两个向量长度最大的
8)Min 两个向量长度最小的
9)MoveTowards 有当前坐标向目标坐标移动
五、Vector3(可表示向量和坐标点)
1、Static Variables
1)back(0,0,-1)
2)down(0,-1,0)
3)forward(0,0,1)
4)left(1,0,0)
5)one(1,1,1)
6)right(1,0,0)
7)up(0,1,0)
8)zero(0,0,0)
2、Variables
1)magnitude
2)normalized
3)sqrMagnitude
4)this[int]
5)x
6)y
7)z
3、Static Functions
1)Cross(Vector3 Ihs,Vector3 rhs) 差乘运算
2)Dot 点乘
3)Lerp 差值运算
4)Lerpclamped 不受限制的差值运算
5) Max / Min 取得长度最大最小的向量
6)MoveTowards 从当前位置向目标位置移动
7)Normalize 将自身单位化,保证自身方向不变
8)OrthoNormalize( ,)确保两个向量的夹角是90°
9)Project(Vector3 vector,Vector3 onNormal) vector在onNormal方向上的一个投影
10)Reflect(Vector3 inDirection,Vector3 inNormal) inDirection为入射点。inNormal为法线。Result为反射光线。
11)Scale(Vector3 a,Vector3 b) 两个向量相乘
12)Slerp(Vector3 a,Vector3 b,float t) a,b两个向量的差值(角度和长度),t是一个比例。
4、Operators:
1)Operator-
2)Operator+
3)Operator*
4)Operator/
5)Operator==
六、Random:
1、Static Variable:
- value 从零到一之间的小数
2)state 获取状态
3)rotation 控制游戏物体的旋转
4)insideUnitCircle (随机在某个周围生成敌人)在圆内生成敌人
5)insideUnitSphere 在某个球内随机产生敌人
2、Static Functions
1)InitState(int seed) 种子计算出来的结果都是相同的 传递当前时间:System.DateTime.Now.Ticks 时间一直变化,所以计算出来的结果也会不断的变化
2)Range(float/int min,float/int max) 随机数生成的范围不包括最大值
3) ColorHSV 用来生成颜色的值
七、Quaternion (四元数,结构体)
1、Static Variables
1)identity
2、Variables
1)eulerAngles 始终与游戏物体的Rotation一致
欧拉角和四元数之间可以互相转化
cube.eulerAngles=new Vector3(45,45,45);
cube.rotation=Quternion.Euler(new Vector3(45,45,45)); 把欧拉角转化为四元数
print(cube.roration.eulerAngles);把四元数转化为欧拉角
2)this[int]
3)w
4)x
5)y
6)z
3、Static Functions
1)LookRotation(Vector3 forward,Vector3 upward) 一般用于主角望向敌人 把一个前方向转化成一个四元数,把一个游戏物体的forward方向与传递过来的方向保持一致。
2)Lerp 更快的达到目标
3)Slerp (当前旋转,目标旋转,速度) 适用于与角度相关的差值
八、Rigidbody
1、Variables
1)centerOfMass 重心
2)freezeRotation 冻结旋转
3)position 用Rigdbody设置位置,性能会更好。把游戏物体从一个物体移动到另一个物体时使用position
4)rotation 修改旋转,性能更好
2、Public Functions
1)MovePosition 是整个运动更加平滑,持续运动时使用
2)MoveRotation 持续旋转使用
3)AddForce 给游戏物体施加一个力。 速度由慢到快
PlayerRgb.AddForce(Vector3.forward*force);
九、Camera类
1、Static Variables
1)main mainCamera=Camera.main;确保MainCamera的标签没有改动, 获取到场景的第一个Main Camera
2)allCameras 返回数组,取得场景中所有的Camera
3)allCamerasCount 当前场景中Camera的数量
4)current 获得当前的Camera
5)ScenePointToRay 把屏幕坐标转化为射线
2、Public Functions
1)ScreenPointToRay 把屏幕上的点转化为射线 返回值是Ray
十、Application
1、Static Variables
1)dataPath 工程所需要的数据。数据的路径。在不同的平台下返回的路径是不同的
2)streamingAssetsPath 通过文件流读取的数据
3)persistentDataPath 可以进行实例化的数据
4)temporaryCachePath 临时的缓冲数据
5)isFocused 是否处于焦点状态
6)isPlaying 是否处于播放模式,设置退出游戏
7)platform 判断当前的运行环境
8)runInBackground 设置应用是否可以在后台运行
9)version 得到开发应用版本
10)unityVersion 判断当前Unity版本
11)isWebPlayer 网页平台
12)isMobilePlatform 当前是否在移动平台上运行
13)isEditor 判断是否在编译器模式下运行
14)installMobe 安装模式
15)installerName 安装包名字
16)productName 产品名
17)companyName 公司名
18)identifier 标识
2、Station Functions
1)OPenURL 添加链接
2)Quit 退出应用
3)CaptureScreenShot 游戏截图
4)LoadLevel 加载场景(不建议使用)
十一、SceneManager
1、Static Variables
1)sceneCount 场景可以显示多个
2)sceneCountInBuildSettings 列表中场景的个数
2、Static Functions
1)CreateScene
2)GetActiveScene 用来获得当前场景,返回Scene的对象
3)GetSceneAt 获取到另一个场景的信息
4)GetSceneByBuildIndex 获取Build Scene里面的场景
5)SetActiveScene 把某个场景**
3、Events
1)activeSceneChanged 加载新场景时‘
2)sceneLoaded 有新场景加载完成时
3)sceneUnloaded 由A场景进入B场景时,A场景会被卸载
十二、总结:
本节学习了协程方法的使用,讲述了协程方法与一般方法调用的区别,以及协程方法的具体实现。
分别讲述了Mathf、Input、Vector2、Vector3、Random、Quaternion、Rigidbody、Camera、Application、SceneManager类中各种方法、变量的使用以及具体实例。
在游戏过程中,我们会运用到各种类的使用,以及协程方法的调用,用来实现游戏的各种使用要求。