Unity中的脚本类均继承自MonoBehaviour
Time.deltaTime
- 游戏中一帧的时间(秒)
- 假如1秒运行60帧,则一帧为1/60秒;假如游戏运行时卡顿,帧数变为30帧,则一帧为1/30秒
Time.timeScale
- 时间伸缩,类似于视频中的倍速播放
- 当timeScale=1时,时间为正常倍速。当timeScale=0,时间静止,可以用于暂停游戏。
- 假如timeScale=0.5,则原来需要1秒来执行完的动画,特效等,现在需要1/timeScale=2秒来执行完成
- timeScale不会影响Update()和LateUpdate(),只会影响FixedUpdate()
Time.time
- 游戏开始运行到现在经历的时间(秒),该变量会受到时间伸缩的影响
Time.realtimeSinceStartup
- 游戏开始运行到现在实际经历的时间(秒),该变量不受时间伸缩的影响
Time.timeSinceLevelLoad
- 关卡加载完成到现在的时间(秒)
Time.fixedDeltaTime
- 固定的时间间隔(秒)
Time.maximumDeltaTime
- 游戏开始到现在最耗时的一帧(秒),可用于游戏优化
Time.smoothDeltaTime
- 游戏开始到现在平均一帧的时间
Time.frameCount
- 游戏的帧计数
void Awake()
- 脚本初始化时被调用
void Start()
- 脚本被绑定到物体上时调用
void Update()
- 每一帧的时间调用一次,会因为电脑卡顿而导致调用间隔变大
void LateUpdate()
- 在Update()执行完后调用
void FixedUpdate()
- 固定间隔时间调用一次,不会随着电脑性能变化而变化
transform.position
- 游戏物体在世界坐标系中的位置
transform.localPosition
- 游戏物体相对父节点的位置
transform.eulerAngles
- 游戏物体在世界坐标系中的旋转(欧拉角)
transform.localEulerAngles
- 游戏物体相对父节点的旋转(欧拉角)
transform.rotation
- 游戏物体在世界坐标系中的旋转(四元数)
transform.localRotation
- 游戏物体相对父节点的旋转(四元数)
transform.localScale
- 游戏物体自身的缩放
transform.up
- 物体的上方向量
transform.forward
- 物体的正前方向量
transform.parent
- 父节点物体的transform
transform.localToWorldMatrix
- 本地坐标系变换到世界坐标系的矩阵
transform.worldToLocalMatrix
- 世界坐标系变换到本地坐标系的矩阵
transform.root
- 层级关系中的根节点的transform组件
transform.childCount
- 子孙节点的数量
transform.lossyScale
- 全局缩放比例(只读)
transform.Translate(Vector3 translation , Space relativeTo = Space.Self)
- 按指定的方向移动一个物体
- 参数1:位移的向量;参数2:参照的坐标系(Space.Self,Space.World)
transform.Rotate(Vector3 eulers , Space relativeTo = Space.Self)
- 按指定的欧拉角旋转物体
- 参数1:欧拉角;参数2:参照的坐标系(Space.Self,Space.World)
transform.RotateAround(Vector3 point, Vector3 axis, float angle)
- 一个物体围绕另一个物体旋转
- 参数1:被围绕物体的位置坐标;参数2:轴向量;参数3:旋转的角度
transform.LookAt(Vector3 position)
- 让物体朝向某一个位置
- 参数1:朝向的位置坐标
transform.TransformDirection(Vector3 direction)
- 把一个方向从局部坐标系变换到世界坐标系
- 参数1:方向向量
transform.InverseTransformDirection(Vector3 direction)
- 把一个方向从世界坐标系变换到局部坐标系
- 参数1:方向向量
transform.TransformPoint(Vector3 position)
- 把一个点从局部坐标系变换到世界坐标系
transform.InverseTransformPoint(Vector3 position)
- 把一个点从世界坐标系变换到局部坐标系
transform.DetachChildren()
- 和所有子物体解除父子关系
transform.Find(string n)
- 按名字来查找子物体,没有找到就返回null
transform.IsChildOf(Transform parent)
- 判断自身是否是另一个对象的子物体
Quaternion.LookRotation(Vector3 forward, Vector3 upwards = Vector3.up)
- 使游戏物体转向
- 参数1:物体转向的向量;参数2:向上的方向向量
Vector3.MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta)
- 从当前地点移动到目标点,且每次移动的最大长度不超过maxDistanceDelta
- 参数1:当前的位置;参数2:目标位置;参数3:每次移动时的最大长度
- 返回值为current加上maxDistanceDelta后的位置,如果超过了target,就返回target
Vector3.Lerp(Vector3 a, Vector3 b, float t)
- 根据t计算a到b之间的差值,t的取值范围为[0,1]
- 当t=0时,返回值为a;当t=1时,返回值为b
Vector3.Distance(Vector3 a, Vector3 b)
- 计算两个位置之间的距离,返回值类型为float
void OnTriggerEnter(Collider c)
- 当有物体进入触发器时调用
void OnTriggerExit(Collider c)
- 当有物体离开触发器时调用
void OnTriggerStay(Collider c)
- 当有物体停留在触发器内时调用
void OnCollisionEnter(Collision c)
- 当有物体进入碰撞器时调用
void OnCollisionExit(Collision c)
- 当有物体离开碰撞器时调用
void OnCollisionStay(Collision c)
- 当有物体停留在碰撞器内时调用
getComponent<Type>()
- 获取游戏物体上type类型的控件
getComponents<Type>()
- 获取游戏物体上所有的type类型的控件,返回Component[]
GetComponentInChildren<Type>()
- 采用深度优先搜索,返回第一个遍历到的游戏物体和它子物体上的Type类型的控件
GetComponentsInChildren<Type>()
- 采用深度优先搜索,遍历游戏物体和它子物体上所有的Type类型的控件,返回Component[]
GameObject.Find("GameObject/obj")
- 根据名字或路径来查找物体对象
GameObject.FindWithTag("player")
- 根据标签tag来查找物体对象
GameObject.FindGameObjectsWithTag("player")
- 查找所有使用该标签tag的对象,返回GameObject[]
Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask, QueryTriggerInteraction queryTriggerInteraction)
- 使游戏物体发出射线,来检测碰撞体
- 参数1:射线的初始位置向量;参数2:射线的方向
- 参数3:包含被检测到的物体的信息;参数4:射线的最远射程;
- 参数5:需要检测的图层;参数6:是否检测触发器
layerMask = 1<<n:检测第n层(0层为Default层)
layerMask = ~1<<n:检测除第n层之外的图层
LayerMask.GetMask("Player", "Default"):检测Player层和Default层
~LayerMask.GetMask("Player", "Default"):检测除Player层和Default层之外的图层
QueryTriggerInteraction.Collider:检测开启触发器的碰撞体
QueryTriggerInteraction.Ignore:不检测开启触发器的碰撞体
QueryTriggerInteraction.UseGlobal:isTrigger钩选时检测,isTrigger不钩选时不检测
协程的创建和使用
void Start(){
//
StartCoroutine("Fun");
//
}
IEnumerator Fun(){
//
yield return new WaitForSeconds(2.0f);
//
}
- startCoroutine("fun"):开启协程,并转到Fun函数
- yield return:返回到Start()函数并往下执行
- new WaitForSeconds(2.0f):等待两秒后从其他函数再跳转到Fun函数继续执行(其他函数等待,不往下执行)
- 协程属于单线程,来模拟多线程
WaitForFixedUpdate()
- 在FixedUpdate()执行完后返回到协程
WaitForEndOfFrame()
- 在一帧结束后返回到协程
WaitForSecondsRealtime(float time)
- 等待现实时间time秒后返回到协程,不受时间缩放的影响
WaitUntil(bool fun())
- 直到fun()函数返回值为true时,才返回到协程
WaitWhile(bool fun())
- 与WaitUntil相反,直到fun()函数返回值为false时,才返回到协程
协程的停止
void Start(){
//第一种写法
StartCoroutine("Fun");
StopCoroutine("Fun");
//第二种写法
IEnumerator ie = Fun();
StartCoroutine(ie);
StopCoroutine(ie);
//第三种写法
Coroutine coroutine=StartCoroutine(Fun());
StopCoroutine(coroutine);
//关闭所有协程
StopAllCoroutines();
}
IEnumerator Fun(){
//
yield return new WaitForSeconds(2.0f);
//
}
- 调用stopCoroutine时,不能直接传入Fun(),要按以上三种写法来停止协程。
委托的创建和使用
public class Player : MonoBehaviour{
public delegate void PlayMotify(); //创建委托的固定写法
public event PlayMotify OnPlay; //定义委托的一个事件
void Play(){
if(this.OnPlay!=null){ //判断是否有其他类接收该事件
this.OnPlay(); //发送该事件
}
}
}
委托事件的接收
public class Game : MonoBehaviour{
public Player player; //创建Player对象
void Start(){
this.player.OnPlay+=Player_OnPlay; //监听player下委托的事件,并调用Player_OnPlay函数
}
void Player_OnPlay(){
//触发事件后,做自己的处理
}
}
Unity自带的委托调用
using UnityEngine.Events;
public class Player : MonoBehaviour{
public UnityAction<int> OnScore; //泛型为OnScore函数参数
void Play(){
if(this.OnScore!=null){ //判断是否有其他类接收该事件
this.OnScore(1); //发送该事件
}
}
}
public class Game : MonoBehaviour{
public Player player; //创建Player对象
void Start(){
this.player.OnScore=GetScore; //监听player下委托的事件,并调用GetScore函数
}
void GetScore(int score){
//触发事件后,做自己的处理
}
}
Invoke(string methodName , float time)
- 用于延迟执行指定函数
- 参数1:要执行的函数名字;参数2:延迟time秒后执行
InvokeRepeating(string methodName , float time , float repeatRate)
- 用于重复执行指定函数(Repeating是重复的意思)
- 参数1:要执行的函数名字;参数2:延迟time秒后执行;参数3:每repeatRate秒执行一次指定函数
- 执行顺序:先准备要执行的函数methodName,等待time秒执行methodName,之后每repeatRate秒执行一次该函数
Instantiate(T original , Vector3 position , Quaternion rotation)
- 用于克隆游戏物体,返回值为该克隆体
- 参数1:需要被克隆的对象;参数2:克隆后的位置坐标:;参数3:克隆后的旋转坐标
3D游戏物体的运动控制脚本
void Update(){
//竖直轴 -1,0,1
float vertical = Input.GetAxis("Vertical");
//水平轴 -1,0,1
float horizontal = Input.GetAxis("Horizontal");
//方向
Vector3 dir = new Vector3(horizontal,0,vertical);
if(dir != Vector3.zero){
//先转向
transform.rotation=Quaternion.LookRotation(dir);
//后行走
transform.Translate(Vector3.forward * 2 * Time.deltatime);
}
}
2D游戏物体的运动控制脚本
void Update(){
//水平轴 -1,0,1
float horizontal = Input.GetAxis("Horizontal");
//往左(-1)或往右(1)
if(horizontal!=0){
//将x轴的缩放取反,来实现人物转向
transform.localScale=new Vector3(horizontal>0?1:-1, 1, 1);
//移动
transform.Translate(Vector2.right * horizontal * Time.deltaTime);
}
}
导航寻路脚本
//导航
private NavMeshAgent agent;
//玩家
private Transform player;
void Start(){
agent=GetComponent<NavMeshAgent>();
player=GameObject.FindWithTag("player").transform;
}
void Update(){
float dis = Vector3.Distance(transform.position,player.position);
if(dis>1.5f){ //与玩家距离大于1.5时,自动寻路到玩家
agent.isStopped=false;
agent.SetDestination(player.position);
}else{
agent.isStopped=true;
}
}
相机跟随目标脚本
//跟随目标
private Transform player;
//向量:摄像机的位置减去目标位置
private Vector3 dir;
void Start(){
player = GameObject.FindWithTag("player").transform;
dir = transform.position-player.position; //保证该差值不变,实现目标的跟踪
}
void Update(){
transform.position = player.position + dir; //更新摄像机的位置
}
AudioSource控制脚本
public class AudioManager:MonoBehaviour{
//单例
public static AudioManager instance;
//背景音乐
public AudioSource musicPlayer;
//音效音乐
public AudioSource soundPlayer;
void Start(){
instance=this;
}
//播放背景音乐
public void PlayMusic(string name){
if(musicPlayer.isPlaying==false){
//播放音乐片段,从资源文件中通过名字来加载音乐文件
AudioClip clip=Resources.Load<AudioClip>(name);
//换碟
musicPlayer.clip=clip;
//播放
musicPlayer.play();
}
}
//停止播放
public void StopMusic(){
musicPlayer.stop();
}
//播放音效
public void PlaySound(string name){
//播放音乐片段,从资源文件中通过名字来加载音乐文件
AudioClip clip=Resources.Load<AudioClip>(name);
//播放一次
soundPlayer.PlayOneShot(clip);
}
}
Canvas
- Render Mode:渲染模式
- Screen Space - Overlay:UI显示在最前方,遮挡其它3D物体
- Screen Space -Camera:摄像机包含整个UI界面,和3D物体有层次关系
- World Space:Canvas完全变为一个3D物体,可自由调节Canvas
Canvas Scaler
- UI Scale Mode:UI缩放模式
- Constant Pixel Size:UI以恒定的像素大小显示
- Scale With Screen Size:UI按屏幕的大小自动缩放
- Constant Physical Size:UI以恒定的物理尺寸显示
- Scale With Screen Size:
- Reference Resolution:参考分辨率,参照UI依据的分辨率,随着分辨率的变化而自动缩放
Anchor Presets
- 图片相对于锚点的位置是固定的。假设图片在右上角,需要将锚点选到右上方,从而达到屏幕适配的效果
Image
- Image Type:图片样式
- Simple:简单模式,图片正常拉伸
- Slice:切分样式,可以将图片切分成多块
- Tiled:平铺样式,图片拉伸时,会有相同的图片显示在多余的区域
- Filled:填充样式,可以按特定的填充方式来显示图片
组件中的拖拽条
public class Game:MonoBehaviour{
[Range(0,1)]
public float value;
}
- 在组件面板界面中显示名字为value,范围为[0,1]的拖拽条
持续学习更新......