Unity3D学习之Unity基础

news2024/11/27 2:24:12

文章目录

  • 1. 第一部分:MONO中的重要内容
  • 2. 延时函数
    • 2.1 什么是延时函数
    • 2.2 延时函数的使用
      • 2.2.1 延时重复函数
      • 2.2.2 取消延迟函数
      • 2.2.3 判断是否有延迟函数开启
      • 2.2.4 延迟函数和依附对象的关系
  • 3 协同程序
    • 3.1 Unity中的多线程
    • 3.2 协同程序
    • 3.3 协程的使用
      • 3.3.1 关闭协程
      • 3.3.2 协同可以配合死循环
      • 3.3.3 yield return的内容
      • 3.3.4 失活后组件的影响
      • 3.3.5 用协程写一个计时器
      • 3.3.6 创建100000个随机位置方块但不明显卡顿
    • 3.4 协程原理
      • 3.4.1 生成协程函数
    • 3.5 协程调度器
  • 4 第二部分:Resources资源动态加载
    • 4.1 特殊文件夹
    • 4.1.1 获得工程路径
      • 4.1.2 Resources 资源文件夹
      • 4.1.3 StreamingAssets资源流动文件夹
      • 4.1.4 persistentDataPath 持久数据文件夹
      • 4.1.5 Plugins 插件文件夹
      • 4.1.6 Editor 编辑器文件夹
      • 4.1.7 默认资源文件夹 Standard Asserts
    • 4.2 Resources资源同步加载
      • 4.2.1 动态加载的作用
      • 4.2.2 常用资源类型
      • 4.2.3 资源同步加载 普通方法
    • 4.3 资源异步加载
      • 4.3.1 异步加载是什么
      • 4.3.2 异步加载的方法
      • 4.3.3 通过协程
      • 4.3.4 完成线性加载和协程的异同
      • 4.3.5 封装一个简单的资源管理器
      • 4.4 Resources卸载资源
      • 4.4.1 如何手动释放资源
  • 5 场景异步切换
    • 5.1 通过事件回调函数异步加载
    • 5.2 通过协程异步加载
    • 5.3 简单的场景管理器
  • 6 LineRenderer 画线功能
    • 6.1 LineRenderer
    • 6.2 Line Renderer组件
    • 6.3 代码添加线段
    • 6.4 画一个圆
    • 6.5 长按鼠标使用LineRenderer画出鼠标移动轨迹
  • 7 范围检测
    • 7.1 范围检测
    • 7.2 如何进行范围检测
    • 7.2.1 盒状碰撞器
      • 7.2.2 球状碰撞器
      • 7.2.3 胶囊碰撞器
    • 7.3 模拟游戏碰撞检测
  • 8 射线检测
    • 8.1 射线对象
    • 8.2 碰撞检测函数
      • 8.2.1 获得不到碰撞到了谁
      • 8.2.2 获取相交的单个物体信息
    • 8.3 模拟射击游戏打到墙
    • 8.4 实现鼠标拖动物体


1. 第一部分:MONO中的重要内容

在这里插入图片描述

2. 延时函数

2.1 什么是延时函数

在这里插入图片描述

2.2 延时函数的使用

在这里插入图片描述
在这里插入图片描述
需要传入参数的函数需要包裹
在这里插入图片描述
在这里插入图片描述
否则会报错

在这里插入图片描述
写一个函数包裹
不能直接调用其他对象的函数,也是需要包裹在无参函数中

2.2.1 延时重复函数

在这里插入图片描述

2.2.2 取消延迟函数

在这里插入图片描述
是取消所有延时函数
在这里插入图片描述

取消指定函数

2.2.3 判断是否有延迟函数开启

在这里插入图片描述

2.2.4 延迟函数和依附对象的关系

在这里插入图片描述

1)失活,不会影响函数继续进行
2)对象删除或者脚本删除,不会继续延迟函数

3 协同程序

3.1 Unity中的多线程

在这里插入图片描述

在这里插入图片描述
unity一般多线程用法

用一个中间商 ,比如Queue
在这里插入图片描述
如果有数据需要复线程进行处理,放入queue2中,在update中进行判断,
如果有则传入复线程,然后进行计算后放入另一个queue中
在这里插入图片描述
主线程判断,如果子线程有产出,则取出来用
在这里插入图片描述

3.2 协同程序

在这里插入图片描述
在这里插入图片描述

3.3 协程的使用

在这里插入图片描述
这句的意思就是 打印i之后 再等待5秒后 再打印str

在这里插入图片描述
把逻辑分成了两部分,yield return是分界线
yield return 可以多个
有多少个相当于把代码分成了n+1份

在这里插入图片描述

协程函数可以开启多个
在这里插入图片描述

3.3.1 关闭协程

在这里插入图片描述

3.3.2 协同可以配合死循环

在这里插入图片描述
不会卡死主线程

3.3.3 yield return的内容

在这里插入图片描述

3.3.4 失活后组件的影响

在这里插入图片描述
只失活脚本,协程还是继续

3.3.5 用协程写一个计时器

在这里插入图片描述

在这里插入图片描述

3.3.6 创建100000个随机位置方块但不明显卡顿

改为分步创建

在这里插入图片描述
等一帧创建

在这里插入图片描述

3.4 协程原理

在这里插入图片描述

3.4.1 生成协程函数

在这里插入图片描述
在这里插入图片描述
MoveNext 是执行到下一个yield return 为止

在这里插入图片描述

在这里插入图片描述
可以通过MoveNext返回的bool值判断是否执行完

在这里插入图片描述

3.5 协程调度器

在这里插入图片描述
在这里插入图片描述

4 第二部分:Resources资源动态加载

4.1 特殊文件夹

4.1.1 获得工程路径

在这里插入图片描述

在这里插入图片描述

4.1.2 Resources 资源文件夹

需要手动创建,并且名字不能错
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.1.3 StreamingAssets资源流动文件夹

需要手动创建,PC可读可写,手机只可读
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.1.4 persistentDataPath 持久数据文件夹

不需要手动创建,可读可写,比较重要,做热更新有用
在这里插入图片描述

在这里插入图片描述

4.1.5 Plugins 插件文件夹

在这里插入图片描述

4.1.6 Editor 编辑器文件夹

需要手动创建
在这里插入图片描述

在这里插入图片描述

4.1.7 默认资源文件夹 Standard Asserts

在这里插入图片描述

4.2 Resources资源同步加载

4.2.1 动态加载的作用

在这里插入图片描述

4.2.2 常用资源类型

在这里插入图片描述

4.2.3 资源同步加载 普通方法

1) Object文件
记得要把资源放在Resources文件夹内

  1. 把资源文件夹加载在内存中
  2. 实例化对象
    在这里插入图片描述
    Resources文件夹可以有多个,通过API加载时,会自己去同名Resources文件夹离找资源
    在这里插入图片描述

在这里插入图片描述
2)音效文件 AudioClip
可以在Resources文件夹内创建文件夹
在这里插入图片描述在这里插入图片描述

3)文本资源
在这里插入图片描述
在这里插入图片描述
4) 图片资源
在这里插入图片描述
在这里插入图片描述
5)其他类型之后讨论
6) 同名文件不同类型的文件加载
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 资源异步加载

同步加载会因为 主线程中每一帧跑不完资源,导致每一秒跑不完60帧,所以掉帧

4.3.1 异步加载是什么

开一个新线程进行内存加载
在这里插入图片描述

4.3.2 异步加载的方法

异步加载 不能马上得到资源,至少要等一帧
这句代码表示unity在代码内部开线程进行资源下载
在这里插入图片描述

监听结束后,马上进行一个资源下载结束的一个 事件 completed监听

加载完成后,资源存在了assert中
在这里插入图片描述

可以在 委托中加入一个函数
在这里插入图片描述
在函数中处理 得到资源后所做的事情
在这里插入图片描述
这里是做了实例化

在这里插入图片描述
一定要等completed后,才能使用
一定要在回调中监听

4.3.3 通过协程

在这里插入图片描述

Unity会判断ResourceRequest类型,要等判断加载完后再继续

在这里插入图片描述
还可以通过isDone函数 判断是否加载完
在这里插入图片描述
在这里插入图片描述

4.3.4 完成线性加载和协程的异同

在这里插入图片描述

4.3.5 封装一个简单的资源管理器

在这里插入图片描述
在这里插入图片描述

4.4 Resources卸载资源

在这里插入图片描述

4.4.1 如何手动释放资源

在这里插入图片描述

5 场景异步切换

在这里插入图片描述

5.1 通过事件回调函数异步加载

在这里插入图片描述
是存储在了unity的事件中,所以切换场景时不会被删除

5.2 通过协程异步加载

在这里插入图片描述
因为挂载脚本的object在切换场景被删除,所以协程被删除

在这里插入图片描述
所以需要切换场景时不会被移除
在这里插入图片描述
离开循环后,就认为场景加载结束
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 简单的场景管理器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6 LineRenderer 画线功能

6.1 LineRenderer

在这里插入图片描述

6.2 Line Renderer组件

在这里插入图片描述
Position是点
在这里插入图片描述
第一个点和第二个点相连,第二个点连第三个点,以此类推

在这里插入图片描述
勾上loop后,首尾相连
在这里插入图片描述
width改粗细
在这里插入图片描述
添加曲线
右键添加key,改变首尾点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
是否使用世界坐标系
材质球一般不是我们来搞

6.3 代码添加线段

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.4 画一个圆

在这里插入图片描述

6.5 长按鼠标使用LineRenderer画出鼠标移动轨迹

在这里插入图片描述

在这里插入图片描述
每次都画一个新线
在这里插入图片描述

7 范围检测

在这里插入图片描述

7.1 范围检测

在这里插入图片描述

7.2 如何进行范围检测

7.2.1 盒状碰撞器

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

一个数字代表n层的组合

在这里插入图片描述

7.2.2 球状碰撞器

在这里插入图片描述

7.2.3 胶囊碰撞器

在这里插入图片描述

7.3 模拟游戏碰撞检测

在这里插入图片描述

在这里插入图片描述
1)

在这里插入图片描述

创建出的立方体检测范围是这样的
在这里插入图片描述
改一下创建的角度
在这里插入图片描述
在这里插入图片描述
要记得改角度

2)
在这里插入图片描述
在这里插入图片描述
3)
在这里插入图片描述

8 射线检测

在这里插入图片描述

8.1 射线对象

在这里插入图片描述
在这里插入图片描述

8.2 碰撞检测函数

在这里插入图片描述

8.2.1 获得不到碰撞到了谁

在这里插入图片描述
在这里插入图片描述

8.2.2 获取相交的单个物体信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.3 模拟射击游戏打到墙

在这里插入图片描述

链接:https://pan.baidu.com/s/1bDzl9AgKxWVU_yygz6PT4Q
提取码:1111

在这里插入图片描述
把资源放到Resources文件夹中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8.4 实现鼠标拖动物体

在这里插入图片描述
在这里插入图片描述
让物体在在地板
在这里插入图片描述
在这里插入图片描述
这样设置会让物体在地上嵌住
设置一下position的值即可

在这里插入图片描述
检测的时候检测的方块的层级
拖动的时候检测的是地板的层级

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGLM vs ChatGPT

所有的NLP大模型 都是transformer结构 1.Mask attention 的策略不同 2.训练任务目标不同 国内大模型nb公司:百度、清华智谱 一、主流大模型 粉色:Encoder-only。 绿色:Encoder-Decoder,尽头智谱ChatGLM。 蓝色:…

开源项目_大模型应用_Chat2DB

1 基本信息 项目地址:https://github.com/chat2db/Chat2DBStar:10.7K 2 功能 Chat2DB 是一个智能且多功能的 SQL 客户端和报表工具,适用于各种数据库。 对于那些平时会用到数据库,但又不是数据库专家的程序员来说,…

对#多种编程语言 性能的研究和思考 go/c++/rust java js ruby python

对#多种编程语言 性能的研究和思考 打算学习一下rust 借着这个契机 简单的写了计算圆周率代码的各种语言的版本 比较了一下性能 只比拼单线程简单计算能力 计算十亿次循环 不考虑多线程 go/c/rust java js ruby python 耗时秒数 1:1:1:22:3:250:450 注:能启用则启…

gem5学习(16):gem5内存系统——The gem5 Memory System

目录 一、Model Hierarchy 二、CPU 三、Data Cache Object 四、Tags & Data Block 五、MSHR and Write Buffer Queues 六、Memory Access Ordering 七、Coherent Bus Object 八、Simple Memory Object 九、Message Flow 1、Memory Access Ordering 2、Memory A…

canvas绘制正三边形,正四边形,正五边形...正N边形

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

Vue记录

vue2、vue3记录 vue2记录 经典vue2结构 index.vue&#xff1a; <template><div>...</div> </template><script>import method from "xxx.js"import component from "xxx.vue"export default {name: "ComponentName&…

hot100:07接雨水

题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 算法思想&#xff1a; 这里采取的是暴力解法和双指针的解法&#xff0c;但是这个题目还有其他的两种解法&#xff08;单调栈和动态规划&#xff0c;同学可以自行了解&#xff…

Redis 面试题 | 01.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C# Cad2016二次开发选择csv导入信息(七)

//选择csv导入信息 [CommandMethod("setdata")] //本程序在AutoCAD的快捷命令是"DLLLOAD" public void setdata() {Microsoft.Win32.OpenFileDialog dlg new Microsoft.Win32.OpenFileDialog();dlg.DefaultExt ".csv";// Display OpenFileDial…

【C++类与对象】继承

继承 一、继承基本语法二、继承方式1、公共继承public2、保护继承protected3、私有继承private 三、对象模型四、继承中的构造与析构顺序五、同名成员处理方式同名静态成员处理方法 六、多继承语法&#xff08;不建议使用&#xff09;七、菱形继承&#xff08;钻石继承&#xf…

Pandas 教程

文章目录 Pandas1. Pandas介绍2. Series2.1 Series 的创建2.1.1 列表创建2.1.2 NumPy 数组创建2.1.3 字典创建2.1.4 Series 参数 2.2 Series 的索引2.2.1 显式索引2.2.2 隐式索引2.2.3 修改索引2.2.4 通过索引获取值2.2.5 通过索引修改值 2.3 Series 的切片2.3.1 显式切片2.3.2…

《WebKit 技术内幕》之五(4): HTML解释器和DOM 模型

4 影子&#xff08;Shadow&#xff09;DOM 影子 DOM 是一个新东西&#xff0c;主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…

在WIN从零开始在QMUE上添加一块自己的开发板(一)

文章目录 一、前言二、源码编译&#xff08;一&#xff09;安装Msys2&#xff08;二&#xff09;配置GCC工具链&#xff08;三&#xff09;安装QEMU构建依赖&#xff08;四&#xff09;下载编译QEMU源码 二、QUME编程基础&#xff08;一&#xff09;QOM机制&#xff08;二&…

基于SpringBoot Vue档案管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

ClickHouse与Doris数据库比较

概述 都说“实践是检验真理的唯一标准”&#xff0c;光说不练假把式&#xff0c;那么本文就通过实际的测试来感受一下Doris和clickhouse在读写方面的性能差距&#xff0c;看看Doris盛名之下&#xff0c;是否真有屠龙之技&#xff1b;clickhouse长锋出鞘&#xff0c;是否敢缚苍…

Vagrant创建Oracle RAC环境示例

利用Vagrant安装Oracle RAC&#xff08;默认为non-CDB模式&#xff09;&#xff0c;生成2台虚机&#xff0c;耗时约1小时。 node1: -----------------------------------------------------------------node1: INFO: 2024-01-11 18:25:54: Make create database commandnode1: …

多人在线聊天交友工具,匿名聊天室网站源码,附带搭建教程

源码介绍 匿名聊天室&#xff08;nodejs vue&#xff09; 多人在线聊天交友工具&#xff0c;无需注册即可畅所欲言&#xff01;你也可以放心讲述自己的故事&#xff0c;说出自己的秘密&#xff0c;因为谁也不知道对方是谁。 运行说明 安装依赖项&#xff1a;npm install 启动…

react学习笔记(复习)

React简介 react是什么&#xff1f; React用于构建用户界面的JS库。是一个将数据渲染为HTML视图的开源JS库。 为什么学&#xff1f; 1.原生JS操作DOM繁琐&#xff0c;效率低 2.使用JS直接操作DOM,浏览器会进行大量的重绘重排 3.原生JS没有组件化编码方案&#xff0c;代码…

Linux-ionde(软硬件链接)剖析

概述 文件是存储在硬盘上的&#xff0c;硬盘的最小存储单位叫做扇区sector&#xff0c;每个扇区存储512字节。操作系统读取硬盘的时候&#xff0c;不会一个个扇区地读取&#xff0c;这样效率太低&#xff0c;而是一次性连续读取多个扇区&#xff0c;即一次性读取一个块block。这…

OpenAI的DALL·e2生成的AI图像有时会带有偏见或NSFW

专家警告说&#xff0c;OpenAI的图像生成模型DALLe2可能玩起来很有趣&#xff0c;但它生成的图片可能会带有刻板印象和偏见&#xff0c;甚至是生成NSFW图片&#xff0c;因此在现实世界中部署会有风险。 OpenAI公司承认“如果没有足够的防护措施&#xff0c;像DALLe2这样的模型…