自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

充满智慧的博客

涉及Unity、C#、C等多个领域的技术文章,文章内如有错误,恳请指正。

  • 博客(72)
  • 资源 (1)
  • 收藏
  • 关注

翻译 VSCode官方文档-中文翻译-C/C++环境配置与运行、调试

获取最新版的MinGW-w64,MSYS2提供了最新的GCC、MinGW-w64和其他有用的C++工具和库的本地构建版本。:当你保存或打开一个C++文件时,你可能会收到来自C/C++扩展的通知,通知你有一个Insiders版本可用,该版本可以让你测试新功能和修复。是一个工具,通过添加代码编辑功能,如代码补全、参数信息、快速信息和成员列表,帮助你更快、更高效地编写代码。记住,C++扩展使用你在计算机上安装的C++编译器来构建你的程序。你应该会看到输出,显示你安装的GCC、g++和GDB的版本。

2023-10-13 15:24:05 1075

翻译 Unity多人游戏开发-Netcode for GameObject-官方文档中文翻译

Netcode具有自定义生成处理程序,用于替代UNet的自定义生成函数。请查看对象池以获取更多信息。

2023-08-19 22:14:14 3004

原创 【Unity2022】Unity多人游戏开发教程-Netcode for GameObjects-使用命令行启动多人游戏

Windows10以前的多人游戏开发,有些项目或者教程可能使用的是UNet,当然也有别的方案,但是UNet已经被Unity官方弃用了,也就是说UNet是一个过时的方案,目前正在开发一种新的多人游戏和网络解决方案,名字叫做Netcode for GameObjects。本篇文章的多人游戏解决方案采用的就是Netcode for GameObjects。

2023-07-15 17:17:25 3137

原创 C#中实现接口的一些小知识(C#用abstract或virtual来实现接口成员)

在抽象类(abstract class)中实现接口时,如果抽象类选择部分实现接口(也就是只提供部分成员的实现),那么未实现的接口成员可以在抽象类中声明为。修饰),这并不影响它作为接口成员的实现,也就是说,你只需要实现这个方法,那么就相当于同时实现了接口和抽象类(或虚方法),同时也允许派生类进行覆盖。来实现接口成员,因为接口中的成员默认都是实例成员,并且它们表示一种契约,要求任何实现该接口的类都必须提供这些成员的具体实现。在非抽象类中,如果一个方法同时是接口实现也是基类虚方法或抽象方法(即用。

2024-03-08 22:39:29 497

原创 C#中的浅度和深度复制(C#如何复制一个对象)

接着,我们修改了复制得到的对象及其引用类型字段的属性值,最后输出原始对象和复制对象的属性值。这意味着如果一个类包含引用类型成员,在执行深度复制时,不仅复制这些引用,还会递归地复制引用所指向的对象,直到所有的引用都指向全新的对象实例。当进行浅复制时,系统会创建一个新的对象实例,但这个新对象的字段将与原始对象中的值类型字段具有相同的值,而对于引用类型字段,则仅仅是复制了。也就是说,如果一个类中有引用类型的成员变量(比如数组、其他自定义类的对象等),那么浅复制后,新对象和原对象的这些引用类型成员仍然指向。

2024-02-07 17:36:01 2227

原创 C语言判断输入的字符串中括号是否成对匹配

给定一个只包含圆括号(‘(’ 和 ‘)’)的字符串,使用栈结构判断这个字符串中的括号是否有效,即每一个 ‘(’ 都有与之对应的 ‘)’,并且括号的顺序是正确的。当遇到右括号时,检查栈是否为空;test_case_3: 输入 “(()())”,预期输出:匹配。test_case_4: 输入 “((()))”,预期输出:匹配。test_case_2: 输入 “(())”,预期输出:匹配。test_case_6: 输入 “()(”,预期输出:不匹配。test_case_7: 输入 “(()”,预期输出:不匹配。

2024-01-18 23:16:56 524

原创 安装Unity详细教程(如何获取免费个人版许可证)

Unity Hub是用来管理的,其中并不直接包含Unity编辑器的本体文件,我们需要单独安装Unity编辑器,安装的方法也很简单,就是在Unity Hub的安装页面,如下图所示,点击“安装”-“安装编辑器”。点击登录后会进入到浏览器,如下图所示,如果你有Connect APP,直接通过APP扫码登录,如果没有,也可以通过点击账户登录,然后登录。在使用Unity之前,我们还需要获取相应的许可证,Unity许可证分为多个版本,有免费的,和付费的,免费的具有一定的申请条件。注意观察一下,自己是否符合获取要求。

2024-01-02 22:50:47 4283

原创 C语言计算三阶行列式

编写一个C语言程序,定义一个函数reverse_string(char *str),该函数接收一个字符指针作为参数,用于指向一个以\0结尾的字符串。在循环体内,首先创建一个临时变量 temp 来存储 start 指针所指的字符,然后将 end 指针所指的字符赋给 start 指针的位置,最后再将之前暂存的 temp 赋值给 end 指针的位置。通过这样的步骤,实现了两个指针所指字符的原地交换。然后,将原字符串末尾的字符(索引为 last 的位置)赋值给第一个字符的位置(索引为 i 的位置)。

2024-01-01 21:26:30 621

原创 C语言编写函数将字符串逆序存放

每次循环中,交换 tempPtr 指针和 endPtr 指针指向的字符,并将两个指针分别向后和向前移动一位。定义了两个指针 first 和 last,分别指向字符串的开头和结尾,还有一个变量 temp 用于交换字符。对于每个非空字符,将 length 的值增加 1,并将 tempPtr 指针向后移动到下一个字符。开始一个循环,条件是 first 指针没有达到 last 指针,也就是还没有达到字符串的中点。通过循环,使指针 last 移动到字符串的结尾部分,即指向字符串的末尾的空字符 ‘\0’。

2023-11-11 13:03:53 1056

原创 C语言编写链表的初始化、插入、删除、打印操作

如果 prev 为空,说明要删除的节点是头节点,将 *head 指向 (*head)->next,然后释放 current 节点的内存。然后,检查链表是否为空,如果为空则将新节点直接设置为头节点,如果不为空则遍历链表直到找到链表尾部,将新节点链接到尾部。首先,使用两个指针 current 和 previous 来遍历链表找到需要删除的节点,然后通过修改指针的指向来删除节点,并使用 free 释放节点所占用的内存空间。通过遍历链表,每次输出当前节点的值,然后将指针指向下一个节点,直到链表末尾。

2023-11-11 12:34:42 313

原创 C语言计算字符串中数字字符的个数

下列题目需要学习字符串、指针后才可练习。

2023-11-11 11:16:06 2404

原创 C语言编写学生成绩管理系统-要求有增删改查(C语言基础题-9道)

StudentItem 用来存储学生的姓名和成绩,而 StudentNode 用来表示链表中的节点,它包含一个 StudentItem 类型的变量和一个指向下一个节点的指针。该函数要求用户输入要修改成绩的学生姓名和新的成绩,然后从链表头开始遍历每个节点,寻找匹配的学生姓名。比如,如果用户选择添加学生,我们会创建一个新的节点,然后获取学生的姓名和成绩,最后将其添加到链表的开头。该函数首先遍历链表,找到最后一个节点,然后创建一个新节点,要求用户输入学生的姓名和成绩,并将新节点添加到链表末尾。

2023-11-06 14:37:22 667

原创 C语言编写图形化界面-为按钮指定样式-监听按钮点击事件

看到其符号常量的十六进制值,想必我不说你也能看出来,这就是默认值,也就是说,就算我们不使用此标志,也是没有关系的,默认创建的就是这个。可以发现CreateWindow 函数的自由度还是比较高的,但创建的时候需要填写的内容太多了,我们之前只是简单的进行了一个封装,使其完全丧失了自由度,接下来我们进行新一轮的封装,让其为我们后续的开发提供更大的便利。前面那个复选框,你可以发现,他点击后并没有勾选,使用BS_AUTOCHECKBOX (0x00000003)可以创建一个自动复选框样式的按钮。

2023-10-27 15:04:24 1535

原创 C语言编写图形界面-创建按钮

在该函数中,使用 CreateWindow 函数创建一个按钮对象,并设置按钮的属性,包括文本内容、位置和大小等。使用 “BUTTON” 表示创建一个按钮控件,注意,这个类名是预定义的,不是我们自己自定义设置的,所以如果要创建按钮的话,这里只能填入"BUTTON"。CreateWindow函数的第二个参数同样是字符串类型,用于指定按钮控件的上显示的文本内容,即按钮上显示的文字。要在窗口上显示一个按钮,我们可以在窗口过程函数中处理 WM_CREATE 消息,在该消息中创建按钮并设置相关属性。

2023-10-27 14:35:18 1440

原创 C语言定义一个结构体并为其初始化(C语言基础例题7例)

本篇文章的题目为C的基础练习题,结构部分。做这些习题之前,你需要确保已经学习了结构的知识。题目主要考察结构的初始化,用于巩固初始化结构的知识。

2023-10-24 19:41:00 218

原创 C语言实现计算二维数组每列最大值与最小值的差值(C语言基础例题5例-二维数组篇)

本篇文章的题目为C的基础练习题,二维数组部分。做这些习题之前,你需要确保已经学习了二维数组的知识。

2023-10-24 11:30:57 1000

原创 C语言将数组中的数逆序存放(C语言基础编程练习3题-指针篇)

本篇文章的题目为C的基础练习题,指针部分。做这些习题之前,你需要确保已经学习了指针的知识。本篇文章可以用来在学完指针后加深印象,也可以用于大学课后习题。

2023-10-17 23:11:52 3162

原创 Godot2D角色导航-自动寻路教程(Godot获取导航路径)

当目标位置不在当前网格的时候,他返回的全局坐标是当前网格内离下一个目标点最近的某一点的坐标,也就是网格最边界的某点。我们通过GetNextPathPosition方法获取到的全局点的坐标,并不是直接就到了你的目标位置点,而是通过网格计算出来的,该方法获取到的全局坐标,是你当前角色所位于的网格内的坐标。如上图所示,这是我们创建的导航区域,也就是角色可以移动的区域,仔细观察你会发现,他并不是一整块的,而是由一个一个相邻的网格组成。如下图所示,当目标点位于当前网格内部,则会直接返回目标点的全局位置。

2023-10-17 22:11:45 977

翻译 Godot4.1官方文档-中文翻译-使用TileSets

瓦片地图(tilemap)是一个用于创建游戏布局的瓦片格。使用TileMap节点设计关卡有几个好处。首先,它们允许你通过在网格上“绘制”瓦片来绘制布局,这比逐个放置单个Sprite2D节点要快得多。其次,它们允许更大的关卡,因为它们经过优化,可以绘制大量的瓦片。最后,它们允许你为瓦片添加碰撞、遮挡和导航形状等功能。要使用瓦片图,首先需要创建一个TileSet。TileSet是一组可以放置在TileMap节点中的瓦片。创建TileSet后,你将能够使用TileMap编辑器来放置它们。

2023-10-15 09:48:17 1220

原创 Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)

使用代理,那我们就需要告诉他一个目标位置,然后让它告诉我们移动到那个位置的路径,这个位置我们可以通过设置TargetPosition属性来告诉我们的NavigationAgent2D节点。另外,我们设置了目标位置后,还需要做其他的工作,这就与Unity有所不同,Unity设置好目标后,就可以自动的向着目标点移动,而在Godot中,我们需要在代码中,自动编写移动逻辑,设置了目标点后,只是让引擎来帮你计算到目标点的路径而已,并不帮你移动。然后,我们可以通过这个路径,使该节点沿着路径移动,以达到指定的目标位置。

2023-10-12 23:17:14 949

原创 Godot2D角色导航-自动寻路教程(Godot实现角色随鼠标移动)

Godot为2D和3D游戏提供了多个对象、类和服务器,以便于基于网格或基于网格的导航和路径查找。说到导航,就得说一下导航网格,导航网格定义了角色可以站立和移动的区域,以其中心为基准。官方文档导航部分。

2023-10-09 23:00:40 1192 4

原创 C#声明Employee类实现其构造函数(C#课后练习题-构造函数篇)

本篇文章的题目为C#的基础练习题,构造函数部分。做这些习题之前,你需要确保已经学习了构造函数的知识。本篇文章可以用来在学完构造函数后加深印象,也可以用于大学课后习题。

2023-10-08 22:50:06 1039

原创 Unity2D创建帧动画片段

动画是游戏中一种使对象表现出运动或变换的方式。当涉及到动画时,我们通常就会用到Animator组件。它允许我们在Unity编辑器中创建、管理和控制这些动画,并将其应用于游戏对象。这篇文章将对Animator组件的使用进行部分讲解。

2023-10-06 11:48:47 355

原创 【Unity2022】Unity实现手机游戏操控摇杆(实现操控轮盘)

接下来就可以在其他所需获取输入的地方调用我们的GetInputDirection方法,来获取玩家的输入了,具体示例代码如下所示;创建两个UI图像,一个用于表示背景,作为父物体,命名为JoyStick,一个表示摇杆,命名为Center。背景图像选择一个圆,最好加点半透明的属性,最终完成图如下图所示。

2023-10-04 15:51:43 2071

原创 【Unity2022】Unity实现在两个物体之间连出一条线

DrawRope方法通过计算起点和终点之间的距离,并通过设置Line Renderer的位置数目来确定绳子上的点的数量。然后,我们在循环中使用Lerp函数在起点和终点之间插值来获取每个点的位置,最后将其设置为Line Renderer的位置。我们可以使用LineRenderer组件来实现连线,该是Unity中的一个内置组件,它允许我们在场景中绘制线条。同时要为Line Renderer组件的Materials属性提供一个Material,如下图所示,不然默认是没有Material的,所以线条会呈现紫色。

2023-10-04 13:57:55 3209

原创 【Godot4.1】Godot实现闪烁效果(Godot使用定时器实现定时触发的效果)

在上面代码中,我们定义了 StartBlinking() 方法,该方法会设置 Timer 的等待时间和循环触发,并连接 Timer 的 timeout 信号到 OnTimerTimeout() 方法。接着回到编辑器中,在检查器中找到BlinkingEffect脚本的属性,点击一下Target Node Path属性,在弹出的窗口中选择Sprite2D节点,即可为其赋值。首先弄一个用于显示的Sprite2D,右键单击任意节点,然后选择添加子节点,接着选择Sprite2D,如下图所示。

2023-10-02 20:52:14 535

原创 Unity如何生成随机数(设置种子)

接下来,我们使用Random类的其他方法如Random.Range和Random.insideUnitSphere生成基于自定义种子的随机数。因此,要根据你的项目需求,做好选择。如果有人玩过我的世界,可能会知道种子这个东西,我们在玩我的世界的时候,都知道地图是随机生成的,但是也知道,同一个种子会生成相同的地图,这是为什么呢?其实随机数生成是基于种子的计算,相同的种子将产生相同的随机序列。默认情况下,Random类的种子是基于系统时间的,但你也可以使用Random.InitState方法自定义设置种子。

2023-09-28 22:05:29 2084

原创 Godot信号教程(使用C#语言)| 创建自定义信号 | 发出自定义信号 | 使用代码监听信号

我们可以自定义信号,而不是使用Godot内置的信号,使用自定义的信号要在脚本的类中编写,可以在类的成员变量区域使用signal特性来声明信号。在声明信号时,需要注意信号命名的要求,结尾需要以EventHandler为后缀。代码如下所示。// 声明信号[Signal]通过上述代码,我们声明了一个名为"HealthDepleted"的信号。注意,信号名的末尾必须以"EventHandler"结尾。这是一种命名约定,有助于标识信号与其他方法的区别。

2023-09-26 16:40:37 2532

原创 C#的属性讲解

除了普通属性外,C#还提供了只读属性(只有get访问器)和写入器属性(只有set访问器),以及静态属性和索引器属性等类型的属性,以满足更多复杂的需求。属性只是封装了对类的字段的访问和修改,它们提供了一种更高级的方式来读取和写入字段的值。例如,我们可以在设置器中验证输入值的有效性,并在获取器中返回计算的属性值。当我们定义属性时,我们可以使用自动实现属性来简化代码,特别是对于只提供基本的 get和 set的属性。使用属性时,我们可以像使用字段一样访问和设置属性的值,但实际上是调用了对应的访问器。

2023-09-24 22:00:22 918

原创 VS2022创建控制台应用程序后没有Main了,如何显示Main?

用VS2022创建一个控制台应用后,没有名称空间和Main函数了,只有一个WriteLine,如下所示。

2023-09-24 21:30:55 2482

原创 Android的RecyclerView的getAdapterPosition()方法已弃用,该用什么?(RecyclerView的ViewHolder.adapterPosition已弃用)

这样,当RecyclerView的每个项在屏幕上创建时,都会执行这个onCreateViewHolder方法,为每个项创建一个新的ViewHolder对象,并设置项的点击监听器。首先,我们从给定的parent上下文中获取一个LayoutInflater对象,然后使用它来填充并获取一个名为task_item的布局资源的视图,也就是我们的子项布局。在安卓中,使用RecyclerView时,它的getAdapterPosition()方法已弃用,不能通过此方法来获取当前用户点击的位置了。

2023-09-24 21:08:11 487

原创 安卓实现网格布局的效果

接着,创建了一个自定义的适配器类MyAdapter,并将数据源传入适配器的构造函数中。item_layout是一个用于展示单个项的布局文件,也就是我们在上一节里写的那个子项的布局文件。然后,将该实例设置给RecyclerView的LayoutManager属性,以实现网格布局的效果。然后,创建和设置适配器来展示网格布局中的数据,创建一个类,命名为MyAdapter,来当我们的适配器,代码如下所示。创建一个布局文件作为子项的布局,命名为item_layout,使用的根节点是LinearLayout。

2023-09-24 09:41:23 377

原创 Unity实现角色受到攻击后屏幕抖动的效果

导入这个组件之后,创建一个Chinemachine-2D Camera,接下来我们修改ChinemachineVirtualCamera的Noise,将其设置为Basic Multi Channel Perlin,然后设置Noise Profile为6D Wobble,6D Wobble表示在摄像机位置和方向上的随机扰动。也就是说,通过调整6D wobble的参数,我们可以在实现抖动效果的同时,还可以使摄像机在位置和方向上产生更自然的随机运动。较大的幅度和频率值将会产生更明显的随机抖动。

2023-09-18 09:35:40 1026 1

原创 Godot配置C#语言编写脚本(使用VSCode作为外部编辑器)

在编辑器设置里找到.NET-编辑器-External Editor,设置为Visual Studio Code,然后点击Custom Exec Path,找到你的VSCode启动程序,就是上一小节里的路径。所以我们需要注意保存的脚本编码,如果出现了上图的报错,就查看你VSCode的右下角,编码格式是否为UTF-8,如果不是,就点击下图红框部分,然后选择“通过编码保存”,找到UTF-8,点击即可。哪怕这个非英文的字符是在注释中。打开脚本,进行编辑,会发现自动打开VSCode,并且代码提示功能也是正常使用的。

2023-09-17 12:10:17 1989

原创 Unity实现2D游戏跟随摄像机(平滑移动)

首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在Unity商店中购买的资源,可以点击Window菜单栏> Package Manager选项,来打开Package Manager窗口,如下所示,然后下载你需要的资源。声明一个Transform类变量target,用于指定摄像机要跟随的目标物体,注意要声明成public的,这样我们可以在编辑器中将目标物体赋值给该变量。我们要创建的跟随摄像机具有平滑移动的功能,所以我们需要创建两个字段,一个字段用于表示跟随的物体,一个字段用于表示摄像机移动的平滑程度。

2023-09-11 10:01:55 1290 2

原创 Unity2D实现左右移动的敌人角色

这个名字最好使用GroundCheck,如果你使用了其他名字,在后续的脚本中是需要更改脚本内容的。为分清左右,我们再为敌人角色添加一个眼睛,新建一个圆形精灵,更改其颜色为黑色,然后使其成为Enemy的子物体,调整位置,刚刚好放在它的右边,当做眼睛。然后再Awake方法中获取地面检测点,并且为层赋值,接下来要去编辑器中,创建一个新的层,名叫Ground的层。需要注意的是,这里使用了2D物理引擎来进行地面检测,所以需要确保地面对象上有相应的Collider2D组件,并设置了正确的层,即Ground层。

2023-09-04 21:13:03 703

原创 Unity创建一个可移动的2D角色

我们首先创建一个角色,这里我新建了一个胶囊体用来当Player,一个Square用来当地面。接下来,为角色增加碰撞体和刚体,为地面增加碰撞体。然后我们为Player的刚体增加一个Z轴的约束,避免其东倒西歪。如下图所示:同时,为角色添加一个空物体作为子物体,用来向地面发射射线,检测是否触碰到了地面。将Ground Check置于角色的脚底。接下来我们要新建一个Layer,用于表示地面。将Square改名为Ground,并修改其Layer为Ground。接着新建一个CharacterControll

2023-08-28 16:01:26 873

原创 C语言编写图形界面 | 移动小球示例

把小球的属性定义成全局变量,使其可以在整个文件中使用。我们需要设置小球的初始位置和速度,用于控制小球的移动。初始位置可以通过x和y两个坐标来表示。// 小球的初始位置和速度。

2023-08-24 14:19:15 632

原创 VS2022Toolbox怎么打开(VS2022工具箱在哪)

Toolbox 可提供模板工具、视图组件工具和控制器工具,用于快速创建和编辑 MVC 模式下的视图和控制器。Toolbox 可提供 Web 表单设计器和控件工具,用于可视化编辑并布局 Web 页面的视图和控件。数据库项目:Toolbox 提供了与数据库相关的设计器和工具,如数据源设计器、交互式查询设计器等,用于可视化设计和编辑数据库模式、查询语句等。Toolbox(工具箱)是一个用于开发人员的可视化工具,它提供了一系列可重复使用的控件、组件和工具,可以帮助我们快速构建和设计应用程序界面。

2023-08-23 22:38:15 1442

原创 Visual Studio 2022 右键单击项目没有出现View | View Class Diagram(Visual Studio 无法使用类设计器)

它是 .NET Framework 的轻量级和模块化版本,专注于支持跨平台开发。与 .NET Framework 不同,.NET Core 可以在 Windows、macOS 和 Linux 上构建和运行应用程序,并且能够利用微软以及开源社区共享的类库。.NET Framework 是由微软公司开发的一个软件开发框架,它为开发和运行在 Microsoft Windows 系统上的应用程序提供了一个统一的编程模型。如图,这时一个.NET Framework项目,右键单击,出现了查看类图的选项。

2023-08-23 22:09:12 1155

Android应用图标 3配色 包含所有分辨率 可商用

Android应用图标 3配色 有黄色、红色、蓝色三种配色 图标可以二次修改,可以商用 包含所有分辨率,有mipmap-hdpi-mhdpi-xhdpi-xxhdpi-xxxhdpi。 这个图标适合用于现代科技产品或服务中。 例如: 应用程序图标:在移动设备或电脑上作为某个软件或工具的标识。 品牌标志:作为公司、组织或产品的视觉识别符号。 用户界面元素:在用户界面设计中,作为按钮、开关或其他交互元素的一部分。

2024-02-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除