Unity3D学习之Unity基础

文章目录

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

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的值即可

检测的时候检测的方块的层级

拖动的时候检测的是地板的层级

相关推荐
幻世界22 分钟前
【Unity智能模型系列】Unity + MediaPipe + Sentis + ArcFace模型:构建高效人脸识别比对系统
unity·游戏引擎
碎叶城李白1 小时前
若依学习笔记1-validated
java·笔记·学习·validated
im_AMBER1 小时前
学习日志05 python
python·学习
真的想上岸啊3 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
HuashuiMu花水木3 小时前
PyTorch笔记1----------Tensor(张量):基本概念、创建、属性、算数运算
人工智能·pytorch·笔记
rui锐rui3 小时前
大数据学习2:HIve
大数据·hive·学习
凛铄linshuo4 小时前
爬虫简单实操2——以贴吧为例爬取“某吧”前10页的网页代码
爬虫·python·学习
大春儿的试验田5 小时前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
笑衬人心。5 小时前
Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
笔记·python·ubuntu
金色光环6 小时前
【Modbus学习笔记】stm32实现Modbus
笔记·stm32·学习