【Unity3D开发小游戏】《我的世界游戏》Unity开发教程
一、前言
这套教程涵盖了Unity Mesh编程、模拟水算法(water simulations)、方块移动算法(marching-cubes)等等。这是一套比较有深度的教程,可能需要你了解一些Unity和C#相关的知识。
二、效果图
三、正文
一、基础篇:生成数据块
预备开始
首先,我们先来创建一个空的项目,命名随意即可。
然后创建在Assets下创建一个文件夹,命名为“Scripts”,并创建三个C#脚本,如下图所示:
Chunk用于存储方块数据和创建网格,并且对网格进行渲染和碰撞;Block用于存放方块需要的信息;MeshData用于存储网格数据。
Chunk.cs脚本:
首先,我们要求该脚本必须包含上个组件:MeshFilter、MeshRenderer、MeshCollider。我们的数据块(就是由一堆方块组成的大方块~)需要这三个组件完成网格的创建和碰撞。
然后,我们有三个变量。我们有一个Block类型的三维数组变量 blocks,Block类用于存放方块需要的信息,因此我们这个blocks变量就是用于存放一个数据块的方块的信息。
chunkSize是一个静态变量,它用于表示我们的数据块各个方向的大小(就是长宽高的大小)。
最后我们有一个bool类型的变量,用于标志该数据块是否在每帧结束后更新。
其次有三个函数,分别为GetBlock、UpdateChunk、RenderMesh。GetBlock用于获取对应位置的方块;UpdateChunk用于更新数据块的网格数据,然后将更新的数据提供给RenderMesh去渲染。
MeshData.cs脚本:
由于这个脚本只是为了存储数据,因此不必继承自MonoBehaviour。
前三个变量(vertices、triangles、uv)是用于渲染网格用的,后两个用于网格碰撞(colVetices、colTriangles)。
Block.cs脚本:
同样的,Block脚本也不需要继承自MonoBehaviour,并且它将会是所有方块的基类。主要用于存储方块所需信息。
BlockData函数用于生成该方块的网格信息。
我们来设想一下,假如我们的数据块是有25个方块组成的,那么在相邻的方块之间,有一些面就不必渲染出来,浪费系统资源。因此,接下来让我们进行剔除多余面数的处理。
首先,我们需要一个函数去判断两个方块是否相邻,如果相邻则对各个方向的面进行剔除处理。
在那之前,让我们先定一个表示方向的枚举(Block脚本中):
然后让我们为Block脚本添加判断的函数:
因为Block脚本是所有方块类的基类,所有我们在Block脚本中对IsSolid函数没有进行判断处理,全部返回true。
现在让我们开始写一些我们的BlockData函数,在这个函数中,我们会根据当前方块对应方向上相邻方块的面进行剔除处理。
上图中的注释也说得很清楚了。举个栗子:判断当前方块顶上相邻的方块是否有底面,如果有则当前方块就不制作顶面,如下图分析所示:
接下来就是添加需要绘制对应的面的函数了。
上:
上面的注释也说得很清楚了,但是克森还是给你们秀一秀我的美术功底。
其它的面就不细讲,代码如下:
下:
东:
北:
南:
西:
添加点之后,我们还要把这些点组合成三角形,因此在函数的最后调用了MeshData里的AddQuadTriangles(),由名字可知道,该函数用于添加面片,因此我们要用这四个顶点组合成一个面片,让我们回到MeshData中添加该函数:
再给大家上一次克森的美术作品,相信大家都能理解了吧。
接下来,让我们创建一个新的脚本,命名为“BlockAir”,让它继承值Block类,如下所示:
Okey,现在让我们回到Chunk脚本中,开始添加方块进行测试咯。添加如下代码:
首先声明两个变量,一个为MeshFilter(网格过滤器)类型,另一个为MeshCollider(网格碰撞器)类型。分别用于存储和设置我们对应数据库上的组件属性。
首先通过GetComponent方法获取对应物体上的对应的组件,然后初始化了我们的数据块(blocks),我们的数据块是一个161616大小的正方体,里面由一堆小方块组成。当前数据库的小方块类型为 BlockAir。
然后修改了该数据库blocks[3, 5, 2]的方块数据,修改为Block类型方块。
最后调用UpdateChunk函数进行数据的更新。
好的,接下来让我们完善我们的UpdateChunk函数:
首先声明一个类型为MeshData的变量。然后循环遍历blocks进行数据的更新(就是调用每一个方块的BlockData函数,而BlockData函数则是用来处理方块的网格数据,例如剔除面等等)。
最后就是调用RenderMesh函数将更新好的网格数据传入,然后进行网格的渲染。
那么,接下来让我们完成我们的RenderMesh函数:
这个函数很简单,就是先调用Clear函数清除上一次网格的数据,然后重新设置即可。
这一篇只是简单的介绍怎么生成数据块,还没涉及到贴图和碰撞,所以在RenderMesh函数里只是更新了网格数据。下一篇则教大家如何添加贴图到数据块上。
说那么多,先看看效果。
首先创建一个空物体,然后为该物体添加Chunk脚本。你将会发现如下效果:
为什么方块会跑那去了,为什么会是紫色的呢?因为该方块没有材质,所以是紫色的。因为我们设置了该方块的位置为(3,5,2),那我们是在哪里设置的呢,其实是在这个地方设置了,如下图所示:
这个时候你可以创建一个Cube物体去比对一下就知道了,下图演示:
看来是这样的没错。好,接下来克森带大家来走一走这个运行时候的步骤:
1.首先我们先进行实例化数据块,也就是Chunk类里面的blocks变量。
2.调用UpdateChunk更新网格数据,在UpdateChunk中又调用了各个方块的BlockData函数生成网格数据。
3.在BlockData中我们对当前方块根据检测相邻方块进行剔除面操作。
(由于函数太大,所以只截一小部分)
4.最后调用RenderMesh对网格数据进行更新。
在这里,为什么我们只生成了一个方块呢。因为要想生成方块,就必须调用BlockData函数,而BlockAir的BlockData函数里我们只做了一个返回,并没有生成网格数据,
因此只生成了一个方块,也就是我们在后面修改的那个位置为(3,5,2)的方块,因为在Block类里BlockData函数已经生成了网格数据。
为什么克森不直接将所有的方块实例化为Block类呢,原因是这样做会造成数组下标越界。大家还记得下面这个函数吗?
假设当前方块的y为16,这y+1便会越界。对于这个处理,后续的文章中会有介绍。敬请关注吧。
忘记说最后一点了,对于为什么会生成一个方块呢。原因就是在下图判断中,如果返回为false则制作该方块对应的面,然后我们的BlockAir的IsSolid函数返回的就是false,因此我们的方块就出来了。
二、基础篇:生成贴图
上一次我们制作了一些函数去设置网格数据,在这篇文章中,我将教大家怎么为方块贴图。
贴图嘛,首先你得有图才行呀。因此请你将下面这张图右键保存到你的工程目录中:
打开该图片的导入设置,设置图片类型(Texture Type)为 Advanced,然后将所有的勾都去掉,将过滤模式(Filter Mode)设置为 Point(no filter)。最后的设置如下所示:
好,让我们来看看为什么要这么设置呢?大家可从下面几张图中看出效果:
(point模式)
(Bilinear模式)
为什么会这样呢?总之请大伙们记住的就是,如果做像素游戏那么就选择Point模式就对了。而Bilinear模式会对纹理进行插值计算,会先找出最接近像素的四个图素进行插值运算,这会使得纹理更为平滑;而Point模式只是对纹理进行简单的插值,会使用包含像素最多的部分的图素来贴图,容易出现所谓的“马赛克”想象。而“马赛克”想象正是我们想要的效果。
接下来拖拽该图片到上一篇创建好的Chunk物体上,这时你会看到工程目录中多出了一个Metarials文件夹,这是由Unity根据拖拽的纹理自动生成的,这边省去了手动创建纹理的时间。
接下来打开我们的Block脚本,我们需要使用一个结构体去保存纹理信息,以便对纹理坐标进行修改:
接下来我们创建一个函数,该函数用于根据指定方面的面对纹理进行修改,简单的说就是给指定方向上的面贴指定的纹理:
该函数很简单,就是返回一个修改好的Tile类型的结构体,也就是纹理上的坐标位置。
接下来我们需要一个float类型的产量,用于表示纹理位置的比例:
为什么会是0.25f呢,下图有解释:
如果还不理解,没关系,我们继续往下走。
下面的函数用于生成对应方向面的UV位置:
好,暂时不解释,接下来再在faceData*(*代表各个方向上的函数)函数中添加如下代码:
最后在Chunk.cs脚本的RenderMesh函数中添加两行代码来渲染我们的UV贴图即可:
先不做解释,先测试一番看看效果:
一个石块便完美的展示出来了。
好,接下来让我们来分析分析该石块制作的过程:
首先,用于生成UV位置的主要函数是如下函数:
然后该函数调用了TexturePosition函数来生成UV的 x 和 y 的位置:
在该函数中将 x 和 y 都设置为0。然后让我们回到FaceUVs函数中来,计算计算最终生成UV的位置:
对应我们纹理中的位置如下图所示:
由于我们在各个方向的面都使用了同一个纹理坐标,因此该方块的每个都面都是上图中的纹理,接下来让我们生成文章前头看到的那个草块。
让我们新建一个C#脚本,命名为“BlockGrass.cs”,双击打开脚本,为其添加如下代码:
其实这个脚本很简单,我们只是在TexturePosition函数中对某个方面上的面做了些特殊操作,仅此而已。
然后在初始化创建方块的地方为其添加如下代码:
这时候Play游戏,你将会看到如下图所示效果:
至于为什么会生成,前面已经有做过解释,这里就不再赘述。
三、基础篇:生成网格碰撞
上一次我们为方块添加了贴图,这一章我将为方块添加网格碰撞。
从下图可知,我们的方块已经有网格数据了,然而我们的Mesh Collider的Mesh属性还没有任何网格数据。
接下来,让我们来为方块添加网格碰撞。
提示
更新网格碰撞数据是很耗性能的,因此我们应该把网格碰撞设计得越简洁越好。如果你不打算使用Unity自带的物理系统,那么你可以百度一下“AABB”碰撞检测算法,这是最简单的碰撞算法之一了。
因为网格碰撞会随着网格数据的变化而变化,为了方面网格碰撞的数据能与网格数据同步变化,首先在“MeshDta.cs”脚本中添加下面变量:
当该布尔变量为true的时候,我们在对网格添加面片数据的时候,也会对网格碰撞的面片数据进行更新,如下图所示:
请大家注意一下,我们为网格碰撞添加面片的时候使用的是colVertices.Count,而不是vertices.Count。
那么接下来,我们为网格碰撞添加顶点,如下图所示:
好了,让我们回到“Block.cs”脚本中,修改一下网格顶点的添加方式:如下图所示:
提示
一定要将“Block.cs”原来添加顶点的方式换成转换的方式!!!
这样便可在useRenderDataForCol为true的时候,添加网格的顶点数据的同时也添加了网格碰撞的顶点数据,是不是既方便又简单呀。
网格碰撞的顶点数据添加好了,接下来添加网格碰撞的三角形数据的步骤和添加顶点的步骤相似。
首先处理一下添加三角形的函数,如下图所示:
提示
目前我们只使用了AddQuadTriangies()函数,上图的函数也许会在后面的开发中用的,之所以提前写上是因为该函数和本篇文章相关联。
接下来回到我们的“Block.cs”脚本的添加下面一行代码就可以跑一跑测试了:
将这行代码添上之后,按下ctrl+s,之后回到Unity点击Play按钮,将会看到如下图所示效果:
OK,这一篇结束
四、基础篇:添加地形管理
上一次我们为方块添加了网格碰撞,这一章将会创建一个地形管理相关的类。
首先创建一个名为“WorldPos.cs”的脚本,双击打开,码入如下代码:
using System.Collections;public struct WorldPos
{public int x, y, z;public WorldPos(int x, int y, int z){this.x = x;this.y = y;this.z = z;}// 重写了 Equals 方法,便于比较和方便字典操作(后面有讲)public override bool Equals(object obj){if (!(obj is WorldPos))return false;WorldPos pos = (WorldPos)obj;if (pos.x != x || pos.y != y || pos.z != z){return false;}else{return true;}}
}
这个脚本里的代码很简单,也就是创建了一个带有三个 int 类型的结构体,然后重写了 Equals 方法,至于为什么这么做,接着往下看便知道了。
接下来创建一个名为“World.cs”的脚本,双击打开脚本,码入如下代码:
sing UnityEngine;
using System.Collections.Generic;public class World : MonoBehaviour {// 用来管理 chunkpublic Dictionary<WorldPos, Chunk> chunks = new Dictionary<WorldPos, Chunk>();// chunk 预设体,用做创建对象的模板public GameObject chunkPrefab;
}
咳咳咳,到这里就知道为什么了要创建“WorldPos.cs”脚本,和重写 Equals 方法了吧。
那就是因为我们使用了字典结构来管理我们的 Chunk,而 key 为 WorldPos,我们都知道字典的 key 是唯一的,如果想要得到某个 key 对应的值,那么我们就需要传入相等的 key 才能够得到对应的值,因此我们就需要重写 WorldPos 的 Equals 方法。如果不重写 Equals 方法的话,默认对比两个 WorldPos 则是通过它们各自的 Hash 值来对比的,而每个 new 出来的对象的 Hash 都不相同,所以这就是为什么要重写 Equals 方法的主要原因。
逼逼那么多,也不知道说得对不对,233。
Ok,让我们回到 Unity 编辑器中,然后按步骤执行如下操作:
Ok,接下来让我们运行 Unity,你会发现什么都没有。
让我们双击打开“Chunk.cs”脚本,修改如下代码:
嚯嚯嚯,初始化代码都去掉了,我们要怎么创建 chunk 方块呀?
稍等骂爹,我们不是有一个用于管理 chunk 的类吗?对的,接下来让我们在 “World.cs”脚本里对“Chunk”进行初始化。回到“World.cs”脚本,添加如下代码:
void Start(){// 初始化世界for (int x = 0; x < 1; x++){for (int y = 0; y < 1; y++){for (int z = 0; z < 1; z++){// 之所以乘上 Chunk.chunkSize,是用于确保每一个 Chunk 的范围CreateChunk(x * Chunk.chunkSize, y * Chunk.chunkSize, z * Chunk.chunkSize);}}}}
上图中的代码较为简单,就不细说了,接下来添加“CreateChunk”函数,如下图所示:
public void CreateChunk(int x, int y, int z){// 创建 WorldPos 对象,并初始化WorldPos worldPos = new WorldPos(x, y, z);// 使用预设体创建游戏对象GameObject newChunkObject = Instantiate(chunkPrefab, new Vector3(x, y, z),Quaternion.Euler(Vector3.zero)) as GameObject;// 获取对象上的 Chuck 组件Chunk newChunk = newChunkObject.GetComponent<Chunk>();// 为组件赋值newChunk.pos = worldPos;newChunk.world = this;// 将该 chuck 添加到字典中管理chunks.Add(worldPos, newChunk);// 这段代码其实就是原来 Chunk.cs 脚本里初始化的代码for (int xi = 0; xi < Chunk.chunkSize; xi++){for (int yi = 0; yi < Chunk.chunkSize; yi++){for (int zi = 0; zi < Chunk.chunkSize; zi++){SetBlock(x + xi, y + yi, z + zi, new BlockGrass());}}}}
上图代码基本都上了注释,因此不再细说。接下来添加“SetBlock”函数,代码如下:
public void SetBlock(int x, int y, int z, Block block){// 在这里封装了一层,用于做相关检测逻辑Chunk chunk = GetChunk(x, y, z);if (chunk != null){// 调用 chunk 的 SetBlock 函数,其实就是为 chunk 里的 blocks 数组设置对应的值,// 只不过也在该函数中做了相关检测处理逻辑chunk.SetBlock(x - chunk.pos.x, y - chunk.pos.y, z - chunk.pos.z, block);chunk.update = true;}}
接下来先添加“GetChunk”函数,代码如下:
public Chunk GetChunk(int x, int y, int z){// 下面五行代码主要用于计算当前 Block 位置对应的 chunk 于字典中的位置,并为 pos 赋值// 因为我们创建 chunk 是使用 CreateChunk(x * Chunk.chunkSize, y * Chunk.chunkSize, z * Chunk.chunkSize); 来创建的// 下面的操作只是将其操作反向计算了一下,仅此而已。WorldPos pos = new WorldPos();float multiple = Chunk.chunkSize;pos.x = Mathf.FloorToInt(x / multiple) * Chunk.chunkSize;pos.y = Mathf.FloorToInt(y / multiple) * Chunk.chunkSize;pos.z = Mathf.FloorToInt(z / multiple) * Chunk.chunkSize;Chunk chunk = null;chunks.TryGetValue(pos, out chunk);return chunk;}
接下来让我们回到“Chunk.cs”脚本中,添加如下关联函数,代码如下所示:
public static bool InRange(int index){// 因为我们的 chunk 为一个正方体,// 因此这里的逻辑就是判断 x、y、z 的位置时候在该立方体内if (index < 0 || index >= chunkSize)return false;return true;}public void SetBlock(int x, int y, int z, Block block){// InRange 故名思意就是判断传入的位置是否正确if (InRange(x) && InRange(y) && InRange(z)){blocks[x, y, z] = block;}}
Ok,码到这里基本功能就完工了,让我们运行 Unity,查看效果,此时会报如下错误:
双击点击错误,便来到了报错的位置。报错的位置于“Chunk.cs”脚本中的“SetBlock”函数,这里为什么会报错,怎么看也没毛病啊。经过克森一系列的猜测,果然如此,组件的一些方法调用顺序出了问题。具体解决方案就是把“Chunk.cs”脚本你的“Start”函数该为“Awake”即可,如下所示:
void Awake(){filter = gameObject.GetComponent<MeshFilter>();coll = gameObject.GetComponent<MeshCollider>();blocks = new Block[chunkSize, chunkSize, chunkSize];}
好的,继续运行 Unity,居然还是报错了,错误如下:
双击点击错误,便来到了报错的位置。报错的位置于“Chunk.cs”脚本中的“GetBlock”函数,报错信息为数组下标越界。
嘿,这个错误非常眼熟呀,之前的文章中也报了这个错误。其实就是因为我们在“Block.cs”脚本的“BlockData”函数中进行了如下判断:
然后我们是在“Chunk.cs”脚本的“UpdateChunk”函数中调用了“BlockData”函数,如下所示:
在这个函数中,我们会传入的最大值为“chunkSize - 1” ,然而在“BlockData”函数中的判断中会进行“* + 1”(*表示 x、y、z 任意一个),最终会传入“GetBlock”函数中的最大参数值为“chunkSize”,因此便造成了数组下标越界。
Ok,逼逼了那么多,我们该怎么处理了,其实很简单,做个简单的判断即可,这个时候我们的“IsRange”函数便派上用场咯,修改的代码如下所示:
public Block GetBlock(int x, int y, int z){// 判断传入的位置时候位于该 chunk 中,// 如果不存在则默认返回一个“BlockAir”方块(因为 BlockAir 方块是一个空方块,不会影响其它逻辑)if (InRange(x) && InRange(y) && InRange(z))return blocks[x, y, z];return new BlockAir();}
Ok,这个时候再运行 Unity,便会看到如下图所示:
嚯嚯嚯,看来是成功了,倍儿棒。
Ok,让我们杂耍一下我们的成果,修改如下代码:
运行 Unity,便看到如下图所示:
嚯嚯嚯,是我们想要的效果,不错,可以的,兄Dei。
接下来让我们看一下生成的 Chunk 网格是怎么样的,具体操作步骤如下所示:
嚯嚯嚯,不错,也是我们想要的效果。chunk 里的多余的面被过滤掉了,这样便节省了贼多性能,哦耶!
Ok,文章至此基本结束了,最后让我们为“World.cs”脚本添加两个有用的函数,代码如下所示:
public Block GetBlock(int x, int y, int z){Chunk chunk = GetChunk(x, y, z);if (chunk != null){Block block = chunk.GetBlock(x - chunk.pos.x,y - chunk.pos.y,z - chunk.pos.z);return block;}else{return new BlockAir();}}public void DestroyChunk(int x, int y, int z){// 逻辑简单,就是找到指定的 chunk,然后先销毁游戏对象,再移除管理即可(移除对应字典的值)Chunk chunk = null;if (chunks.TryGetValue(new WorldPos(x, y, z), out chunk)){Object.Destroy(chunk.gameObject);chunks.Remove(new WorldPos(x, y, z));}}
代码逻辑较为简单,因此就不逼逼了,好了,文章至此就结束吧。
本章源码:
链接:https://pan.baidu.com/s/1O4n7JjQVy8ibc6G1DhBmHQ
提取码:6403
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- linux下 mount IMG文件提示“您必须指定文件系统类型”
在做实验关于Qt raspberry时https://wiki.qt.io/Raspberry_Pi_Beginners_Guide解析命令知识点1.loop 设备在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件…...
2024/4/21 0:27:54 - 程序员角度下使用 SIR 模型预测 nCoV
“首先我先介绍一下背景,这篇文章完全是出于个人兴趣以及知识科普而言,并不代表真实性和权威性。使用模型预测流行传染病的疫情发展趋势,是数学建模中常见的手段。其实在过年的时候就一直在想,之前大学的时候做了那么多次的数学建模竞赛(虽然没取得过什么优异的成绩),通…...
2024/4/21 0:27:53 - 基于Java语言实现Socket通信
基于Java语言实现Socket通信由于近日项目需求,需要在服务器中增加Socket通信的功能,接收硬件设备发送的心跳包和相关数据,因此又重新对Java的网络编程进行了复习,根据项目的实际情况做了简化的编程,实现了简单的通信过程。1. Socket通信原理源IP地址和目的IP地址以及源端口…...
2024/4/21 0:27:52 - 基于unity3d IFC的虚拟仿真系统
转载于:https://www.cnblogs.com/herd/p/8073278.html...
2024/4/21 0:27:58 - C#Socket通信原理(基础篇)
这几天博主花了4天时间去学习,整理Socket通信。大致懂了一点,现在我来总结一下关于C#Socket通信的原理首先我们要知道网络中的进程是如何进行通信的在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的…...
2024/4/20 21:02:24 - Linux系统如何让普通用户具有mount权限
直接运行mount命令挂载分区一定要root权限。如果想普通用户能直接挂载分区,只有这个做了。1 使用root用户权限,将 /bin/mount命令创建一个副本,比如:all_mnt cp /bin/mount /bin/all_mnt2 root用户为 all_mnt命令设置执行时自动赋予root权限 chmod u+s g /bin/all_mnt…...
2024/4/20 21:02:23 - Unity3d墙角漏光解决方法(适用Unity3d5.6-2019版)
一些网友在用Unity3d烘焙室内场景时,常常出现墙角“漏光”,很多人试图通过加大灯光阴影的分辨率和设置内墙为双面物体,似乎都无济于事,就这一问题,笔者通过如下图示给出解决方法,供大家参考:以上是个人的一些经验,如有不妥,请大家指正,更多有关Unity3d 5.6、2017、20…...
2024/4/20 21:02:22 - 基于Tensorflow的酸奶销量预测分析
# coding:utf-8 # 酸奶成本为1元,利润为9元 # 预测少了相应的损失较大,故不要预测少 # 导入相应的模块 import tensorflow as tf import numpy as np import matplotlib.pyplot as pltBATCH_SIZE=8 SEED=23455 COST=3 PROFIT=4rdm=np.random.RandomState(SEED) X=rdm.randn(1…...
2024/4/20 21:02:21 - android socket通信(上)
android socket通信(上) 今天我们介绍android下的socket通信,并编写一个小程序:android作为客户端,通过socket发送数据到我们的pc机,pc机就是服务器。分两个实验完成:我们先在模拟器上实现,然后在真实的手机上实现。1.设置环境,两个实验均在ubuntu11.04下完成:第一个…...
2024/4/25 2:22:23 - Unity3D教程:实现基于Socket通讯的公共聊天室
多个客户端一同使用就是一个简单的公共聊天室。服务端为一个控制台程序使用C#实现,当然,在Unity3D中也相应地使用了C#语言实现客户端,服务端和客户端能实现消息的互通,当服务端接收到某客户端发送过来的消息时将会对客户端列表成员进行广播,这是公共聊天室的最基本的形式。…...
2024/4/21 0:27:49 - mount远程挂载专题
重点参考:(Good)如何利用mount命令挂载另一台服务器上的目录https://www.cnblogs.com/puloieswind/p/5853401.htmlmount命令设计 挂载NFS服务器中的共享目录命令 # mount -t nfs 172.16.75.1:/software /mnt/远程mount挂载操作步骤 文件服务器(被挂载…...
2024/4/21 0:27:48 - nodejs系列(10)实现socket通信
Socket主要作用是实现客户端与服务端的实时通信保持通话,它不像ajax请求,每次对话完成后都会把连接断开。Socket通信在Node.js中实现其实很简单,没有想象中复杂,基本上只要懂得监听(.on)和推送(.emit)消息,即能实现Socket通信。Socket服务端在服务端使用Socket,需先引…...
2024/4/21 0:27:47 - 下列时间序列模型中,哪一个模型可以较好地拟合波动性的分析和预测?
题目:下列时间序列模型中,哪一个模型可以较好地拟合波动性的分析和预测? AR模型 MA模型 ARMA模型 GARCH模型(正确) --------------------------------------------------------------------------------------------------------------- 时间序列中常用预测技术 一个时间序…...
2024/4/21 0:27:47 - Unity3D如何快速入门
目录Unity3D游戏引擎介绍Unity3D学习历程Unity3D快速入门途径 Unity3D游戏引擎介绍 Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。使用Unity…...
2024/4/21 0:27:45 - socket通信和websocket通信协议
socket通信网络上的两个程序通过一个双向的通信链接实现数据的交换,这个链接的一端称为一个socketsocket通信流程图服务器端通过创建一个socket的通信链接,然后绑定socket和端口号并监听,就可以接收来自客户端的连接请求了,前提是客户端也有socket并且连接到了该服务器所在…...
2024/4/25 11:33:48 - linux下mnt目录作用(mount的使用)
转自: https://www.cnblogs.com/twtp/p/5654870.html 一.mount 英文解释登上; 爬上; 攀登; 骑上; 乘上; 跨上 可直接理解为“挂载” 挂接光驱、USB设备的目录,加载后,会在mnt里多出相应设备的目录。mnt是mount的缩写。二.Mount命令 需要注意的: 1、挂载点必须是一…...
2024/4/21 0:27:44 - 数模(5):Malthus和Logistic模型
Malthus拟合和Logistic拟合是两种最典型、应用最广泛的拟合模型。它们分别被用于预测人口增长和物种增长,因此被广泛应用于社会学与生物学领域。 Malthus拟合 通常情况下,每年的人口死亡率与出生率是相同的。因此可以设每年的人口增长率为常数,我们记时刻t的人口数目为x(t),…...
2024/4/21 0:27:42 - [Unity3D]Unity3D游戏开发之飞机大战项目讲解
大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目。这是一个比较综合的项目,希望对大家学习Unity3D有所帮助,我会在文章最后给出项目代码。作为一个游…...
2024/4/21 0:27:41 - QT - 创建TCP Socket通信
QT创建TCP Socket通信最近在学习QT,了解到QT可以进行SOCKET网络通信,进行学习,并建立一个简单的聊天DEMO。为了测试是否能与VS2012下的程序进行通信,在VS2012下建立一个客户端程序,进行通信测试,发现可以进行通信。由此也可以证明,对于采用同一种通信协议(TCP)的两个程序…...
2024/4/21 0:27:41 - linux内核sys_mount()分析
1. 概述今天本来打算写一篇关于linux内核sys_mount()代码分析的文章,习惯性地打开google,看看是否有别人写的比较好,可以参考参考,打开第一篇发现居然是自己以前写的博客,真是囧,而且也记录在CSDN上,本想直接行使拿来主义,但看了下内容,发觉略有不妥,于是在那篇博客的…...
2024/4/21 0:27:40
最新文章
- 电子防潮柜出厂前要经过哪些测试?
电子防潮柜在发货前应执行一系列质量控制测试以确保其功能正常、性能稳定且能够满足用户存储物品对湿度控制的需求。以下是沐渥电子防潮柜出厂前的测试流程: 1)除湿性能测试:检查并验证防潮柜能否按照设定的湿度目标值准确运行,可…...
2024/4/26 17:17:38 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Python 潮流周刊#44:Mojo 本周开源了;AI 学会生成音乐了
△△请给“Python猫”加星标 ,以免错过文章推送 你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。本周刊开源,欢迎投稿[1]。另有电报频道[2]作为副刊,补充发布更加丰富的资讯,…...
2024/4/24 11:19:08 - iOS 利用URL解析技术,实现域名、路径、文件名和文件类型的获取
前言 在iOS开发中,我们经常需要处理URL,例如从网络下载数据、处理网页跳转等。为了更好地理解和操作URL,我们需要解析URL的各个组成部分,包括域名、路径、文件名和文件类型。本文将教你如何利用Swift的URL解析技术,轻…...
2024/4/26 13:40:50 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/25 11:51:20 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/25 18:39:24 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/25 18:38:39 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/25 18:39:23 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/25 18:39:22 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/25 18:39:22 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/25 18:39:20 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/25 16:48:44 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/26 16:00:35 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/25 0:00:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/25 4:19:21 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/25 18:39:12 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/25 13:19:01 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/25 18:38:58 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/25 18:38:57 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57