自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 收藏
  • 关注

原创 【go-libp2p学习笔记】使用go-libp2p搭建中转服务器(circuit relay server)

libp2p算是一个蛮新的库,提供了非常强大的p2p节点发现/连接/通信能力。IPFS的基石。中文网上的**技术教程**比较少,所以抛砖引玉开一点坑来体验一下!

2022-11-01 11:32:03 3599 12

原创 Go语言入门笔记

GO语言入门,个人用方便复盘回看

2022-10-02 15:05:59 747 3

原创 UnityMirror学习笔记(8):自定义类的序列化与反序列化

在Mirror中,只有序列化的数据能被网络底层接口传出去到其它端,然后再通过反序列化构造出这些数据对应的对象。默认情况下,只有官方的类,Mirror才自带序列化与反序列化方法。不过写自定义类的序列化和反序列化方法很简单:创建一个静态类,拥有两个静态方法:class BackPackItem{ public string itemName; public int num; public BackPackItem(string itemName, int num){

2022-03-04 23:04:36 1241 5

原创 UnityMirror学习笔记(7):SyncList与SyncDictionary

Mirror是一个简单高效的开源的Unity多人游戏网络框架。官方文档链接:https://mirror-networking.gitbook.io/docsSyncVar在大多数情况下都能很好的实现数据同步,然而一个脚本里最多只可以有64个SyncVar,因此需要学习SyncList和SyncDictionary来更好地实现多数据、结构化数据,在客户端和服务器之间的同步。SyncList声明与构造// 这里作为 NetworkBehaviour的继承类的 成员变量readonly Sy

2022-03-04 20:47:38 4049 1

原创 UnityMirror学习笔记(6):权限与运动控制

Mirror是一个简单高效的开源的Unity多人游戏网络框架。官方文档链接:https://mirror-networking.gitbook.io/docs在之间的几章博客里,已经基本介绍了UnityMirror的各种有用的概念。但是并没有详细介绍如何在Mirror中,随心所欲地控制任何一个对象。如果有读者仿照我之前的实验代码去自己实验,会发现很多问题,比如rigidbody.velocity,transform.position无法在本地直接设定等。当然可以通过[Command]等通知服务

2022-03-03 16:31:29 7744 5

原创 UnityMirror学习笔记(5):NetworkBehaviour 参数和方法接口 与 钩子方法 与 一些注意点

Mirror是一个简单高效的开源的Unity多人游戏网络框架。官方文档链接:https://mirror-networking.gitbook.io/docsNetworkBehaviour是Mirror中的核心脚本基类之一,有必要熟悉它。就像MonoBehaviour有许多参数接口(transform)和生命周期钩子函数(Awake / Start),继承自MonoBehaviour的NetworkBehaviour也提供了很多接口供我们使用,这里对常用的进行介绍。大多数参数都可以根据接口注

2022-03-02 15:03:53 7421 1

原创 UnityMirror学习笔记(4):创建自定义prefab,并解决网络ID引用数据不同步的问题

Mirror是一个简单高效的开源的Unity多人游戏网络框架。官方文档链接:https://mirror-networking.gitbook.io/docs必要性首先解释一下标题的含义,这里复现一下所谓网络ID引用数据不同步的问题场景。假设玩家A有一个跟随物,他不是玩家A这个对象的儿子,而是同级的一个对象。它拥有一个独立的网络ID(NetworkIdentity),我们希望一开始这个跟随物不存在,在玩家A召唤后才出现。并且玩家A引用到跟随物的网络ID,从而控制其跟踪自己。若此时又进来一个

2022-02-28 22:28:43 1528

原创 UnityMirror学习笔记(3):服务器与客户端间的函数调用,互发控制指令:Command,ClientRpc,TargetRpc

Mirror是一个简单高效的开源的Unity多人游戏网络框架。官方文档链接:https://mirror-networking.gitbook.io/docs从客户端发送指令由服务器调用APIMirror提供了一个特性Command来进行从客户端到服务器的远程控制指令,它的核心逻辑就是,当客户端的脚本调用此特性修饰的函数时,服务端的对应的对象执行此函数。这意味着函数中的代码不会在客户端执行。基本的用法是在需要进行远程调用的函数前编辑特性标签:[Command]void cmdRemot

2022-02-27 21:42:38 6775

原创 UnityMirror学习笔记(2):使用SyncVar进行数据同步

Mirror是一个简单高效的开源的Unity多人游戏网络框架。在这里按照油管dalao的教学流程,与官方文档学习常用的API及操作。https://www.youtube.com/watch?v=eFHDKflitqQ&list=PLkx8oFug638oBYF5EOwsSS-gOVBXj1dkP&index=1https://mirror-networking.gitbook.io/docsAPIMirror提供了一个特性SyncVar来进行数据同步,它的核心逻辑就是,当服务器

2022-02-27 15:41:12 5833 1

原创 UnityMirror学习笔记(1):安装与简单使用

Mirror是一个简单高效的开源的Unity多人游戏网络框架。在这里按照油管dalao的教学流程,与官方文档学习常用的API及操作。https://www.youtube.com/watch?v=eFHDKflitqQ&list=PLkx8oFug638oBYF5EOwsSS-gOVBXj1dkP&index=1https://mirror-networking.gitbook.io/docs安装Mirror在Unity商店中是免费的,因此直接加入自己的资源库并在导入即可:导入

2022-02-27 15:38:55 3841

原创 Unity学习笔记(10) Unity使用EZSoftBone实现2D骨骼动画飘带效果

EZSoftBone属实是一个棒的开箱即用的Unity插件,能帮助我们很容易实现Unity3D或2D中的飘带效果。是个开源项目,去Star!https://github.com/EZhex1991/EZSoftBone同时在Unity商店中可以直接获取到https://assetstore.unity.com/packages/tools/physics/ezsoftbone-148136使用方法b站有作者的全套教程,github上也有md文档可以看。https://space.bilibi

2022-02-10 16:10:49 2112

原创 Unity学习笔记(9) Unity材质属性块MaterialPropertyBlock——多个同类实例使用不同材质属性

在Unity中,默认情况下对同一个预制体创建出来的不同实例,是公用同一个Material以及Shader的,因此对一个实例的Shader属性修改后,别的实例也会产生相应修改,有种Shader的参数是静态的感觉。而如果需要不同实例使用不同的材质着色器参数时,就需要使用材质属性块MaterialPropertyBlock()。性能分析可以看这一篇,还是优化挺多的。使用方式也很简单: prop = new MaterialPropertyBlock(); GetC

2022-01-31 16:37:27 4491

原创 UnityShader实例(1) 基于2DSprite实现圆环

想要在Unity2D中实现一个漂亮的圆环,但是除了前面做过的各种笔记和自学,啥都不会,但是成功摸索出来,在这里记录一下理解流程。源代码和使用方式在最下面。2D圆环的最简单实现圆环最简单的实现就是自己画一个背景色透明的圆环:(下面是一张图片,不信你把浏览器背景色调一下)然后直接往场景里一放就行:当然这种方式很不行,拉伸大了之后模糊感太大,很难看,而且不易控制大小:使用Shader实现2DShader的简单探索(最终代码在最后)首先2D中用的都是Sprite做渲染,所有显然不适合直接用

2022-01-30 16:13:17 3322

原创 Unity小工具 姿态复制脚本——以骨骼动画关键帧跨动画复制为例

做骨骼动画动画时,想要让动画之间的过渡变得更好,想做一个新的AnimationClip将两个动画先后衔接起来。这里试了很久没法直接将两个不同动画间的关键帧进行复制,就写了一个脚本帮忙直接在物体上复制姿态,然后可以更好的操作进行动画。原理原理就很简单,深度优先搜索遍历物体的儿子们,将被复制的和复制的两个物体所有儿子的Transform设置相同即可。脚本源代码新建脚本复制进去即可,会自动编译using System.Linq;using UnityEngine;using UnityEdit

2022-01-29 14:24:32 3004 3

原创 Unity学习笔记(8) Unity残影效果整理,3D、2D、通用方案

Unity做残影效果是个不难的工作。但是一些细节会对使用方法产生限制,这里整理一下各种情况下推荐的残影效果实现方案1.3D网格 (高性能)2.2D人物 (非骨骼动画) (高性能)3.其它场景 (包括2D骨骼动画人物) (低性能)3D人物Unity3D的渲染主要是靠Mesh+Shader,3D场景下人物往往用SkinnedMeshRenderer做网格渲染,这样方便换装系统。无脑推荐这篇,针对使用了SkinnedMeshRenderer的网格(也就是带蒙皮的网格),无需创建新实例,而是直接调

2022-01-26 23:00:52 4078

原创 Unity学习笔记(7) Unity2D骨骼动画制作流程

素材制作用PS做一个将人物各个部件(骨骼)都分解开来的人物模型。导出时注意选择PSB模式,不然无法分层读取。导入Unity直接将PSB文件拖拽进去工作区,记得选择精灵模式为多图片模式:骨骼绑定进入Sprite Editor,用Skinning Editor模式:绘制骨骼用Create Bone创建骨骼。需要有一个骨骼能够联动影响其它骨骼时,先左键选中此骨骼,然后创建其他的。网格化可以直接使用Auto Geometry,调整自动网格化的参数,生成受到骨骼影响的网格:可以

2022-01-26 21:32:49 10642 5

原创 Unity学习笔记(6) UnityShader学习笔记_5:纹理的使用——渐变纹理与遮罩纹理

笔记都是照着“Unity Shader入门精要”摘抄的,为以后想要复习实现方便。渐变纹理这个比较简单,实际就是为了光照强弱表现更为直观化地控制。本质还只是色彩纹理,只需要将渐变纹理运用到漫反射光照控制上。Shader "Custom/Ramp Texture"{ Properties{ _Color ("Color tint", Color) = (1, 1, 1, 1) _RampTex ("Ramp Tex", 2D) = "white"{}

2022-01-20 22:05:50 977

原创 Unity学习笔记(5) UnityShader学习笔记_4:纹理的使用——纹理贴图与凹凸映射

笔记都是照着“Unity Shader入门精要”摘抄的,为以后想要复习实现方便。纹理贴图本质上就是计算任何一个片元用贴图哪一个像素的颜色。这里主要是算在环境光计算中,从下面代码可以看出。代码使用上一节基于Phong光照模型,为之添加单张纹理计算。单张纹理贴图添加的代码在行末注释第一个字符是+号:Shader "Custom/SingleTexture"{ Properties{ _Diffuse ("Diffuse", Color) = (1, 1, 1, 1)

2022-01-20 17:11:31 1156

原创 Unity学习笔记(4) UnityShader学习笔记_3:标准光照模型的底层原理

笔记都是照着“Unity Shader入门精要”摘抄的,为以后想要复习实现方便。标准光照模型上面是考虑光照时抽象出的背景情况,光照模型Lighting Model就是用于根据材质属性、光源信息等得出在某个观察方向的出射度的过程。也就是着色(Shading)过程。标准光照模型使用自发光、环境光、高光反射和漫反射来叠加计算出摄像头看到的物体的光(颜色)环境光和自发光环境光是一个全局变量,在Unity中设置,在Shader中可以通过UNITY_LIGHTMODEL_AMBIENT获取。自发光暂时

2022-01-16 23:12:07 626

原创 Unity学习笔记(3) UnityShader学习笔记_2:一些渲染流水线的图形学知识 与 UnityShader编写实例

一些渲染流水线的图形学知识 与 UnityShader编写实例。笔记都是照着“Unity Shader入门精要”摘抄的,为以后想要复习实现方便。渲染流水线流程从虚拟的世界渲染到屏幕上的像素。也就是:1.从虚拟世界定义的各种几何图形——主要是三角形面,2.转换到数字世界裁剪空间的片元——是一个二维平面光栅化后的每一个"像素",但不是真正意义上的显示在屏幕的像素点,而是用于插值设置颜色的最小单位3.最后在输出到屏幕的一个个像素上。最主要的图形学内容是各种坐标变换。缩放、平移、旋转。涉及到很

2022-01-16 13:47:58 581

原创 Unity学习笔记(2) UnityShader学习笔记_1:UnityShader的基础结构

笔记都是照着“Unity Shader入门精要”摘抄的,为以后想要复习实现方便UnityShader是Unity在一般的编写渲染管线流程上,抽象出来的一层Shader编写接口,主要是指定各种着色器所用代码,当然还有其它一些内容。更方便快捷。使用ShaderLab这种说明性语言。一个UnityShader的基础结构Shader "ShaderClassName/ShaderName"{ /*第一行用于起名字,可以用'/'分割使得在Unity的Inspector面板中实现分类*/ Propert

2022-01-15 11:31:41 459

原创 计协教程(2): 面向对象程序设计

简述本节简单介绍一下什么是面向对象的程序设计思路。首先对其意义做介绍,也就是为什么要面向对象。抽象意义上一个对象就是用来描述、操作一个具体事物的控制实体。而具体事物是显然不断在变化升级的,因此控制实体也需要不断升级以适配事物的新发展。而通过面向对象的程序设计,可以极大提高控制实体的代码复用程度,减少在更新换代中需要写的代码量。比如说一个游戏的主角可以转职,转职前只能移动、跳跃和使用近战攻击,转职后可以远程了,使用面向对象的程序设计思路,以主角作为一个对象,转职前移动跳跃的代码完全可以不必写(连

2022-01-15 10:44:25 403

原创 Unity学习笔记(1) Chronos时间控制及应用案例

官方的教程足够用了,为了方便,在这里记录一下https://ludiq.io/chronos/tutorial导入Chronos组件。用Chronos控制各个物体的时间,本质上是通过控制物件参照的时钟,再在脚本中用Chronos帮忙做好的时间计算代理代替原来的物理/运动控制。第一步 设置参照时钟有三种时钟,一是全局时钟,一是区域时钟,三是本地时钟全局时钟只需要静态设置看向此类时钟,物件就能受到该时钟影响区域时钟是需要挂载在一个有触发器碰撞体的物体上,进入碰撞体内部的发生触发事件的物体就会被影响

2022-01-14 10:01:47 1571 1

原创 Vue学习笔记(1) v-指令系列

v-html直接在本DOM元素加入用html描述的DOM子元素<div v-html="htmlString"></div>data:{ htmlString:`<div class="sonDOM"> Hello World </div>`}v-bind用在DOM元素的属性定义上。下面这个例子就表示使得DOM元素的class属性等同于Vue实例的className,后者变化时,前者会同时变化。<div v-bin

2022-01-12 15:11:24 274

原创 线性代数笔记(8) 各种矩阵分解:对角、三角、满秩、QR、奇异值分解

已经考完了,考的很开心,下次还考()记录一下各种分解的做法:三角分解LDR又称为Cholesky分解LR分解就直接设分解下来的下、上三角矩阵各未知数,根据矩阵运算解方程即可。最简单了。对角分解正规矩阵总能对角分解:分解流程:满秩分解最后一步其实就相当于P^-1取前r列,Q^-1取前r行。其中r为A的秩。行最简型就是各行第一个为1,且所在列其他行为0,列同理。QR分解QR分解就是分解成酉矩阵(单位正交基)*上三角矩阵的形式例题:奇异值分解PQ均为酉矩阵。下

2022-01-04 09:46:47 2715 2

原创 线性代数笔记(7) 向量、矩阵的范数

向量、矩阵的范数在向量、矩阵(复数域)上定义一个关于内部各个元素的运算,只要运算满足以下规律就可以成为范数正定性:||A|| >= 0,且当且仅当为0向量(0矩阵)时取等号齐次性:||kA|| = |k| · ||A|| ,k为一个复数三角不等式:||A+B|| <= ||A|| + ||B||此外对于方阵还有一个相容性(乘法不等式)4. 相容性:||AB|| <= ||A||·||B||一些常用的向量、矩阵范数https://blog.csdn.net/zaishui

2021-11-24 15:32:32 1806

原创 线性代数笔记(6) 矩形的相似——标准型与约当标准型及求法

矩阵相似的定义对两个矩阵A B,他俩相似的定义就是,存在这样一个可逆阵,使得:我们可以称为相似变换矩阵的标准型矩阵的标准型就是经过相似变换,把它变成一个对角矩阵当然不是所有的矩阵都可以这样变的,其充要条件是有n个线性无关的特征向量或说有n个不同的特征值(这两者是等价的说法)于是就可以对应矩阵分量相等,解方程求Pi就行啦矩阵的约当标准型一个矩阵有n个线性无关的特征向量是个相对比较严格的条件我们希望找到通用的矩阵能相似变换得到的最简单的某种形式的矩阵约当标准型就是这样的矩阵它

2021-11-17 17:29:34 34398 8

原创 线性代数笔记(5) 矩阵多项式的运用——哈密顿-凯莱定理

定理概念哈密顿-凯莱定理讲的就是将一个矩阵 A 的特征多项式 f(λ)中的 λ 替换为矩阵本身后的多项式 f(A),其值为0使用因此我们随便拿出一个矩阵 A 就可以直接写出一个恒等方程 f(A) = 0这个方程可以用在很多地方典型用法比如:对于别的更高次的矩阵多项式可以先用f(A)除F(A)得余式,其和F(A)等价于是就很大程度降次了最小零化多项式上述的f(A)就是一种零化多项式,即带入A的值计算后答案为0矩阵的多项式而这样的多项式有很多,他们都叫零化多项式我们希望能找到次数最

2021-11-17 16:20:39 7397

原创 计算机网络笔记-TCP建立连接的MSS值如何确定

查了一圈发现讲的都很庞大(不适合当作答案抄),就事论事来说,基于IEEE802.3协议下实际是这样的情况:IEEE802.3协议规定的以太网最大帧长为1526字节,其格式如下https://blog.csdn.net/farmwang/article/details/641313181、前导码:7字节0x55,一串1、0间隔,用于信号同步2、帧起始定界符:1字节0xD5(10101011),表示一帧开始3、DA(目的MAC):6字节4、SA(源MAC):6字节5、类型/长度:2字节,0~150

2021-11-06 14:02:28 1943 1

原创 计协教程(1): 编程入门与C语言基础

对编程的理解:“让计算机去帮忙完成一些事情”。白话讲就是“计算机,你先要干什么,然后干什么,或者再重复做一些什么……最后得到什么并输出来”这样功能上更具体一些:“使得数据变换一种形态”给定一些从现实问题中抽象出来的数据,计算机在你的教唆下对这些数据处理,得出你需要的数据。编程就像是魔法将编程比作是魔法是很合理的。发动魔法需要“素材”——也就是编程需要数据,发动魔法需要画法阵或者是念咒,也就是处理这些数据的功能性语句,编出来的程序。目前最最初始阶段,大家不用太注重数据,因为水平的原因对一个好

2021-10-24 13:49:40 323

原创 WebRTC学习笔记(1) 前端Web纯原生JS实现P2P数据通道连接

基于https://www.bilibili.com/video/BV1Wi4y1N74y标题纯原生JS的意思就是,不含任何后端代码,服务器搭建等操作,用最纯粹的方式实现主要原理WebRTC的原理我的白话理解就是,两个客户端,创建自己的地址信息(SDP)...

2021-09-23 18:22:33 1284

原创 线性代数笔记(4) 特征向量/值与基变换

学到很后面才接触到这两个概念,然而突然发现,居然早在三年前高考的道路上,我就已经会用应试的方法处理这个问题了!!都想通后发现其实没什么很好理解。P13 和P14 一起看,尝试去理解特征向量的意义核心https://www.bilibili.com/video/BV1ys411472E?p=13https://www.bilibili.com/video/BV1ys411472E?p=14本节的图源依然来自上述视频特征向量/值的定义对于一个矩阵,它的若干组特征向量与特征值满足下面的等式,也就是

2021-09-13 20:33:46 707 1

原创 线性代数笔记(3) 向量叉积的几何理解

这一篇看https://www.bilibili.com/video/BV1ys411472E?p=12可能稍微有点绕,但主要是因为英语表述的问题短时间听起来说了一大堆话,讲的还是清楚的本节图源都是上面的视频叉积的一般概念两个向量的叉积结果也是一个向量v x w = c其中c的数值为以v w为相邻边的平行四边形面积,方向上符合v 到w的右手定则而从c向量的求解上,有一种简单巧妙的求解方法:如下,将分别代表x、y、z轴单位向量的i j k 和v w的各个分量写成行列式的方式,求算之,则得到c =

2021-09-13 09:34:03 763

原创 线性代数的思考(2) 向量点积的几何意义统一化理解

为什么不看看生动形象的视频理解呢~https://www.bilibili.com/video/BV1ys411472E?p=10向量点积点积有两种好记好用的理解方法,他们都可以基于做功去理解:假设b是个均匀分布的力场,a为收到其中作用进行的一个运动。第一种基于几何:a点乘b等于一方(例b)投影到另一方(例a)的长度乘以另一方的长度(此处为a)另一种基于代数:他们的点积就是a的x方向运动长度与b的x方向分力大小的乘积,加上a的y方向运动长度与b的y方向分力大小的乘积那么这两者,从数学的角

2021-09-12 21:20:21 983

原创 线性代数的思考(1) 坐标变换与基融合理解

3Blue1brown的线性代数课很大程度上弥补了我大学课堂学习线性代数时缺少的直观思维。下面讲的大学课堂为本人的上课经验,无普适性。https://www.bilibili.com/video/BV1ys411472E?p=6原片的动画效果做的很棒,这一系列都十分值得大家去看对坐标变换(特指线性变换)与基的融合理解大学课上讲坐标变换,并没有将其与基的真正关联内涵讲清楚,以至于我最多只能能一定程度上想象出来一个坐标变换(矩阵)对变换前空间中的一个向量是怎样拉伸与旋转的,但是并未能真正搞清楚计算出来的

2021-09-12 12:13:36 305

原创 ROS学习笔记(3) Cliet-Server与自定义服务数据类型

创建发送请求的客户端客户端每执行一次,就发送一个请求,当小海龟模拟器接收到这个spawn请求并解析其中的位置信息时,就会在对应的坐标产生一个小海龟//turtle_spawn.cpp#include<ros/ros.h>#include<turtlesim/Spawn.h>int main(int argc, char **argv){ ros::init(argc, argv, "turtle_spawn"); ros::NodeHandle n;

2021-09-11 16:02:38 198

原创 ROS学习笔记(1) 基础命令操作-自用

在workspace目录下(即包含build、devel、src的工作区下)使用命令在当前的命令行加载工作区环境变量source devel/setup.bash给予文件可执行权限sudo chmod +x [文件名]创建package,在workspace的src下列出所有正在运行的noderosnode list打开 RQTpublisher模拟 的可视化窗口,可用指定频率向指定频段发送信息(在ubuntu桌面上启动)rosrun rqt_publisher rqt_publi

2021-09-11 08:05:24 103

原创 ROS学习笔记(2) C++例程创建、发送/订阅机制、自定义消息

按照指定频率向小海龟控制频段发送移动数据//velocity_publisher.cpp#include <ros/ros.h>#include <geometry_msgs/Twist.h>int main(int argc, char **argv){ ros::init(argc, argv, "velocity_publisher"); ros::NodeHandle n; ros::Publisher turtle_vel_pub = n.

2021-09-11 08:05:00 392

原创 Vue笔记(1):基础模板指令与概念大杂烩

绑定Vue实体 可使用占位符设置实体内部的字符串数据<div id="app"> {{content}}</div>let app = new Vue({ el:'#app', data:{ content:'hello World' }})循环产生html元素循环语句的写法<ul> <li v-for="item in list">{{item}}</li></ul>data : {

2021-09-09 14:47:48 89

原创 Spring笔记(9):SpringBoot WebSocket 实时语音聊天

主要参考了这两篇博客https://blog.csdn.net/zhang45362613/article/details/112538607这一篇的采集方案,采集到语音数据后上传服务器https://blog.csdn.net/qq422243639/article/details/79238983这一篇的自动播放方案,websocket接收到数据后,立即播放其实这一篇涵盖了采集的方案,但是代码有许多过时的语句,也就没有采用前端代码:其中有很多需要调用的js文件,可以直接去git这个项目,里

2021-08-28 21:34:24 3866

空空如也

空空如也

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

TA关注的人

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