Unity学习
1 常用快捷键
alt+鼠标左键:以某个物体为中心旋转视角
鼠标左键+w/s/a/d:视角移动
F:相机聚焦物体
Q/W/E/R/T/Y:左上角工具栏工具
2 文件资源
2.1 工程目录
- Assets目录:主要存放资源文件,该文件中的内容会在unity项目栏中显示。
2.2 文件类型
- FBX文件:3D模型文件,其中包括了材质球和模型文件
- 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
标签:Log,物体,transform,学习,player,Unity,Debug,Input From: https://www.cnblogs.com/kidtic/p/17589388.html