Unity学习part1

课程为b站【Unity教程】零基础带你从小白到超神

1、脚本执行顺序

unity的脚本执行顺序不像blender的修改器那样按顺序执行,而是系统默认给配置一个值,值越小,执行顺序越靠前(注意,这个顺序是全局生效的)

2、初始化内容

脚本要初始化的内容放在awake函数中,onenable是可以反复调用的。unity中执行顺序是先调用所有脚本的awake完后,在按脚本执行顺序调用其他脚本中的onenable等函数

3、标签与图层 

图层用于碰撞检测,例如将一组物体图层设置为CHARACTER,这样可以让相机在剔除遮罩时,选择CHARACTER图层不进行拍摄,使物体在玩家眼中隐形。可以理解为:标签是开发者给物体分组便于理解的,例如将物体分为敌人,玩家等;而图层是显示分类,给相机使用的

4、预设体

prefab是预设体资产。如果物体变蓝,说明它是与某个预设体相关。物体可以拖到项目栏中生成预设体资产。预设体资产与游戏中物体相当于类与实例的关系,但游戏资产自行更改数值之后,预设体资产的改动就不会影响到游戏体。物体上修改了并且没有将修改应用到预制体上,预制体无法对对应的参数进行修改,即关于此参数,预制体与游戏物体脱钩。

如果需要游戏资产的更改能够影响到预设体,则需要通过打开按钮进行修改(保证游戏物体与预制体参数的关联)

或者通过应用到预制件来进行修改(保证游戏物体与预制体参数的关联)

游戏物体添加组件时,组件会显示一个+号,代表预制体资产里没有。可以通过感叹号右键或者覆盖按钮来应用到预制体组件

 预制体变体与预制体资产之间才是继承关系,即预制体修改,预制体变体随之修改。而预制体变体修改,预制体不会变化。并且预制体变体和预制件之间不存在应用关系

5、vector3

向量vector3可以代表向量、坐标、缩放、旋转

6、四元数与欧拉角的转换

        Vector3 rotate = new Vector3(0,30,0);Quaternion quaternion = Quaternion.identity;// 欧拉角转换为四元数quaternion = Quaternion.Euler(rotate);//四元数转换为欧拉角rotate = quaternion.eulerAngles;//看向一个物体quaternion = Quaternion.LookRotation(rotate);

7、DEBUG方法

打印日志

Debug.LogWarning("");
Debug.Log("");
Debug.LogError("");

画一条线

// (起点,终点,颜色)
Debug.DrawLine(Vector3.zero,Vector3.one);

画一条射线,并区分线与射线的区别

8、物体的激活状态

public class test2 : MonoBehaviour
{public GameObject cube2;// Start is called before the first frame updatevoid Start(){//立方体的名称Debug.Log(cube2.name);//当前真正的激活状态Debug.Log(cube2.activeInHierarchy);//当前自身激活状态Debug.Log(cube2.activeSelf);}// Update is called once per framevoid Update(){}
}

public class test2 : MonoBehaviour
{public GameObject cube2;//获取预设体public GameObject preFab;// Start is called before the first frame updatevoid Start(){//立方体的名称Debug.Log(cube2.name);//当前真正的激活状态Debug.Log(cube2.activeInHierarchy);//当前自身激活状态Debug.Log(cube2.activeSelf);//获取transform组件Transform trans = this.transform;Debug.Log(transform.position);//获取其他组件BoxCollider bc = GetComponent<BoxCollider>();//获取当前物体子物体身上的某个组件GetComponentInChildren<CapsuleCollider>();//获取当前物体父物体身上的某个组件GetComponentInParent<BoxCollider>();//给当前物体添加一个组件gameObject.AddComponent<AudioSource>();//给特定物体添加组件cube2.AddComponent<AudioSource>();//通过游戏物体的名称获取游戏物体GameObject test = GameObject.Find("Test");Debug.Log(test.name);Debug.Log("11111");//通过游戏标签获取游戏物体GameObject[] test2 = GameObject.FindGameObjectsWithTag("Enemy");// 设置激活状态test2[0].SetActive(false);Debug.Log(test2[0].name);//通过预设体资产来实例化一个物体Instantiate(preFab);//生成的游戏物体可以被当成当前物体的子物体Instantiate(preFab, this.transform);//实例化一个物体并放置在固定位置并作旋转//GameObject go =Instantiate(preFab,Vector3.zero, Quaternion.identity);//销毁//Destroy(go);}// Update is called once per framevoid Update(){}
}

9、时间类

public class TimeTest : MonoBehaviour
{float timer = 0;// Start is called before the first frame updatevoid Start(){//游戏开始到现在所花的时间Debug.Log(Time.time);//时间缩放值 游戏的加速减速暂停等功能Debug.Log(Time.timeScale);//固定时间间隔 与FixUpdate()函数相关Debug.Log(Time.fixedDeltaTime);//上一帧到这一帧所用的游戏时间Debug.Log(Time.deltaTime);}//60帧 1/60 120帧 1/120// Update is called once per framevoid Update(){//相当于一个计时器,将每一帧帧运行时间相加.作用-->旅行者,请在3秒内开启宝箱timer = timer + Time.deltaTime;//上一帧到这一帧所用的游戏时间,可用来帧率测试//Debug.Log(Time.deltaTime);//如果大于十秒if (timer > 3){Debug.Log("> 3");}}
}

10、Application类的常用属性方法

public class ApplicationTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//游戏数据文件夹路径(只读,加密压缩)Debug.Log(Application.dataPath);//持久化文件夹路径,对应不同系统(MAC,WINDOWS,LINUX)。游戏存档存放位置Debug.Log(Application.persistentDataPath);//StreamingAssets文件夹路径,需手动建立该文件夹。(只读,不加密,放游戏的配置文件或一些不需要加密的二进制文件,所有人可看)Debug.Log(Application.streamingAssetsPath);//临时文件夹Debug.Log(Application.temporaryCachePath);//控制是否在后台运行Debug.Log(Application.runInBackground);//打开urlApplication.OpenURL("https://www.bilibili.com/");//退出游戏Application.Quit();}// Update is called once per framevoid Update(){}
}

垃圾window还是默认我工程项目放在appdata下,得想个法子改一下,不然c盘逐渐增加 

11、加载场景(同步)

public class SceneTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//两个类 场景类、场景管理类// SceneManager.LoadScene(1);//通过索引//SceneManager.LoadScene("MyScene"); //通过名称//获取当前场景Scene scene = SceneManager.GetActiveScene();//场景名称Debug.Log(scene.name);//场景是否已经被加载Debug.Log(scene.isLoaded);//场景路径Debug.Log(scene.path);//场景索引Debug.Log(scene.buildIndex);//获取场景中所有的根游戏物体GameObject[] objects = scene.GetRootGameObjects();Debug.Log(objects.Length);//场景管理类//当前加载的活动场景数量Debug.Log(SceneManager.sceneCount);//创建新场景,场景同一个时间并不是只能存在一个 是可以同时存在的,可以用于时空关卡切换,关卡叠加Scene scene1 = SceneManager.CreateScene("newScene");Debug.Log("创建场景");//已加载场景个数Debug.Log(SceneManager.sceneCount);//卸载场景SceneManager.UnloadSceneAsync(scene1);Debug.Log("卸载场景");Debug.Log(SceneManager.sceneCount);//加载场景//SceneManager.LoadScene("MyScene",LoadSceneMode.Single); //替换形式加载SceneManager.LoadScene("MyScene", LoadSceneMode.Additive);//加载出的场景与原本场景融合在一起。场景大的会可能会造成卡顿}// Update is called once per framevoid Update(){}
}

12、加载场景(异步)

异步 c#通过多线程实现的;而unity还提供了协程的方式来实现异步

public class AsyncTest : MonoBehaviour
{AsyncOperation op1;// Start is called before the first frame updatevoid Start(){//协程需要使用StartCoroutine方法StartCoroutine(loadScene());Debug.Log("加载完成");}//携程方法用来异步加载场景IEnumerator loadScene(){op1 = SceneManager.LoadSceneAsync(1);// 加载完场景不要自动跳转,让玩家手动确认再跳转op1.allowSceneActivation = false;yield return op1; }float timer = 0;// Update is called once per framevoid Update(){//输出加载进度 数值范围为0-0.9Debug.Log(op1.progress);timer += Time.deltaTime;if (timer > 5){op1.allowSceneActivation = true;}}
}

可以看到,MyScene关卡还在加载中

可以看到,因为异步,所以加载完成日志先打印

13 、transform组件

游戏物体的父子关系是由transform组件所关联起来的

public class TransformTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//获取位置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.localScale); //只有相对于父物体的缩放,没有相对于世界的缩放//向量,注意 物体旋转时,xyz轴指向也会发生变化。相当于获取红绿蓝三个轴的向量,z轴一般代表前方轴,红色轴代表右手轴,y轴代表上方Debug.Log("forward is " + transform.forward);Debug.Log("right is " + transform.right);Debug.Log("up is " + transform.up);//父子关系//获取父物体//Debug.Log(transform.parent.gameObject);//获取子物体个数//Debug.Log(transform.childCount);//解除与子物体的父子关系//transform.DetachChildren();//获取子物体Transform trans = transform.Find("Child");trans = transform.GetChild(0);//判断一个物体是不是另一个物体的子物体bool res = trans.IsChildOf(transform);Debug.Log("IsChildOf is " + res);//设置为父物体.这个函数可以让原本不相干的两个物体变成父子关系trans.SetParent(transform);}// Update is called once per framevoid Update(){//让一个物体时时刻刻看向另一个物体,举例看向000。即让物体的z轴时刻指向000。可以用于索敌//transform.LookAt(Vector3.zero);//旋转 按什么轴旋转,每一帧旋转多少度。可用于游戏开发的某种场景物体自旋转。//transform.Rotate(Vector3.up, 1);//绕某个物体旋转。也可以绑定父物体然后用脚本transform.Rotate让父物体自转//绕000点的up轴,每一帧旋转五度(但如果按帧的话 不同设备间帧率有差 可能会导致不同设备上效果不同,可以选用秒单位//transform.RotateAround(Vector3.zero, Vector3.up, 5);//移动 每一帧向前移动0.1,可用于弹道轨迹//transform.Translate(Vector3.forward * 0.0001f);}
}

14、基本键鼠操作

public class KeyTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//键盘鼠标操作需要每一帧都判断//鼠标的点击, 0 左键 1 右键 2 滚轮.if (Input.GetMouseButtonDown(0)){//持续按下也只会触发一个buttondown事件Debug.Log("按下了鼠标左键");}//持续按下鼠标。可用于检测连续射击。同一秒可能有多帧,所以同一秒可能输出多条持续的日志if(Input.GetMouseButton(0)){Debug.Log("持续按下鼠标左键");}//抬起鼠标。if (Input.GetMouseButtonUp(0)){Debug.Log("抬起了鼠标左键");}//按下键盘按键if (Input.GetKeyDown(KeyCode.A)) {Debug.Log("按下A");}//持续按下按键if (Input.GetKey(KeyCode.A)){Debug.Log("持续按下A");}//抬起键盘按键if (Input.GetKeyUp(KeyCode.A)) //也可以用小写字符"a",大写字符"A"会报错{Debug.Log("松开A");}}
}

15、虚拟轴

用键盘模拟摇杆.为了跨平台输入监听。不是全部设备都有键盘字母的

只有水平和垂直时虚拟轴,其他是虚拟按键

public class AxisTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){// 获取水平轴,通过输入轴的名称, 轴的名称在项目设置-》输入管理器中定义。按下什么健或鼠标可以在设置中定义float horizontal = Input.GetAxis("Horizontal");float vertical = Input.GetAxis("Vertical");//Debug.Log(horizontal + " " + vertical);//虚拟按键if(Input.GetButtonDown("Jump")){Debug.Log("空格");}if (Input.GetButton("Jump")){Debug.Log("持续空格");}if (Input.GetButtonUp("Jump")){Debug.Log("松开空格");}}
}

16、触摸屏操作

public class TouchTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//开启多点触摸Input.multiTouchEnabled = true;}// Update is called once per framevoid Update(){//判断单点触摸if(Input.touchCount == 1){//触摸对象Touch touch = Input.touches[0];//触摸位置Debug.Log(touch.position);//触摸阶段switch(touch.phase){case TouchPhase.Began:break;case TouchPhase.Moved:break;case TouchPhase.Stationary:break;case TouchPhase.Ended:break;case TouchPhase.Canceled:break;}}//判断多点触摸if (Input.touchCount == 2){Touch touch = Input.touches[0];Touch touch1 = Input.touches[1];}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18777.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[矩形绘制]

矩形绘制 真题目录: 点击去查看 E 卷 200分题型 题目描述 实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除 当新绘制的矩形与之前的图形重叠时,对图形取并集当新擦除的矩形与之前的图形重叠时,对图形取差集给定一系列矩形的绘制和擦除操作,计算最终图形的面积。 …

AI 编程工具—Cursor 进阶篇 数据分析

AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…

DeepSeek帮助解决Oracle死锁问题

最近在生产上遇到一个死锁问题&#xff0c;Oracle 抛出了 ORA-000060 异常。 业务场景&#xff1a;程序按行读取一个上游系统送的文件数据&#xff08;大概有几万行&#xff09;&#xff0c;读取到数据后&#xff0c;每 500 行分配给一个线程去批量更新数据库&#xff08;使用…

小小小病毒(3)(~_~|)

一分耕耘一分收获 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 欢迎来到小小小病毒&#xff08;3&#xff09; 感谢大家的支持 还是那句话&#xff1a;上代码&#xff01; …

【devops】Github Actions Secrets | 如何在Github中设置CI的Secret供CI的yaml使用

一、Github Actions 1、ci.yml name: CIon: [ push ]jobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkoutv3- name: Set up Gouses: actions/setup-gov4with:go-version: 1.23.0- name: Cache Go modulesuses: actions/cachev3with:path: |…

【Elasticsearch】监控与管理:集群健康检查

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

时间序列分析(四)——差分运算、延迟算子、AR(p)模型

此前篇章&#xff1a; 时间序列分析&#xff08;一&#xff09;——基础概念篇 时间序列分析&#xff08;二&#xff09;——平稳性检验 时间序列分析&#xff08;三&#xff09;——白噪声检验 一、差分运算 差分运算的定义&#xff1a;差分运算是一种将非平稳时间序列转换…

LabVIEW 中 dotnet.llb 库功能

在 LabVIEW 功能体系里&#xff0c;位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\dotnet.llb 路径下的 dotnet.llb 库意义重大。作为与 .NET 技术交互的关键库&#xff0c;它使 LabVIEW 用户能够与基于 .NET 框架开发的应用程序和组件进行交…

Hello Robot具身智能移动操作机器人Stretch 3:开源、灵巧、友好

Hello Robot机器人中国市场授权合作伙伴 欣佰特科技&#xff08;北京&#xff09;有限公司 salescnbytec.com Stretch 3 是一款由Hello Robot公司推出功能强大、设计灵活的7DOF开源移动操作机器人&#xff0c;适用于具身智能研究、科研教育和人机交互等多个领域。其强大的计算…

DeepSeek 15天指导手册——从入门到精通

大家好&#xff0c;欢迎来到今天的教程&#xff01;前几天发表 DeepSeek 的文章&#xff0c;收到大家的一致好评。 YYDS&#xff01;WPS 集成 DeepSeek&#xff0c;办公从此更智能 DeepSeek使用技巧&#xff1a;9个技巧让AI助手变身超级英雄 今天我们为大家带来的是DeepSeek…

kibana es 语法记录 elaticsearch

目录 一、认识elaticsearch 1、什么是正向索引 2、什么是倒排索引 二、概念 1、说明 2、mysql和es的对比 三、mapping属性 1、定义 四、CRUD 1、查看es中有哪些索引库 2、创建索引库 3、修改索引库 4、删除索引库 5、新增文档 6、删除文档 5、条件查询 一、认识…

从技术债务到架构升级,滴滴国际化外卖的变革

背 景 商家营销简述 在外卖平台的运营中&#xff0c;我们致力于通过灵活的补贴策略激励商家&#xff0c;与商家共同打造良好的合作关系&#xff0c;也会提供多样化的营销活动&#xff0c;帮助商家吸引更多用户下单。通过这些活动&#xff0c;不仅能够提高商家的销量&#xff0c…

【Redis系列】Redis安装与使用

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

Spring Boot中如何自定义Starter

文章目录 Spring Boot中如何自定义Starter概念和作用1. 概念介绍2. 作用和优势2.1 简化依赖管理2.2 提供开箱即用的自动配置2.3 标准化和模块化开发2.4 提高开发效率2.5 提供灵活的配置覆盖3. 应用场景创建核心依赖1. 确定核心依赖的作用2. 创建 starter-core 模块2.1 依赖管理…

【触想智能】工业显示器和普通显示器的区别以及工业显示器的主要应用领域分析

在现代工业中&#xff0c;工业显示器被广泛应用于各种场景&#xff0c;从监控系统到生产控制&#xff0c;它们在实时数据显示、操作界面和信息传递方面发挥着重要作用。与普通显示器相比&#xff0c;工业显示器在耐用性、可靠性和适应特殊环境的能力上有着显著的差异。 触想工业…

Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力

文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型&#xff0c;以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火&#xff0c;越来越多的技术大佬们开始关注如…

ML.Net二元分类

ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ‌ML.NET‌是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…

Seaweedfs(master volume filer) docker run参数帮助文档

文章目录 进入容器后执行获取weed -h英文中文 weed server -h英文中文 weed volume -h英文中文 关键点测试了一下&#xff0c;这个-volume.minFreeSpace string有点狠&#xff0c;比如设置值为10&#xff08;10%&#xff09;&#xff0c;它直接给系统只留下10%的空间&#xff0…

【系统架构设计师】虚拟机体系结构风格

目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境&#xff0c;在这个环境之上&#xff0c;可以解析与运行自定义的一些语言&#xff0c;这样来增加架构的灵活性。3.虚拟机体…

ROS学习

1.ROS工作空间 存放项目开发相关文件的文件夹&#xff1b; src:代码空间&#xff08;Source Space&#xff09;install:安装空间&#xff08;Install Space&#xff09;build:编译空间&#xff08;Build Space&#xff09;log:日志空间&#xff08;Log Space&#xff09; 2.c…