Unity3D学习之Unity基础

文章目录

  • 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中的重要内容

Unity3D学习之Unity基础_第1张图片

2. 延时函数

2.1 什么是延时函数

Unity3D学习之Unity基础_第2张图片

2.2 延时函数的使用

Unity3D学习之Unity基础_第3张图片
在这里插入图片描述
需要传入参数的函数需要包裹
Unity3D学习之Unity基础_第4张图片
Unity3D学习之Unity基础_第5张图片
否则会报错

Unity3D学习之Unity基础_第6张图片
写一个函数包裹
不能直接调用其他对象的函数,也是需要包裹在无参函数中

2.2.1 延时重复函数

Unity3D学习之Unity基础_第7张图片

2.2.2 取消延迟函数

在这里插入图片描述
是取消所有延时函数
Unity3D学习之Unity基础_第8张图片

取消指定函数

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

Unity3D学习之Unity基础_第9张图片

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

Unity3D学习之Unity基础_第10张图片

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

3 协同程序

3.1 Unity中的多线程

Unity3D学习之Unity基础_第11张图片

Unity3D学习之Unity基础_第12张图片
unity一般多线程用法

用一个中间商 ,比如Queue
Unity3D学习之Unity基础_第13张图片
如果有数据需要复线程进行处理,放入queue2中,在update中进行判断,
如果有则传入复线程,然后进行计算后放入另一个queue中
Unity3D学习之Unity基础_第14张图片
主线程判断,如果子线程有产出,则取出来用
Unity3D学习之Unity基础_第15张图片

3.2 协同程序

Unity3D学习之Unity基础_第16张图片
在这里插入图片描述

3.3 协程的使用

Unity3D学习之Unity基础_第17张图片
这句的意思就是 打印i之后 再等待5秒后 再打印str

Unity3D学习之Unity基础_第18张图片
把逻辑分成了两部分,yield return是分界线
yield return 可以多个
有多少个相当于把代码分成了n+1份

Unity3D学习之Unity基础_第19张图片

协程函数可以开启多个
Unity3D学习之Unity基础_第20张图片

3.3.1 关闭协程

Unity3D学习之Unity基础_第21张图片

3.3.2 协同可以配合死循环

Unity3D学习之Unity基础_第22张图片
不会卡死主线程

3.3.3 yield return的内容

Unity3D学习之Unity基础_第23张图片

3.3.4 失活后组件的影响

Unity3D学习之Unity基础_第24张图片
只失活脚本,协程还是继续

3.3.5 用协程写一个计时器

在这里插入图片描述

Unity3D学习之Unity基础_第25张图片

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

改为分步创建

Unity3D学习之Unity基础_第26张图片
等一帧创建

Unity3D学习之Unity基础_第27张图片

3.4 协程原理

Unity3D学习之Unity基础_第28张图片

3.4.1 生成协程函数

Unity3D学习之Unity基础_第29张图片
Unity3D学习之Unity基础_第30张图片
MoveNext 是执行到下一个yield return 为止

Unity3D学习之Unity基础_第31张图片

Unity3D学习之Unity基础_第32张图片
可以通过MoveNext返回的bool值判断是否执行完

Unity3D学习之Unity基础_第33张图片

3.5 协程调度器

Unity3D学习之Unity基础_第34张图片
Unity3D学习之Unity基础_第35张图片

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

4.1 特殊文件夹

4.1.1 获得工程路径

Unity3D学习之Unity基础_第36张图片

在这里插入图片描述

4.1.2 Resources 资源文件夹

需要手动创建,并且名字不能错
Unity3D学习之Unity基础_第37张图片
Unity3D学习之Unity基础_第38张图片

在这里插入图片描述

4.1.3 StreamingAssets资源流动文件夹

需要手动创建,PC可读可写,手机只可读
Unity3D学习之Unity基础_第39张图片
Unity3D学习之Unity基础_第40张图片
在这里插入图片描述

4.1.4 persistentDataPath 持久数据文件夹

不需要手动创建,可读可写,比较重要,做热更新有用
Unity3D学习之Unity基础_第41张图片

在这里插入图片描述

4.1.5 Plugins 插件文件夹

Unity3D学习之Unity基础_第42张图片

4.1.6 Editor 编辑器文件夹

需要手动创建
Unity3D学习之Unity基础_第43张图片

Unity3D学习之Unity基础_第44张图片

4.1.7 默认资源文件夹 Standard Asserts

Unity3D学习之Unity基础_第45张图片

4.2 Resources资源同步加载

4.2.1 动态加载的作用

Unity3D学习之Unity基础_第46张图片

4.2.2 常用资源类型

Unity3D学习之Unity基础_第47张图片

4.2.3 资源同步加载 普通方法

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

  1. 把资源文件夹加载在内存中
  2. 实例化对象
    Unity3D学习之Unity基础_第48张图片
    Resources文件夹可以有多个,通过API加载时,会自己去同名Resources文件夹离找资源
    Unity3D学习之Unity基础_第49张图片

在这里插入图片描述
2)音效文件 AudioClip
可以在Resources文件夹内创建文件夹
在这里插入图片描述Unity3D学习之Unity基础_第50张图片

3)文本资源
Unity3D学习之Unity基础_第51张图片
Unity3D学习之Unity基础_第52张图片
4) 图片资源
Unity3D学习之Unity基础_第53张图片
在这里插入图片描述
5)其他类型之后讨论
6) 同名文件不同类型的文件加载
Unity3D学习之Unity基础_第54张图片
Unity3D学习之Unity基础_第55张图片
Unity3D学习之Unity基础_第56张图片

4.3 资源异步加载

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

4.3.1 异步加载是什么

开一个新线程进行内存加载
Unity3D学习之Unity基础_第57张图片

4.3.2 异步加载的方法

异步加载 不能马上得到资源,至少要等一帧
这句代码表示unity在代码内部开线程进行资源下载
Unity3D学习之Unity基础_第58张图片

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

加载完成后,资源存在了assert中
Unity3D学习之Unity基础_第59张图片

可以在 委托中加入一个函数
在这里插入图片描述
在函数中处理 得到资源后所做的事情
Unity3D学习之Unity基础_第60张图片
这里是做了实例化

Unity3D学习之Unity基础_第61张图片
一定要等completed后,才能使用
一定要在回调中监听

4.3.3 通过协程

Unity3D学习之Unity基础_第62张图片

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

Unity3D学习之Unity基础_第63张图片
还可以通过isDone函数 判断是否加载完
Unity3D学习之Unity基础_第64张图片
Unity3D学习之Unity基础_第65张图片

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

Unity3D学习之Unity基础_第66张图片

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

Unity3D学习之Unity基础_第67张图片
Unity3D学习之Unity基础_第68张图片

4.4 Resources卸载资源

Unity3D学习之Unity基础_第69张图片

4.4.1 如何手动释放资源

Unity3D学习之Unity基础_第70张图片

5 场景异步切换

Unity3D学习之Unity基础_第71张图片

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

Unity3D学习之Unity基础_第72张图片
是存储在了unity的事件中,所以切换场景时不会被删除

5.2 通过协程异步加载

Unity3D学习之Unity基础_第73张图片
因为挂载脚本的object在切换场景被删除,所以协程被删除

Unity3D学习之Unity基础_第74张图片
所以需要切换场景时不会被移除
在这里插入图片描述
离开循环后,就认为场景加载结束
Unity3D学习之Unity基础_第75张图片
在这里插入图片描述
Unity3D学习之Unity基础_第76张图片

5.3 简单的场景管理器

Unity3D学习之Unity基础_第77张图片
Unity3D学习之Unity基础_第78张图片
Unity3D学习之Unity基础_第79张图片

6 LineRenderer 画线功能

6.1 LineRenderer

Unity3D学习之Unity基础_第80张图片

6.2 Line Renderer组件

在这里插入图片描述
Position是点
Unity3D学习之Unity基础_第81张图片
第一个点和第二个点相连,第二个点连第三个点,以此类推

Unity3D学习之Unity基础_第82张图片
勾上loop后,首尾相连
Unity3D学习之Unity基础_第83张图片
width改粗细
Unity3D学习之Unity基础_第84张图片
添加曲线
右键添加key,改变首尾点
Unity3D学习之Unity基础_第85张图片
Unity3D学习之Unity基础_第86张图片
Unity3D学习之Unity基础_第87张图片
Unity3D学习之Unity基础_第88张图片
是否使用世界坐标系
材质球一般不是我们来搞

6.3 代码添加线段

Unity3D学习之Unity基础_第89张图片

Unity3D学习之Unity基础_第90张图片
Unity3D学习之Unity基础_第91张图片

6.4 画一个圆

Unity3D学习之Unity基础_第92张图片

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

Unity3D学习之Unity基础_第93张图片

Unity3D学习之Unity基础_第94张图片
每次都画一个新线
Unity3D学习之Unity基础_第95张图片

7 范围检测

Unity3D学习之Unity基础_第96张图片

7.1 范围检测

Unity3D学习之Unity基础_第97张图片

7.2 如何进行范围检测

7.2.1 盒状碰撞器

Unity3D学习之Unity基础_第98张图片
在这里插入图片描述

Unity3D学习之Unity基础_第99张图片

一个数字代表n层的组合

Unity3D学习之Unity基础_第100张图片

7.2.2 球状碰撞器

Unity3D学习之Unity基础_第101张图片

7.2.3 胶囊碰撞器

Unity3D学习之Unity基础_第102张图片

7.3 模拟游戏碰撞检测

Unity3D学习之Unity基础_第103张图片

在这里插入图片描述
1)

Unity3D学习之Unity基础_第104张图片

创建出的立方体检测范围是这样的
Unity3D学习之Unity基础_第105张图片
改一下创建的角度
Unity3D学习之Unity基础_第106张图片
Unity3D学习之Unity基础_第107张图片
要记得改角度

2)
Unity3D学习之Unity基础_第108张图片
Unity3D学习之Unity基础_第109张图片
3)
Unity3D学习之Unity基础_第110张图片

8 射线检测

Unity3D学习之Unity基础_第111张图片

8.1 射线对象

Unity3D学习之Unity基础_第112张图片
Unity3D学习之Unity基础_第113张图片

8.2 碰撞检测函数

Unity3D学习之Unity基础_第114张图片

8.2.1 获得不到碰撞到了谁

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

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

Unity3D学习之Unity基础_第115张图片
Unity3D学习之Unity基础_第116张图片
Unity3D学习之Unity基础_第117张图片
Unity3D学习之Unity基础_第118张图片

8.3 模拟射击游戏打到墙

Unity3D学习之Unity基础_第119张图片

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

Unity3D学习之Unity基础_第120张图片
把资源放到Resources文件夹中

在这里插入图片描述

Unity3D学习之Unity基础_第121张图片

Unity3D学习之Unity基础_第122张图片

8.4 实现鼠标拖动物体

在这里插入图片描述
Unity3D学习之Unity基础_第123张图片
让物体在在地板
Unity3D学习之Unity基础_第124张图片
在这里插入图片描述
这样设置会让物体在地上嵌住
设置一下position的值即可

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

你可能感兴趣的:(学习,unity,笔记)