【Unity每日一记】资源加载相关和检测相关

👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:unity每日一记
⭐🅰️推荐文章⭐
⭐【软件设计师高频考点暴击】
⭐【Unityc#专题篇】之c#系统化大礼包】
⭐【unity数据持久化】数据管理类_PlayerPrfs
⭐【unity本站最全系列】unity常用API大全一篇文章足以

⭐⭐
文章目录
- ⭐🅰️推荐文章⭐
- ⭐⭐
- 🎶(==A==)Resources资源动态加载
- 🎶(==B==)SceneManager场景资源动态加载
- 🎶(==C==)线渲染器 LineRenderer
- 🎶(==D==)手动范围检测
- 🎶(==G==)Ray射线检测
- ⭐🅰️系统路线学习点击跳转⭐
🎶(A)Resources资源动态加载

###同步加载**———————
5种资源加载的方式,Resource加载介绍
- Resources(只能加载Resources目录中的资源)
- AssetBundle(只能加载AB资源,当前设备允许访问的路径都可以)
- WWW(可以加载任意处资源,包括项目外资源(如远程服务器))
- AssetDatabase(只能加载Assets目录下的资源,但只能用于Editor)
- UnityWebRequest(可以加载任意处资源,是WWW的升级版本)
资源加载适用于需要加载资源较多的 情况就不用一个一个的拖拽进去
关键字:@ ,as
卸载AB包的方法: Resource. UnLoadAsset
void Start(){Object obj= Resources.Load("sound");//AudioClip ac = obj as AudioClip;AudioClip ac = (AudioClip)obj;AudioSource.PlayClipAtPoint(ac, transform.position);//Resources.LoadAll<AudioClip>("Prefabs");AudioClip[] audioClips= Resources.LoadAll<AudioClip>("");foreach (var item in audioClips){Debug.Log(item);}//Resources.UnloadAsset}
-
C#中的回收机制是系统自动回收的,有多种回收机制,不像其他语言需要手动回收
注意:
//预设体对象加载需要实例化
//其它资源加载一般直接用
#endregion
Resource资源加载操作
加载资源前首先需要在project面板中创建Resource名字的文件夹,为固定文件夹用于资源加载
以加载AudioClip类型的资源为例:
- 根目录加载 Resource.Load< AudioClip>(“voice”);
- 子目录加载 Resource.Load ( @ " 子目录名/ voice") ;
- 另一种形式:
Object xx = Resource.Load(“voice”);
AudioClip yy as xx ; // 显性类型转换 ,前提是二者兼容 - 加载同类型所有资源的方法:
①根目录加载: AudioClip [] xx = Resource.AllLoad(" “) ;
②子目录加载:AudioClip [] yy = Resource.AllLoad(” 子目录名");
- 1.预设体对象
Object obj = Resources.Load("Cube");Instantiate(obj);
- 2.音效资源
Object obj3 = Resources.Load("Music/BKMusic");//我们不需要实例化 音效切片 我们只需要把数据 赋值到正确的脚本上即可audioS.clip = obj3 as AudioClip;audioS.Play();
- 3.文本资源
文本资源支持的格式——.txt .xml .bytes .json .html .csv …
TextAsset ta = Resources.Load("Txt/Test") as TextAsset;//文本内容ta.text//字节数据组 ta.bytes);
- 4.图片
tex = Resources.Load("Tex/TestJPG") as Texture;
——————— 异步加载———————
如果我们加载过大的资源可能会造成程序卡顿
异步加载 就是内部新开一个线程进行资源加载 不会造成主线程卡顿
- Resources.LoadAsync(“XXX”);
- 注意:
异步加载 不能马上得到加载的资源 至少要等待一帧
直接异步加载——适用于加载单个资源
//通过事件监听ResourceRequest rq = Resources.LoadAsync<Texture>("Tex/TestJPG")rq.completed += LoadOver;//completed 是 ResourceRequest 中的委托 // AsyncOperation 是 ResourceRequest 的父类private void LoadOver( AsyncOperation rq){//在事件中添加结束标识逻辑,这样我们就知道异步加载完成了print("加载结束");//加载完成后 会保存在 ResourceRequest类中的 asset Object类型成员里//此时实现赋值picture = (rq as ResourceRequest).asset as Texture;}
配套协程异步加载——适用于加载多个资源
//通过协程的调度器自己判断是否加载结束StartCoroutine(Load());IEnumerator Load(){ResourceRequest rq = Resources.LoadAsync<Texture>("Tex/TestJPG");yield return rq;// yield return rq会自己判断 该资源是否加载完毕了,加载完毕过后才继续执行后面的代码 ,因为ResourceRequest 也是YieldInstruction的子类//-------------------------------//isDone 和 progress API的应用while(!rq.isDone){//打印当前的 加载进度 print(rq.progress);yield return null;}//--------------------------------picture = rq.asset as Texture;}
———————资源加载器———————
利用异步直接加载和委托的使用构成简单的资源加载器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 简单的资源管理器
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class ResourcesControl
{static private ResourcesControl control;static public ResourcesControl Control => control;private ResourcesControl(){}public void AddResources<T>(string name ,UnityAction<T> source ) where T : Object{ResourceRequest yb = Resources.LoadAsync<T>(name);yb.completed += (reO) =>{source( (reO as ResourceRequest).asset as T );};}
}//外部调用
private void Start()
{GameObject shootball; ResourcesControl.Control.AddResources<GameObject>("Profabs/ball",(sphere)=> {shootball = sphere;} );}
———————卸载资源———————
-
Resources多次重复加载不会浪费内存
但是 会浪费性能(每次加载都会去查找取出,始终伴随一些性能消耗) -
1.卸载指定资源
Resources.UnloadAsset 方法
注意:它只能用于一些 不需要实例化的内容 比如 图片 和 音效 文本等一般情况下很少单独使用它 -
2.卸载未使用的资源
一般在过场景时和GC一起使用
Resources.UnloadUnusedAssets();
GC.Collect();
🎶(B)SceneManager场景资源动态加载
👨💻👍加载场景的方法
- SceneManager.LoadScene() ; 场景同步加载
- SceneManager.LoadSceneSAsyn(); 场景异步加载
- SceneManage。GetActiveScene().name判断当前场景
- Application.LoadLevel():同步加载
- Application.LoadLevelAsync():异步加载
- Application.LoadLevelAddictive():同步附加式加载
- Application.LoadLevelAddictiveAsync():异步附加式加载
👨💻👍SceneManasger的操作
首先添加场景加载的命名空间Using UnityEngine.SceneManagement ;
而后把游戏场景都保存(拖拽)在 Buid setting 里面,相当于存储场景的目录

👍1.同步加载
SceneManager.Load( 序列号) ;
SceneManager.Load( “场景名”) ;
void Start(){//SceneManager.LoadScene(1);//SceneManager.LoadScene("TriggerTest");}
缺点:加载时造成画面卡帧,因为,在未加载完成前画面是停止的,所以是卡帧现象
👍2.异步加载
如果当前场景 对象过多或者下一个场景对象过多
这个过程会非常的耗时 会让玩家感受到卡顿
所以异步切换就是来解决该问题的
通常我们和协程一起使用:
-
SceneManager.LoadAsync(序列号)
-
SceneManager.LoadAsync(“场景名”)
-
StartCoroutine(协程迭代器方法() ); //调用协程
-
AsyncOperation 该类型翻译为异步操作 ,为下面获得异步场景的返回值
AsyncOperation ao= SceneManager.LoadSceneAsync(2); -
ao.allowSceneActivation = true 激活场景
-
ao.progress 场景加载的进度
//-----1.通过事件回调函数 异步加载------AsyncOperation SS = SceneManager.LoadSceneAsync("XXXX");SS.completed += (a) =>{print("加载结束");};SS.completed += LoadOver;private void LoadOver(AsyncOperation ao){print("LoadOver");}//---------2.通过协程异步加载--------void Start(){ //由于场景加载后就不会执行加载后的逻辑了,如果要保存就使用 DontDestroyOnLoad(保留场景加载上个场景的东西)第一个异步方法不会出现该情况DontDestroyOnLoad(this.gameObject); StartCoroutine(LoadScene("XXXX"));}IEnumerator LoadScene(string name){ AsyncOperation SS= SceneManager.LoadSceneAsync(name);
//根据游戏规则 自定义进度条变化的条件yield return SS;//1.场景加载结束 更新20%//2.动态加载怪物再更新20%//3.动态加载场景模型进度条顶满 //4.加载结束隐藏进度条}
总结
场景异步加载 和 资源异步加载 一样
1.通过事件回调函数2.协程异步加载
-
1.事件回调函数
优点:写法简单,逻辑清晰
缺点:只能加载完场景做一些事情 不能在加载过程中处理逻辑 -
2.协程异步加载
优点:可以在加载过程中处理逻辑,比如进度条更新等
缺点:写法较为麻烦,要通过协程
场景管理器
public class SceneControl
{private static SceneControl instance = new SceneControl();public static SceneControl Instance => instance;private SceneControl() { }public void LoadScene(string name, UnityAction action){AsyncOperation SS = SceneControl.LoadSceneAsync(name);SS.completed += (Scene) =>{action();};}
}
🎶(C)线渲染器 LineRenderer
1.LineRenderer是什么
线渲染器 (Line Renderer)官方文档
LineRenderer是Unity提供的一个用于画线的组件来在场景中绘制线段
一般可以用于
- 绘制攻击范围
- 武器红外线
- 辅助功能其它画线功能
2.LineRenderer相关API
-
代码动态添加一个线段
GameObject line = new GameObject();line.name = "Line";LineRenderer lineRenderer = line.AddComponent<LineRenderer>(); -
首尾相连
lineRenderer.loop = true; -
开始结束宽
lineRenderer.startWidth = 0.02f;
lineRenderer.endWidth = 0.02f; -
开始结束颜色
-
lineRenderer.startColor = Color.white;lineRenderer.endColor = Color.red; -
设置材质
m = Resources.Load<Material>("XXX");lineRenderer.material = m;
- 设置点
先设置点的个数
—— lineRenderer.positionCount = 4;
设置 对应每个点的位置
lineRenderer.SetPositions(new Vector3[] { new Vector3(0,0,0),new Vector3(0,0,5),new Vector3(5,0,5)});lineRenderer.SetPosition(3, new Vector3(5, 0, 0));
-
是否使用世界坐标系
//决定了 是否随对象移动而移动lineRenderer.useWorldSpace = false; -
让线段受光影响 会接受光数据 进行着色器计算
lineRenderer.generateLightingData = true;
🎶(D)手动范围检测

特点:
- 1.执行该句代码时 进行一次范围检测 它是瞬时的
- 2.范围检测相关API 并不会真正产生一个碰撞器 只是碰撞判断计算而已
共同参数:
- 参数一:物体中心点
- 参数二:物体的边长大小
- 参数三:物体的角度
- 参数四:检测指定层级(不填检测所有层)
- 参数五:是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 (不填使用UseGlobal)
- 返回值:在该范围内的触发器(得到了对象触发器就可以得到对象的所有信息)
UseGlobal-使用全局设置在该界面中已默认

1.方块状范围检测
- Physics.OverlapBox ——返回值为数组,存储检测到的碰撞器
Collider[] colliders = Physics.OverlapBox( Vector3.zero, Vector3.one, Quaternion.AngleAxis(45, Vector3.up), 1 << LayerMask.NameToLayer("UI") |1 << LayerMask.NameToLayer("Default"), QueryTriggerInteraction.UseGlobal);
- Physics.OverlapBoxNonAlloc——返回值为Int 表示检测的数量(最多6个参数)
if(Physics.OverlapBoxNonAlloc(Vector3.zero, Vector3.one, 自定义数组名) != 0)
2.球形状范围检测
无角度参数
参数二为球半径
- Physics.OverlapSphere
colliders = Physics.OverlapSphere(Vector3.zero, 5, 1 << LayerMask.NameToLayer("Default"));
- Physics.OverlapSphereNonAlloc——同BOX
if( Physics.OverlapSphereNonAlloc(Vector3.zero, 5, colliders) != 0 )
.3.胶囊体范围检测
参数一:半圆一中心点
参数二:半圆二中心点
参数三:半圆半径
- Physics.OverlapCapsule
colliders = Physics.OverlapCapsule(Vector3.zero, Vector3.up, 1, 1 << LayerMask.NameToLayer("UI"), QueryTriggerInteraction.UseGlobal);
- Physics.OverlapCapsuleNonAlloc
if ( Physics.OverlapCapsuleNonAlloc(Vector3.zero, Vector3.up, 1, colliders ) != 0 )
🎶(G)Ray射线检测
-
特点
只需要判断一条线和物体的碰撞情况
可以在指定点发射一个指定方向的射线
判断该射线与哪些碰撞器相交,得到对应对象
瞬时 -
应用场景
1.鼠标选择场景上一物体
2.FPS射击游戏(无弹道-不产生实际的子弹对象进行移动)等
API
- Ray X = new Ray(Vector3.right, Vector3.forward);
| 参数一 | 参数二 |
|---|---|
| 起点 | 方向 |
| X.origin | X.direction |
-
Ray XX = Camera.main.ScreenPointToRay(Input.mousePosition);
屏幕视口坐标转成射线——鼠标点击的地方变成射线 -
Physics.Raycast 无法检测碰到了谁,只会检测碰到了没有
最多有16个重载
| Physics.Raycast常用参数 | 作用 |
|---|---|
| 参数一 | 射线 |
| 参数二 | 检测的最大距离 超出这个距离不检测 |
| 参数三 | 检测指定层级(不填检测所有层) |
| 参数四 | 是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal |
| 返回值 | bool 当碰撞到对象时 返回 true 没有 返回false |
//第一种写法
Physics.Raycast(XX, 1000,
1 << LayerMask.NameToLayer("层级名字"),
QueryTriggerInteraction.UseGlobal )//第二种写法
Physics.Raycast(Vector3.right, Vector3.forward,
1 << LayerMask.NameToLayer("层级名字"),
QueryTriggerInteraction.UseGlobal )
- RaycastHit 物体信息类——得到相交的单个物体物理信息

| RaycastHit 在Physics.Raycast的应用 | 作用 |
|---|---|
| 参数一 | 射线 |
| 参数二 | out RaycastHit 为什么是out ?RaycastHit是结构体 是值类型 out加上去就变成了引用类型,而RaycastHit没有复制所以不用ref |
| 参数三 | 检测的最大距离 超出这个距离不检测 |
| 参数四 | 检测指定层级(不填检测所有层) |
| 参数五 | 是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal |
| 返回值 | bool 当碰撞到对象时 返回 true 没有 返回false |
//写法一RaycastHit YY; if( Physics.Raycast(XX, out YY, 1000, 1<<LayerMask.NameToLayer("层级名字"), QueryTriggerInteraction.UseGlobal) )//写法二
if( Physics.Raycast(Vector3.right, Vector3.forward, out YY, 1000,1<<LayerMask.NameToLayer("层级名字"), QueryTriggerInteraction.UseGlobal) )
- 碰撞到物体的名字 YY.collider.gameObject.name;
- 碰撞到的点 YY.point
- 法线信息 YY.normal
- 碰撞到对象的位置 YY.transform.position
- 碰撞到对象 离自己的距离 YY.distance等等
- RaycastHit[] XX= Physics.RaycastAll——得到相交的多个物体物理信息

特点: 先碰到的在数组的后面
- Physics.RaycastNonAlloc——返回的碰撞的数量 通过out得到数据
if((r3, XX, 1000, 1 << LayerMask.NameToLayer("Monster"), QueryTriggerInteraction.UseGlobal) > 0 ){}
⭐🅰️系统路线学习点击跳转⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、

相关文章:
【Unity每日一记】资源加载相关和检测相关
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:uni…...
【数据结构】长篇详解堆,堆的向上/向下调整算法,堆排序及TopK问题
文章目录 堆的概念性质图解 向上调整算法算法分析代码整体实现 向下调整算法算法分析整体代码实现 堆的接口实现初始化堆销毁堆插入元素删除元素打印元素判断是否为空取首元素实现堆 堆排序创建堆调整堆整合步骤 TopK问题 堆的概念 堆就是将一组数据所有元素按完全二叉树的顺序…...
DAQ高频量化平台:引领Ai高频量化交易模式变革
近年来,数字货币投资市场掀起了一股热潮,以(BTC)为代表的区块链技术带来了巨大的商业变革。数字资产的特点,如无国界、无阶级、无门槛、高流动性和高透明度,吸引了越来越多的人们的关注和认可,创…...
vue3 element plus获取el-cascader级联选择器选中的当前结点的label值 附vue2获取当前label
各位大佬,有时我们在处理级联选择组件数据时,不仅需要拿到id,还需要拿到label名称,但是通常组件直接绑定的是id,所以就需要我们用别的方法去拿到label,此处官方是有这个方法的,具体根据不同的element 版本进行分别处理。 VUE3 e…...
Spring Boot常见面试题
Spring Boot简介 Spring Boot 是由 Pivotal 团队提供,用来简化 Spring 应用创建、开发、部署的框架。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同…...
分块矩阵求逆
另可参考Block matrix on Wikipedia2018.4.3 补充补充两个参考文献,都是对工科很实用的矩阵手册:D. S. Bernstein, Matrix mathematics: Theory, facts, and formulas with application to linear systems theory. Princeton, NJ: Princeton University …...
Python 文件写入操作
视频版教程 Python3零基础7天入门实战视频教程 w模式是写入,通过write方法写入内容。 # 打开文件 模式w写入,文件不存在,则自动创建 f open("D:/测试3.txt", "w", encoding"UTF-8")# write写入操作 内容写入…...
【Spring Boot系列】- Spring Boot侦听器Listener
【Spring Boot系列】- Spring Boot侦听器Listener 文章目录 【Spring Boot系列】- Spring Boot侦听器Listener一、概述二、监听器Listener分类2.1 监听ServletContext的事件监听器2.2 监听HttpSeesion的事件监听器2.3 监听ServletRequest的事件监听器 三、SpringMVC中的监听器3…...
JavaScript速成课—事件处理
目录 一.事件类型 1.窗口事件 2.表单元素事件 3.图像事件 4.键盘事件 5.鼠标事件 二.JavaScript事件处理的基本机制 三.绑定事件的方法 1.DOM元素绑定 2.JavaScript代码绑定事件 3.监听事件函数绑定 四.JavaScript事件的event对象 1.获取event对象 2.鼠标坐标获取…...
【入门篇】ClickHouse最优秀的开源列式存储数据库
文章目录 一、什么是ClickHouse?OLAP场景的关键特征列式数据库更适合OLAP场景的原因输入/输出CPU 1.1 ClickHouse的定义与发展历程1.2 ClickHouse的版本介绍 二、ClickHouse的主要特性2.1 高性能的列式存储2.2 实时的分析查询2.3 高度可扩展性2.4 数据压缩2.5 SQL支…...
【C++ Exceptions】异常处理的成本
最低成本 exception是C的一部分,编译器必须支持。即使从未使用任何异常处理机制,也必须付出一些空间放置某些数据结构,付出一些时间随时保持那些数据结构的正确性。 第二种成本:来自try语句块 避免非必要的try语句块。 粗略估计&a…...
API接口:原理、实现及应用
API(Application Programming Interface)接口是现代软件开发中不可或缺的一部分。它们提供了一种机制,使得不同的应用程序和服务可以相互通信,共享数据和功能。在这篇文章中,我们将探讨API接口的原理、实现及应用&…...
SpringBoot学习笔记(项目创建,yaml,多环境开发,整合mybatis SMM)
一、SpringBoot入门 1.1 SpringBoot概述 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。 Spring程序缺点:配置繁琐,依赖设置繁琐。SpringBoot程序优点:自动装配,…...
Linux内核分析:输入输出,字符与块设备 31-35
CPU 并不直接和设备打交道,它们中间有一个叫作设备控制器(Device Control Unit)的组件,例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。这些控制器就像代理商一样,它们知道如何应对硬盘、鼠标、键盘、显示器的行为。 输入输出设备我们大致可以分为两类…...
Linux抓包工具tcpdump
一、介绍 tcpdump是一个抓包工具,用于实时捕获和分析网络流量。它通常在unix和linux操作系统上使用。tcpdump能够捕获流经网络接口的数据包,并显示或保存它们以供进一步分析。它提供有关每个数据包的详细信息,包括源IP地址、目标IP地址、使用…...
Qt消息机制和事件
事件 事件是由Qt或者系统在不同时刻发出的,当敲下鼠标,或者按下键盘,或者当窗口需要重新绘制的时候,就会发出一个相应的事件,一些操作由用户的操作发出,一些则由系统自动发出,如系统定时器事件等。 Qt 中所有事件类都继承于 QEvent。 在事件对象创建完毕后, Qt 将这个…...
LeetCode-739-每日温度-单调栈
题目描述:给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 题目…...
MyBatis中当实体类中的属性名和表中的字段名不一样,怎么办
方法1: 在mybatis核心配置文件中指定,springboot加载mybatis核心配置文件 springboot项目的一个特点就是0配置,本来就省掉了mybatis的核心配置文件,现在又加回去算什么事,总之这种方式可行但没人这样用 具体操作&…...
Flutter框架和原理剖析
Flutter是Google推出并开源的跨平台开发框架,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发Flutter应用,一套代码同时运行在ios和Android平台。不仅如此,flutter还支持web、桌面、嵌入应用的开发。flutter提供了丰富的组件、接口&…...
NFS:使用 Ansible 自动化配置 NFS 客户端服务端
考试顺便整理博文内容整理涉及使用 Ansible 部署 NFS 客户端和服务端理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
