脚本入门
//单纯的控制台输出命令,下面两种语法是一样的作用
Debug.Log("Hello world");
print("Hello world,too");
// Debug.Log的一个变体,是用来记录一个错误消息到控制台。如果你想知道在那个对象上发生了错误,这是非常有用的。
Debug.logError("memberVariable must be set to point to a Transform.", transform);
OnUpdate刷新。
LateUpdate Update之后被调用。
FixedUpdate 基于物理行为,每个物理时间被调用一次。
OnGUI 渲染处理GUI事件。
Reset 重置默认行为时被调用。
OnDisable 当前对象不可用或非激活状态时被调用。
Ondestory 被销毁时被调用。
OnTriggerEnter进入触发器
OnTriggerExit 退出触发器
OnTriggerStay 逗留触发器
OnCollisionEnter进入碰撞
OnCollisionExit 退出碰撞
OnCollisionStay 逗留碰撞
加载场景
1、同步加载:读取场景后立即切换,加载一个新的场景,当前场景不会被销毁
Application.LoadLevel(1)已弃用改成EditorSceneManager.LoadScene(1);
2、异步加载:进入新场景销毁之前的场景
Application.LoadLevelAsync();
3、场景比较大的时候,不管是同步加载还是异步加载都会产生长时间的卡顿,这样极大的影响客户体验。这个时候我们建立一个中间场景,而这个中间场景可以显示出我们真正需要加载场景的进度以及相关的原画,预览视频,音乐等。这样不会让玩家在等待的时间枯燥乏味。其中核心的方法就是
AsyncOperation asyncoperation = Application.LoadLevelAsync("");
asyncoperation.progress //这个属性就是需要加载场景的进度百分比 取值是 0.0f-1.0f 刚好可以配合UI显示。 场景加载好之后设置为手动跳转
asyncoperation.allowSceneActivation = false;
直接设置为False就可以啦。这样当你监听鼠标或者键盘的时候再把这个属性改为true就可以进行跳转了。
Transform基本移动函数:
1.指定方向移动:
float TranslateSpeed = 10f;//移动速度
transform.Translate(Vector3.forward *TranslateSpeed);//Vector3.forward 表示“向前”
2.全方向移动:
float xSpeed = -5f;//x轴移动速度移动速度
float zSpeed = 10f;//z轴移动速度移动速度
transform.Translate(xSpeed,0,zSpeed);//向x轴移动xSpeed,同时想z轴移动zSpeed,y轴不动
3.重置坐标:
float xPostion = -5f;//x轴坐标
float zPostion = 10f;//z轴坐标
transform.position = Vector3(xPostion,0,zPostion); //直接将当前物体移动到x轴为xPostion,y轴为0,z轴为zPostion的三维空间位置。
延迟执行某方法
//重复调用
InvokeRepeating("LaunchProjectile", 1,5);//1秒后调用LaunchProjectile () 函数,之后每5秒调用一次
//调用一次
Invoke("LaunchProjectile", 5);//5秒后调用LaunchProjectile () 函数
//取消调用
CancelInvoke("LaunchProjectile");
协程函数
yield;暂停执行,等待条件满足时从当前位置继续执行
yield return null;程序在下一帧中从当前位置继续执行
yield return new WaitForSeconds(n):程序等待n秒后从当前位置继续执行
yield new WaitForEndOfFrame():在所有的渲染以及GUI程序执行完成后从当前位置继续执行
yield new WaitForFixedUpdate():所有脚本中的FixedUpdate()函数都被执行后从当前位置继续执行
yield return WWW:等待一个网络请求完成后从当前位置继续执行
yield return StartCoroutine():等待一个协程执行完成后从当前位置继续执行
//WaitAndPrint在Start函数内执行,可以视同于它与Start函数同步执行.
void Start() {
StartCoroutine(WaitAndPrint(2.0F));//StartCoroutine("WaitAndPrint", 2.0F);同样可以使用
}
IEnumerator WaitAndPrint(float waitTime) {
yield return new WaitForSeconds(waitTime);
}
//执行完成后往下执行
IEnumerator Start() {
yield return StartCoroutine(WaitAndPrint(2.0F));
}
IEnumerator WaitAndPrint(float waitTime) {
yield return new WaitForSeconds(3f);
}