C#常见概念与常用语法
本文介绍了一些关于C#的常见概念与常用语法。
C#脚本生命周期
- Awake:初始化。
- Enable:渲染启用时调用,初始化方法不能写在里面。
- Start:第一次Enable后调用。
- Update:每一帧调用一次。
- LateUpdate:update执行完lateupdate就会执行。
- FixedUpdate:类似定时器,定期执行,与机器性能帧数无关,仅和时间有关。默认0.02s。
- UnDisable:非激活状态调用。
- OnDestroy:销毁时调用。
Time
上一帧到下一帧的游戏时间Time.deltaTime。
时间缩放值Time.timeScale。
Application
游戏数据文件夹路径(只读,加密压缩)Applicants.dataPath。
持久化文件夹路径(可写)Applicants.persistentDataPath。
StreamingAssets文件夹路径(只读,不加密)Application.streamingAssetsPath。
临时文件夹Application.temporaryCachePath。
后台运行Application.runInBackground。
打开url Application.OpenURL。
退出游戏Application.Quit()。
场景
SceneManager.CreateScene()创建场景。
SceneManager.LoadScene(“场景名称(编号)”)加载场景;LoadSceneMode参数设置为Single时只加载当前场景,设置为Additive时叠加场景。
SceneManager.LoadSceneAsync()异步加载场景,当场景很大时加载速度较慢。
SceneManager.UnloadSceneAsync()卸载场景。
SceneManager.GetActiveScene()获取当前场景。
Scene.GetRootGameObjects()获取场景中的所有游戏物体。
异步
AsyncOperation作为异步加载场景SceneManager.LoadSceneAsync()的返回值,使用yield return返回一个协程IEnumerator,并使用StartCoroutine启动协程。
operation.progress可以查看加载进度,在UI制作时可以做进度条。
operation.allowSceneActivation可以控制场景是否跳转,设置为False不会自动跳转。
Transform
transform.position是世界坐标系里的位置。
transform.localPosition是相对父物体的位置。
transform.LookAt(点坐标)看向某个点。
transform.Rotate(轴, 旋转度数);transform.RotateAround(点,轴,旋转度数)。
transform.Translate()移动。
transform.parent.gameObject获取父物体。
transform.DetachChildren()解除所有子物体。
transform.GetChild(0)根据下标获取子物体;transform.Find(“子物体名称”)根据名称获得子物体。
SetParent()设置父物体。
键鼠操作
input.GetMouseButtonDown()按下鼠标;input.GetKeyDown(KeyCode)按下键盘。
input.GetMouseButton()按住鼠标;input.GetKey(KeyCode)按住键盘。
input.GetMouseButtonUP()松开鼠标;input.GetKeyUp(KeyCode)松开键盘。
触摸操作
判断触摸点数目使用Input.touchCount。判断触摸阶段,类似键鼠操作中的抬起按下,基于touch.phase。
if(Input.touchCount == 1) { |
虚拟轴
Input.GetAxis(“Horizontal”)表示水平虚拟轴,由ad或者左右控制,或者摇杆。
Input.GetAxis(“Vertical”)表示垂直虚拟轴,由ws或者前后控制,或者摇杆。
CharacterController.SimpleMove(向量)会朝着向量方向移动,向量dir设置为Vector3(horizontal, 0, vertical),可以完成简单角色方向控制。
碰撞检测
OnCollisionEnter监听发生碰撞;OnCollisionStay监听碰撞持续中;OnCollisionExit监听碰撞结束。
Collision类里包含了碰撞的信息,可以用于查看碰撞物体名称等。
触发
OnTriggerEnter监听触发发生;OnCollisionStay监听触发持续中;OnCollisionExit监听触发结束。
勾选是触发器选项后,不一样的地方在于,它不受物理影响,可以直接穿透而不会有碰撞体积,但同时可以检测到碰撞。
2024.8.29
很久没写,我决定重启我的blog,最近基本都在使用Unity和编写C#脚本,然后就是用Python搭模型调参数…