Unity学习

Unity学习

1 常用快捷键

alt+鼠标左键:以某个物体为中心旋转视角

鼠标左键+w/s/a/d:视角移动

F:相机聚焦物体

Q/W/E/R/T/Y:左上角工具栏工具

2 文件资源

2.1 工程目录

  1. Assets目录:主要存放资源文件,该文件中的内容会在unity项目栏中显示。

2.2 文件类型

  1. FBX文件:3D模型文件,其中包括了材质球和模型文件
  2. mat文件:材质球

3 专业名词

3.1 灯光

烘焙
将指定物体的目前所接受的灯光固化下来。固化下来后即便删除灯光依旧能获得打光效果,此方法可以有效减少计算资源消耗。

3.2 渲染器纹理

让游戏平面或物体实时播放想要的纹理,这个源可以是视频、相机等。

3.3 物理材质

物理材质一般通过自己在文件夹下创建物理材质,并且挂载到碰撞网络上完成。可以设置摩擦系数、弹力等表面物理参数。

4 C#脚本

4.1 输入

//获取当前的游戏对象 GameObject go = this.gameObject;
//获取当前游戏对象位置 Debug.Log(gameObject.transform.position); Debug.Log(transform.position);
//*****获取其他组件*****// Rigidbody nr = GetComponent<Rigidbody>(); //获取当前物体的一个组件 GetComponentInChildren<Rigidbody>(); //获取当前物体子物体身上的某个组件 GetComponentInParent<Rigidbody>(); //获取当前物体父物体身上的某个组件
//*****获取其他物体*****// GameObject.Find("Text"); //通过名字获取其他物体 GameObject.FindWithTag("moveobj"); //通过标签来获取游戏物体(多标签则返回最后创建的那一个)
//*****获取当前场景*****// Scene tempScene = SceneManager.GetActiveScene();
//*****时间相关*****// Debug.Log(Time.time); //游戏开始到现在的时间 Debug.Log(Time.timeScale); //游戏时间缩放值 Debug.Log(Time.fixDeltaTime); //固定时间间隔 Debug.Log(Time.deltaTime); //上一帧到这一帧的时间间隔(在Update里用的多)
//*****位姿信息*****// Debug.Log(transform.position); Debug.Log(transform.localPosition); //相对于父物体的位置 Debug.Log(transform.rotation); Debug.Log(transform.localRotation); //相对于父物体的姿态 Debug.Log(transform.eulerAngles); Debug.Log(transform.localEulerAngles); //相对于父物体的姿态 Debug.Log(transform.forward); //轴向量 Debug.Log(transform.right); //轴向量 Debug.Log(transform.up); //轴向量
//*****父子物体关系*****// Debug.Log(transform.childCount); //获取子物体个数 transform.DetachChildren(); //解除与父物体之间的关系 Transform trans = transform.Find("Child"); //查找子物体 bool res = trans.IsChildOf(transform); //判断物体是不是另外一个物体的子物体
//*******键鼠操作******// //鼠标的点击 0左键 1右键 2滚轮 if(Input.GetMouseButtonDown(0)){ //pass } //持续按下鼠标 if(Input.GetMouseButton(0)){ Debug.Log("持续按下"); } if(Input.GetKeyDown(KeyCode.A)){ Debug.Log("按下A"); } if(Input.GetKey(KeyCode.A)){ Debug.Log("持续按下A"); } float xVer = Input.GetAxis("Horizontal"); float yVer = Input.GetAxis("Vertical");
//*******碰撞与触发监听******// //监听发生碰撞 private void OnCollisionEnter(Collision other) { } //持续碰撞中 private void OnCollisionStay(Collision other) { } //结束碰撞 private void OnCollisionExit(Collision other) { } //====触发器与碰撞一样,只需要吧组件的“是触发器”勾上就行,这是物体可以被穿过 //触发器开始触发 private void OnTriggerEnter(Collider other) { } //触发器持续触发中 private void OnTriggerStay(Collider other) { } //触发器结束触发 private void OnTriggerExit(Collider other) { }
//*******射线******// Ray ray = new Ray(Vector3.zero,Vector3.up); //从0点向上发射的一条射线 ray = Camera.main.ScreenPointToRay(Input.mousePosition); //从屏幕上按下的点发射一条射线 RaycastHit hit; //声明一个碰撞信息类 bool res = Physics.Raycast(ray,out hit); //判断射线是否碰撞到了物体(有碰撞网络的物体) if(res==true){ Debug.Log(hit.point); } //多检测 RaycastHit[] hits = Physics.RaycastAll(ray);

4.2 输出

//*****通过预制件实例化新物体*****// public GameObject newObj; //脚本成员函数,从资源表里托进来。 Instantiate(newObj); //在场景中实例化新物体 Instantiate(newObj,transform); //实例化到父物体中 。。。 还有很多,具体自己看定义。
//*****调试手段*****// Debug.Log("log"); //在控制台打印 Debug.DrawRay(transform.position,dir); //在场景窗口画线
//*****销毁物体*****// Destroy(newObj);
//*****文件保存路径*****// Debug.Log(Application.persistentDataPath); //游戏存档保存在这 Debug.Log(Application.dataPath); //只读文件,放在游戏目录,打包后会加密压缩 Debug.Log(Application.streamingAssetsPath); //只读文件,放在游戏目录,打包不会加密,用于读取配置文件
//*****场景*****// SceneManager.LoadScene(1); //加载场景,场景要先放在build项目中,才能生成索引号 SceneManager.LoadScene(1,LoadSceneMode.Additive);//也是加载场景,只不过是叠加场景(很重要) SceneManager.CreateScene("new scenes"); //创建新场景 AsyncOperation opt = SceneManager.LoadSceneAsync(1);//异步加载,opt在之后会实时更新(其实没必要放在协程中,但推荐放协程中)
//******处理姿态*****// transform.LookAt(Vector3.zero); //看向000 transform.Rotate(Vector3.up,1); //自旋转 transform.RotateAround(Vector3.zero,Vector3.up,1); //绕某个物体以什么轴向旋转 transform.Translate(transform.forward*0.1f); //移动 transform.rotation = Quaternion.LookRotation(dir); //看向dir这个方向,dir是一个向量箭头
//*****播放音乐*****// public AudioClip music; //音频文件 public AudioClip se; //音频片段 AudioSource player; player = GetComponent<AudioSource>(); player.clip = music; //赋值音频文件。 player.loop = true; //设置循环 player.volume = 0.5f; //设置音量 player.Play(); //开始播放 player.Pause(); //暂停 //播放一遍音频片段,只播放一次 player.PlayOneShot(se);
//*****角色控制*****// player = GetComponent<CharacterController>(); float horiz = Input.GetAxis("Horizontal"); float vert = Input.GetAxis("Vertical"); Vector3 dir = new Vector3(horiz,0,vert); //通过按键得到移动方向 player.SimpleMove(dir); //受重力的移动
//*****动画触发*****// GetComponent<Animator>().SetTrigger("pickup");

4.3 处理

4.3.1 普通函数

4.3.2 协程

//******异步协程******// //先执行Func函数,他会返回一个迭代器。 //StartCoroutine会开启一个协程,这个协程会一步一步的去执行next, //每执行完一步next都会让出资源执行其他程序,完了之后在继续执行next void Start() { StartCoroutine(Func()); } //Func函数会返回一个迭代器。每次调用next都会执行到下一个yield return。 IEnumerator Func() { yield return 1; yield return 2; yield return 3; }

5 动画

动画基本采用动画控制器来做,作为程序员,不需要掌握动画具体是如何制作的,但是一定要掌握动画是如何控制的。动画控制器(Animator)具体可以参考视频:

https://www.bilibili.com/video/BV1gQ4y1e7SS?p=47&vd_source=51cd5a9dcf49bbe70fee22e012d2376b

C#和C++区别


__EOF__

本文作者峰绘の琴师
本文链接https://www.cnblogs.com/kidtic/p/17589388.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   峰绘の琴师  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示