API
开发环境准备,如何查看Unity的API文档
Help-Scripting Reference API手册
Help-Manual手册 教程式的手册
事件函数
例如Start() Update();函数
Start()游戏运行时执行一次
Update()每帧执行
事件函数的执行顺序
Reset()
//编辑器模式下每次将脚本添加到游戏物体或者游戏物体Reset的时候
Awake()
//当脚本所在的物体被实例化时调用
OnEnable()
//位于Start()前
Start()
//游戏开始运行时调用
FixedUpdate()
//每秒调用次数固定,跟运动相关的代码可以放在这个方法中
OnTriggerXXX()
//触发器监测
OnCollisionXXX()
//碰撞器监测
OnMouseXXX()
//鼠标事件监测
Update()
LateUpdate()
OnDrwaGizmos()
//编辑器模式的辅助线就是Gizmos
OnDisable()
//调用后Update()LateUpdate()不掉用
OnApplicationQuit()
OnDestroy()
Time类中静态变量介绍
.deltaTime
//当前帧所占用的时间,大概为1/60秒左右
.fixedDeltaTime
//固定的deltaTime
.frameCount
//游戏开始后经过了多少帧
.timeScale
//默认1,正常速度播放
.realtimeSinceStartup
//游戏开始经过的时间,不受.timeScale影响,可以做性能测试
.smoothDeltaTime
//平滑的deltatime
.time
//游戏运行的时间
.unscaledTime
//游戏开始经过的时间,不受.timeScale影响
.timeSinceLevelLoad
//当前场景加载完成后运行的时间,受到.timeScale影响
性能测试
两个方法个执行1万次,或者更多
Update中用for循环执行
再输出执行前和执行后的.realtimeSinceStartup
创建游戏物体的三种方法GameObject类
new GameObject();
//只带有一个Transform组件,可以指定参数类似于“Cube”等。一般情况在创建空游戏物体时使用
.Instantiate()
//传递一个Prefab或另一个游戏物体,和tranform
.CreatePrimitive(PrimitiveType.Cube)
//Primitive:原始的,创建原始的游戏物体
如何给游戏物体通过代码添加组件
AddComponent<>();
//可以添加组件或者自定义的脚本
//任何一个游戏物体都有transform组件都有且只有一个
//activeSelf和activeInHierarchy
//禁用父物体时父物体和子物体的activeInhierarchy都为false,而子物体的activeSelf为true
//.SetActive(fasle)禁用游戏物体
GameObject,Component,Obejct的联系
//一个游戏由多个场景组成
//一个场景有多个游戏物体组成
//一个游戏物体由多个组件组成
//组件包括 Transform Rigidbody Animation 自定义脚本等等
//UnityEngine.Object所有的基类都继承自
//GameObject和Component都继承自UnityEngine.Object
//GameObject和Component都可以获取到一个继承自UnityEngine.Obejct的变量,比如name。Component的name返回的是其所在的游戏物体的name
UnityEngine下Object拥有的静态方法
//Destroy
//既可以销毁物体,也可以销毁组件
//Destroyimmediate
//立即销毁
//DontDestroyOnLoad
//加载时不销毁传入的游戏物体
//FindObjectOfType
//找到所有传入类名的组件,但不查找未激活的物体
//Instantiate
//实例化游戏物体,有多种重载方式
GameObject独有的变量、方法
//activeInHierarchy
//activeSelf
//isStatic
//layer
//scene
//tag
//transform
//Find
//根据名字查找,较为耗费性能,每次调用会遍历游戏中所有物体
//FindWithTag
//返回符合条件的第一个
//FindGameObjectsWithTag
//返回所有符合条件的物体
//CreatePrimitive
游戏物体间消息的发送和接受
//CompareTag
//比较标签是否一样
//BroadcastMessage
//调用当前物体以及其所有子物体上符合条件的方法可以传递参数DontRequireReceiver,没有接收者不报错
//SendMessage
//针对某一游戏物体的所有符合条件的方法
//SendMessageUpwards
//调用当前物体以及所有的父物体上符合条件的方法
得到组件的方法函数
//GetComponent
//查找当前游戏物体的组件
//GetComponentinChildren
//查找当前游戏物体和所有子物体的组件
//GetComponentinParent
//查找当前游戏物体和所有父物体的组件
MonoBehaviour的常用变量
//print(静态方法)
//enable
//禁用启用组件
//gameObject
//获取到该组件所在的游戏物体
//transform
//获取该组件所在游戏物体的transform
Invoke的使用
//CancelInvoke
//取消调用
//Invoke
//调用一个方法,可以传入一个时间参数,多少时间过后,执行
//InvokeRepeating
//重复调用
//isInvoking
//是否在调用返回bool
什么是协程
//执行普通方法,等普通方法执行完,代码继续向下执行
//协程方法,不会等方法执行完,而是同时向下执行,自身可以暂停
//IEnumerator XXX()
//...
//yidld return; null/0
//StartCoroutine(协程方法名());
使用Coroutine实现颜色动画渐变
//协程暂停,yield return new WaitForSeconds();
//颜色渐变
//0到1的for循环(再加上WaitForSeconds(0.1F)写在协程方法中
//或者Color.Lerp(当前颜色,目标颜色,时间间隔)通过差值改变颜色
Coroutine协程的开启和关闭
//StopAllCoroutine
//停止所有的协程方法
//StopCoroutine
//停止指定的协程方法,可以传递方法名,和协程方法的返回值
//StartCoroutine
//开始某个协程方法,通过方法名开启,只能传递一个参数
鼠标相关事件函数
//OnMouseDown
//OnMouseDrag
//鼠标拖拽
//OnMouseUp
//鼠标抬起
//OnMouseUpAsButton
//按下和抬起在同一个物体上时才触发,常见于按钮的设置
//OnMouseEnter
//OnMouseOver
//鼠标在物体上,每帧执行
//OnMouseExit
Mathf里面的静态变量
//PI
//圆周率
//Deg2Rad
//角度制变为弧度制
//Rad2Deg
//与前一个相反
//Epsilon
//非常小的小数 anyvalue + Epsilon = anyvalue除了0
//Infinity
//无限大
Mathf中方法
//Abs
//取绝对值
//Ceil
//向上取整
//CeilToInt
//向上取整返回int
//Clamp(float value, float min,float max)
//小于min返回min大于max返回max在min,max之间返回value
//DeltaAngle
//两个角度相距的角度
//Floor
//向下取整
//Lerp
//插值运算
//Max
//取大
//Min
//取小
//Sqrt
//开方
//ClosetPowerOfTwo
//取最近的2的次方数
//Pow(f,p)
//f的p次方
Lerp(float a, float b, float t)
//t是一个0到1的数//当前值和目标值间距的比例
//t小于0输出t=0时的值
//t大于1时输出t=1时的值
LerpAngle
//角度插值运算
Move Towards匀速直线运动
//MoveTowards(当前值,目标值,间距)
PingPong
//PingPong(float t,float length)
//length代表最大值,最小值是0,不能设置
//t在最小值和最大值之间来回变化
//一边t传一个时间
Input类输入类
//GetKey
//按住键盘按键
//GetKeyDown
//按下键盘按键
//GetKeyUp
//抬起键盘按键
//GetMouseButton
//0左键,1右键,2中间,这三个int可以传入
//GetMouseButtonDown
//GetMouseButtonUp
//GetButton
//GetButtonDown
//GetButtonUp
//虚拟的按键,传入虚拟按键的名字,一个虚拟按键可以赋值多个真实的按键
//GetAxis
//得到轴的值的变化来控制移动
//返回值是float类型,按下慢慢增大,抬起慢慢减少
//GetAxisRaw
//没有渐变效果
屏幕坐标系,鼠标的坐标
mousePosition
//鼠标在屏幕上的坐标
Vector2
//是一个结构体,是值类型,要整体赋值。而不是类
//
//down
//left
//one
/right
//up
//zero
//Normalized
//把自身单位化
//Angle
//取得两个向量的夹角
//ClampMagnitude(Vector2 vector,float maxLength)
//把一个向量限定在maxLength之内
//Distance
//两个点的距离
//Lerp
//LerpUnClamp
//MoveTowards
//Reflect
Vector3
//Project
//做一个向量在另一个向量上的投影
//Reflect
//传入入射方向和法线
//Slerp(float a ,float b,float t)
//方向插值Lerp是当作点来插值
Random生成随机数
//InitState(int seed)
//传入的种子一样的化 ,随机数的序列都是一样的
其他方法生成随机数
//ColorHSV
//随机生成颜色
//value
//随机生成要给0,1之间的小数包括0,1
//.state获得InitState的状况
//rotation
//表示旋转
//insideUnitCircle
//在一个圆内的随机生成坐标
四元数,欧拉角
//Quaternion
//eulerAngeles
//一个Vector3(欧拉角),也可以将四元数转化为欧拉角
//rotation是一个四元数
//.Euler
//欧拉角转化为四元数
//.LookRotation(vector3 forward,vector up)
//返回一个四元数,方向为传入向量的方向
//Lerp faster than Slerp
//Slerp look worse if the rotations are far apart
//传入当前四元数和目标四元数和间隔
Rigidbody
//position
//比用Transform.position快
//MovePosition
//rotation
//比用Transform.rotation快
//MoveRotation
//AddForce
//速度慢慢增加
Camera类
//快速获取Camera的方法
//camera = Camera.main
//.ScreenPointToRay
//将屏幕上的点转化为射线
//Physics.Raycast(ray,out hit);
//hit为碰撞到的物体
//射线的起点在屏幕上,不是从摄像机上发出
通过Application获取datapath
//不同的平台上返回的datapath不一样
//StreamingAssets
//此文件内的不大包
//persistenDataPath
//temporaryCachePath
//临时目录
Application中其他常用的静态变量,静态方法
//companyName
//InstallMode
//何种模式下运行
//isEdtor
//是否在编辑器模式下运行
//isPlaying
//isFocus
//platform
//当前运行环境
//runInBackground
//Quit
人如何切换加载场景
//SceneManger
//.LoadScene
//Single销毁当前场景,Additive不销毁当前场景
//LoadSceneAsync
//异步加载,返回AsyncOperation
//SecneManager.LoadScene(SceneManager.GetActiveScene().name重新加载本关卡
OnLevelWasLoaded(int scenelevel){
level++
}
//sceneCount
//当前加载场景总数
//CreatScene
//创建场景
//GetActiveScene
//获取当前场景
//GetSceneByBuildIndex
//根据index获取场景
//SetActiveScene
//activeSceneChanged