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++区别

posted @ 2023-07-29 10:30  峰绘の琴师  阅读(20)  评论(0编辑  收藏  举报