首页 > 其他分享 >Unity学习

Unity学习

时间:2023-07-29 10:46:31浏览次数:44  
标签:Log 物体 transform 学习 player Unity Debug Input

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

标签:Log,物体,transform,学习,player,Unity,Debug,Input
From: https://www.cnblogs.com/kidtic/p/17589388.html

相关文章

  • 学习IDA权威指南-交叉引用
    使用IDA工具可以直观的提现代码与数据之间的关系。交叉引用一般使用xref表示1-代码交叉引用p-调用流j-跳转流2-数据交叉引用0-代表偏移地址引用r-读取引用w-写入引用3-交叉引用列表鼠标悬停,会出现引用的地方快捷键Ctrl+X函数列表......
  • python学习难点及举例
    在Python的高级学习中,可能会遇到以下几个难点:迭代器和生成器:迭代器和生成器是Python中强大的概念,但在理解和使用它们时可能会有一些困难。迭代器是一种可以遍历数据集合的对象,而生成器是一种特殊的迭代器,可以按需生成值,而不是一次性生成所有值。#迭代器示例my_list=[1,2,3]m......
  • cmake学习-3
    每天起来的吐槽又是起来要学习的屑大学生,昨天看了看弄出来的效果,我超,弄出来库文件了,帅啊!最后创建的project对应的是sln文件的名称,其他那些library的名称对应的是库文件的名称,效果跟下面差不多。挺帅的,确实nb,觉得自己这点垃圾技能也能做点什么好玩的了。确实是帅的。花了十几......
  • Unity Recorder
    UnityRecorder录制高清视频由于经常开发过程需要经常录制高清Unity视频点击StartRecording可以直接录制运行的Game窗口默认比例就是1920*1080,不需要最大化运行可以无损录制,体积过大一、使用Recorder视频录制参数详解二、录制无损视频后压缩体积无损录制设置......
  • 第十八节 小组学习
    AT_agc022_a题解洛谷链接&Atcoder链接本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。题目简述给定字符串\(S\),仅包含互不相同的小写字母,你需要找到仅包含互不相同的小写字母的字符串中,第一个字典序比它大的字符串,如果找不到输出\(-1\)。(\(|S|\le26......
  • ugui学习 - 自己实现InputField光标的显示,闪烁,左右移动
    最终效果 代码usingSystem.Collections;usingUnityEngine;usingUnityEngine.UI;[DisallowMultipleComponent][RequireComponent(typeof(CanvasRenderer))][RequireComponent(typeof(RectTransform))]publicclassMyInputField_Caret:MonoBehaviour,ICanvasEle......
  • 线程池学习
    具体文章见: Java线程池实现原理及其在美团业务中的实践线程池好处降低资源消耗提高响应速度提高线程的可管理性提供更多更强大的功能线程池解决的问题频繁申请、销毁资源和调度资源,将地阿莱额外的消耗,可能会非常巨大。对资源无限申请缺少抑制手段,易引发系统资源耗尽的......
  • SpringBoot学习---第五篇:动态数据源(多数据源自动切换)
    目录一、应用场景二、准备工作2.1 创建数据表2.2添加依赖2.3生成bean、dao、mapper三、动态数据源3.1 配置文件application.properties3.2动态数据源核心代码3.3 启动类添加注解四、使用方法4.1Controller4.2Service五、测试六、Springboot2.0动态多数据源切换一、应用......
  • 程序员进阶必备,这份Android架构师进阶学习资料全家桶助你提升无忧
    走技术这条路的程序员进阶需要具备什么条件呢?大概总结起来有两点:1.扎实的基础底层功底(四大组件、布局使用、多线程、动画…)2.技术的深度和广度(自定义View、性能优化、Flutter、热修复、插件化…)3.同时,了解和学习常用的开源库也十分重要,常用的开源库主要包括图片加载、网络请求、......
  • 基于LSTM深度学习网络的时间序列预测matlab仿真
    1.算法理论概述       时间序列预测是一类重要的预测问题,在很多领域都有着广泛的应用,如金融、交通、气象等。然而,由于时间序列数据本身具有时序性和相关性,因此预测难度较大。传统的时间序列预测方法大多采用统计学方法,如ARIMA模型、指数平滑法等,但这些方法在处理非线性、......