自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (2)
  • 收藏
  • 关注

原创 unity实现使不同尺寸物体总能较完整的显示在相机范围内

最后是简单的鼠标控制相机拖拽,旋转,缩放观察模型,若需要射线监测点击物体则需要注意射线发射的位置为鼠标位置减去RawImage左下角位置,具体代码如下。unity通常会有将一个模型展示在界面上用于旋转缩放观察的功能,通常是使用相机看向模型,然后使用RawImage显示相机看到的画面。但很多时候展示的模型尺寸与中心点是差别较大的,就需要自适应的修改模型的位置使其能够完整的显示在屏幕中心位置,下面就是相关代码。最后就是展示模型时调用上述方法即可。首先将物体的子物体进行网格合并。然后计算物体的几何中心点。

2024-02-27 10:08:19 606

原创 Unity插件-Cinemachine

(例如vc1混合到vc2,一项是From:vc1,To:vc2,一项是From:vc1,To:ANY CAMERA,那么前面那项是更符合要求的,会被使用)若有多条最符合要求的,则选择最先找到的那一条。在设置VirtualCamera的时候,我们知道,当给VirtualCamera设置了Follow目标时,Camera就可以跟随着我们设置的目标移动,而通过设置Body属性,可以设置相关的跟随方式。我们可以将除了正在使用的VirtualCamera都关闭,来达到最佳的性能。这步操作的快慢,我们可以通过。

2023-10-19 11:12:30 745

原创 A星寻路优化方案

对于地图信息已知且各障碍位置固定的情况下,可以将常用的位置及其之间的路径信息保存,然后寻路时分别找到离开始点,结束点较近的位置,分别进行寻路,再将路径组合得到最终路径,不过此路径可能较正常寻路出的路径较远但寻路用时较少。

2023-10-13 17:05:38 361

原创 Unity-Input System新输入系统插件学习

3.多设备支持与手柄震动实现。

2023-09-20 10:14:32 711

原创 FinalIK反向动力学插件学习

CCDIK适用于非人体骨骼,存在多个关节的物体,如多关节机械臂。其中Target、Weight、等参数与之前的无异,主要是Bones需要将机械臂的关机分别加载进入并调节Weight即可,有时需要限制机械臂个骨骼节点的旋转,可以添加Rotation Limit Angle(锥形范围限制),Rotation Limit Hinge(扇形范围限制)

2023-09-19 13:38:57 379

原创 Unity粒子系统ParticleSystem各模块及其参数学习

用户可以使用回调作为一种简单的方式来在粒子进入碰撞器时消除它(例如防止雨滴穿透屋顶),或者此模块用来修改任何或所有粒子的属性。它将粒子的开始寿命乘以一个值,该值取决于生成粒子的对象的速度对于大多数粒子系统,这是游戏对象速度,但对于子发射器,速度来自子发射器粒子源自的父粒子。根据粒子的初始行进方向定向粒子。如果一个粒子与帧中的多个碰撞器交互,则会返回与该粒子交互的碰撞器列表中的第一个碰撞器。锥体在其顶点处的角度,角度为0时呈圆柱体发散粒子,角度为90时呈圆盘形状发散粒子(此时粒子在平面内发射)

2023-09-13 15:54:09 1581

原创 Unity实现MQTT服务器

到这服务器与客户端脚本完成,接下来只需要写一些测试脚本,调用上面脚本的接口,即可完成服务器的开启/关闭,客户端连接,收发消息等功能。然后再/Source/MQTTnet/bin/Debug/net452 文件夹中找到生成的文件。解压好后使用vs打开,并生成.dll文件(我这里下载的是4.1.2.350版本)新建unity工程,创建Plugins文件夹,将文件复制到该文件夹内。然后新建脚本MyMqttServer,代码内带有注释。创建脚本MyMqttClient,代码内带有注释。

2023-09-01 11:30:48 1045 22

原创 设计模式-单例模式

很多时候我们的单例是只有访问时才会加载的,属于懒汉式,这个单例的生命什么时候结束脱离了GC的掌控,只能靠我们自己去释放,如果忘记释放或者提前被释放容易产生各种问题,(其他开发者不知道你什么时候释放单例,所以就无法释放)使用单例可能会让一个类复杂多种职责,容易让单一文件过大,代码复杂性上升,一个GameManager统计分数还计时,还存玩家信息,又存地图信息…我们在全局都能通过静态访问单例,容易让用户误操作,而且让代码散乱不安全,如果有100个单例…根据创建的时机可以分为饿汉式和懒汉式。

2023-08-15 13:15:01 1629

原创 设计模式-抽象工厂模式

抽象工厂模式:该模式是对工厂模式的拓展,因为工厂模式中创建的产品都需要继承自同一个父类或接口,创建的产品类型相同,无法创建其他类型产品,所以抽象工厂模式对其进行拓展,使其可以创建其他类型的产品。缺点:当新增一大类产品时需要修改工厂脚本,违反开闭原则。优点:创建的产品种类不单一。

2023-08-15 12:12:34 577

原创 设计模式-工厂模式

工厂模式:该模式是将简单工厂模式中的工厂作为一个基类(接口),当需要创建的产品(具体子类实例)增加时,不修改原工厂的创建方法,而是增加一个具体工厂子类,由该子类去创建新增的产品,将产品子类的实例化延迟到工厂子类中。优点:降低了耦合性,只需要知道要什么产品,不用管创建过程;缺点:代码复杂度提高。

2023-08-15 11:58:42 803 1

原创 设计模式-简单工厂模式

简单工厂模式又称为静态工厂模式,其实就是根据传入参数创建对应具体类的实例并返回实例对象,这些类通常继承至同一个父类,该模式专门定义了一个类来负责创建其他类的实例。缺点:违反了开闭原则(即对修改关闭,对拓展开放),当有新的具体类需要创建时都需要修改工厂类中的创建方法,多增加判断。优点:将对象的创建于使用分离,创建完全交给工厂类来实现。这就是工厂类,提供一个方法创建具体类的实例。

2023-08-15 11:32:12 610

原创 自定义UI界面inspector面板(Editor)以及自定义参数在inspector面板内显示效果(PropertyDrawer)

若要修改参数在inspector面板显示,需要新建一个脚本继承PropertyDrawer,然后添加特性[CustomPropertyDrawer(typeof(参数类名))],然后实现OnGUI()方法,示例如下。该脚本继承Editor,加上特性[CustomEditor(typeof(具体界面类))],然后实现OnInspectorGUI()方法即可自定义inspector显示面板,效果图如下。平时我们在搭建一个界面后都会给这个界面添加一个界面脚本,一般情况下都是普通的MonoBehaviour的。..

2022-08-11 12:38:02 1190 1

原创 Unity中List的底层源码剖析

1、list底层代码剖析List是C#中一个最常见的可伸缩数组组件,我们常用它来代替数组。因为它是可伸缩的,所以我们在编写程序的时候不用手动去分配大小,接下来我们来看看list的底层实现。public class list<T> :IList <T>,System.Collections.IList, IReadOnlyList <T>{private const int _ defaultCapacity = 4;private T...

2022-05-24 19:28:21 1002

原创 英雄联盟血条效果Shader

由于不会使用Step和Clip方法,所以使用了更消耗性能的if**else**下面为自己实现的ShaderShader "MyShader/MyLifeBarGap"{ Properties { [HideInInspector] _Width("每100血的宽度", float) = 10 _Color("血条颜色", Color) = (1,1,1,1) _BlackWidth("分隔线宽度", float) .

2022-04-29 17:07:42 580

原创 反射和特性之特性学习

特性是将额外数据关联到属性(以及其他构造)的一种方式。它不依赖与选项名与属性名的完全匹配,可利用特性指定与被修饰的构造有关的额外元数据。可用特性将一个属性修饰为Required(必须),并提供选项别名。特性要放到所修饰构造前的一对方括号里,例如:public class Person{ [CommandLineSwitchAlias("name")] public string name; [CommandLineSwitchRequired] public i

2022-04-28 17:08:51 165

原创 反射和特性之反射学习

反射:访问程序集中类型的元数据,其中包括像完整类型名和成员名这样的构造,以及对一个构造进行修饰的任何特性。通俗点将就是可以通过object.GetType()或typeof()方法来得到一个变量的Type类型,然后获取该类型数据的所有属性、方法以及特性。反射是指对该类型数据内所有属性、方法和特性进行检查访问的过程。可以通过object.GetType()或typeof()方法来获取数据类型;通过Type.GetProperties()方法来获取数据类型内的属性;通过Type.GetMet

2022-04-28 11:52:06 256

原创 Unity Shader学习之Unity Shader中常用变量、文件等说明

1.顶点/片元函数声明#pragma vertex name#pragma fragment name其中name为函数名2.常用语义POSITION语义告诉Unity,用模型空间的顶点坐标填充变量NORMAL语义告诉Unity,用模型空间的法线方向填充变量TEXCOORD0语义告诉Unity,用模型的第一套纹理坐标填充变量TANGENT语义告诉Unity,用模型空间中顶点的切线方向填充变量COLOR语义用来存储颜色信息其中TEXCOORD语义支持TEXCOORD0~

2022-04-26 11:54:41 1789 1

原创 Unity UGUI优化之图集打包

Unity2020版本以后的打包方式1.在Editor->ProjectSettings->Editor中将SpritePacker的Mode修改为Always Enabled(总是启用)或者Enabled For Builds(在构建时启用)。2.在Package Manager中找到2D Sprite并导入3.在Project视图右键,Create>2D>Sprite Atlas,创建图集4.选中创建的图集,将要打包的图片或文件夹,放置到图集文件的Objects

2022-04-25 14:09:41 3399

原创 Unity UGUI优化之Scroll view优化

Unity原来的Scroll view会一次性实例化所有的元素,然后使用遮罩使固定区域显示一部分元素,这种情况会占用多余资源,所以Scroll view的优化方案就是只实例化界面内同时最多能显示的元素数量,然后在滑动时修改应该隐藏的元素的位置与内容,使其出现在应该新出现的元素的位置,实现元素的重复使用。使用方法:首先将MyScrollView脚本挂到ScrollView上,然后设置好行、列间距;然后将SVController脚本也挂在ScrollView上,设置好myScrollView属性为S

2022-04-25 11:39:23 2181 1

原创 Unity Shader学习三:坐标空间的变换

(注意,由于格式问题,)假设现在有一个父坐标空间以及一个子坐标空间,已知父级坐标空间中子级坐标空间的原点位置以及3个单位坐标轴,此时一般由两种需求:一种是将子坐标空间下表示的点或矢量Ac转换到父坐标空间下的表示Ap;另一种需求是反过来,即把父坐标空间下表示的点或矢量Bp转换到子坐标空间下的表示Bc。可以使用下面的两个公式来表示这两种需求:Ap = Mc-p AcBc = Mp-c Bp其中Mc-p表示从子坐标空间变换到父坐标空间的变换矩阵,而Mp-c是其逆矩阵(即反向变换)。此时,只需求解出

2022-04-22 11:07:49 1780

原创 Unity Shader学习二:矩阵的学习

矩阵从外观上来看就是一个长方形网格,每个格子里放了一个数字,它是由m x n个标量组成的长方形数组。矩阵通常用于进行变换,比如在顶点着色器中,需要把顶点坐标从模型空间变换到齐次裁剪坐标系中。矩阵既然是网格结构,就意味着矩阵由行(row)列(column)之分,如m x n 矩阵表示矩阵由m行n列组成,...

2022-04-20 16:21:54 3670

原创 Unity Shader学习一:矢量的点积和叉积

矢量的点积点积的名称来源于这个运算的符号:a•b。中间这个圆点符号是不可省略的,在Unity Shader中,可以直接使用形如dot(a,b)的代码来对两个矢量进行点积 的运算。点积的公式由两种形式第一种:两个三维矢量的点积是把两个矢量对应分量相乘然后再取和,最后的结果是一个标量, 公式为:a•b = (ax, ay, az)•(bx, by, bz) = axbx + ayby + azbz矢量的点积满足交换律,即a•b = b•a点积的几何意义很重要,因为点积几乎应用到了图形学的各个

2022-04-19 17:19:53 3268

原创 刚体,碰撞器,触发器简单学习

刚体

2022-03-04 08:48:45 381

原创 Shader的学习(简单Shader)

1.什么是OpenGL、DirectXShader可以认为是一种渲染命令,有OpenGL或者DirectX进行解析,来控制渲染图形GLSL shader语言用于OpenGLHLSL shader语言用于DirectX使用CG编写的shader可以跨平台,既可以在OpenGL上解析,也可以在DirectX上解析。2.unity shader的分类使用ShaderLab编写Unity中的Shader,分类1:表面着色器 Surface Shader,相当于对顶点/片元着色器进行了

2021-12-01 11:00:39 878

原创 基于网格的A星寻路算法的实现

A星寻路算法解决的问题:用来计算玩家行进路线,通过他可以计算出避开阻挡的最短路线 A星寻路的基本原理:A星寻路算法的基本原理就是不停的找出自己周围的点,选出一个新的点作为起点,然后循环执行上面的步骤 A星寻路的详细原理: 寻路公式消耗:f(寻路消耗)=g(离起点距离)+h(离终点距离) 开启列表:存储新起点的周围的点,以及各点的寻路消耗,得到最小消耗存入关闭 列表并从开启列表移除 关闭列表:存储已经比较得到的路径点, 格子对象的父对象 注意,每次比较开启列表内的最近点时,之前的..

2021-12-01 10:26:42 59

原创 有限状态机学习

有限状态机:数量有限的多个状态在不同的条件下相互转换的流程控制系统。适用范围:状态,条件不确定的情况下或者不同种角色每种角色有不同的状态对应不同条件时。使用方法:状态机三要素:状态,条件与状态转换表。状态转换表:表内显示当前状态,输入(条件)是什么,对应的下一个状态的输出是什么。状态机:管理所有状态,协调组织状态的迁移。首先是条件的枚举,存储所有的条件,赋予条件ID(FSMTriggerID)using System.Collections;us.

2021-10-20 17:02:26 19

原创 基于QT5下Multimedia多媒体模块实现的简易音乐播放器

项目描述:该项目使用QT5下的多媒体模块与界面功能实现了简洁的播放界面,歌曲列表,独立歌词字幕, 具有功能包括:歌曲的循环播放,随机播放,单曲循环,播放/暂停切换,上下曲切换,音量调节,声音的打开与关闭,歌曲进度显示与调节(总时长显示),桌面歌词的显示与关闭,添加本地歌曲。运行演示播放模式切换暂停/播放功能音量调节与进度调节由于截图无意义就不截图了,还有上下曲切换也...

2018-10-25 19:04:31 4452 4

原创 多人在线即时通讯项目演示与源码

项目描述:该项目采用C/S架构,利用TCP协议进行通讯,采用Sqlite3数据库进行信息的存储,同时使用多线程方法实现了多个客户端向服务器发送信息与接受服务器信息一次来进行通讯。 采用轻量级数据库Sqlite3在服务器端记录存储注册用户信息如昵称,账号,密码,个性签名等。 实现的基本功能包括:注册,登录,修改密码/签名,私聊,群聊,查看在线用户,查看聊天记录,管理员的禁言/解除禁言,踢人,...

2018-10-19 19:48:39 1093

原创 指针与引用

指针与引用的区别如下:(因为引用的本质为常指针,所以引用于常指针特性相同)1.初始化要求不同:引用在创建时必须初始化,即引用到一个有效的对象;指针在定义时不必初始化,他可以在定义后的任意位置重新赋值;2.可修改性不同:因为引用的本质为常指针,所以引用在初始化之后不能修改为其他对象的引用,给引用赋值并不是修改他与原对象的绑定关系;而指针则可以在任意时刻修改为指向其他对象的指针;3.不存在...

2018-10-19 15:22:39 116

转载 同样可以实现互斥,互斥锁与信号量有什么区别

援引CU上一篇帖子的内容: “信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量...

2018-10-13 16:38:26 270

原创 写一个函数,实现strstr

要求:写一个函数,实现strstr,即从一个字符串中查找另一个字符串的位置,如 strstr("12345","34")返回值为2,             在2号位置找到字符串34。#include &lt;stdio.h&gt;#include &lt;iostream&gt;#include &lt;string.h&gt;using namespace std;int ...

2018-10-13 11:32:03 987 1

原创 编程题:编写一个代码,将“i am from shanghai”倒置为“shanghai from am i”

题目要求:编写一个代码,将“i am from shanghai”倒置为“shanghai from am i”,即将句子中单词的位置调换,                   但不改变单词内部的顺序#include &lt;stdio.h&gt;#include &lt;iostream&gt;#include &lt;string.h&gt;using namespace st...

2018-10-13 10:54:39 669

原创 编程题:将一个char组成的字符串循环右移n个

题目要求:编写一个函数,作用是把一个char组成的字符串循环右移n个,比如原来是"abcdefghi",如果n = 2;移位后应该是"hiabcdefg"。#include &lt;stdio.h&gt;#include &lt;iostream&gt;#include &lt;string.h&gt;using namespace std;void downll(char *st...

2018-10-10 20:53:29 1679

原创 编程题:用C写一个输入的整数,倒着输出整数的函数,要求用递归的方法

#include &lt;stdio.h&gt;void print(int i){ int j; if(i != 0) //判断给的数不为0 { j = i%10; //让整数对10求余,得到最后一位 printf("%d",j); i /= 10; //将整数的最后一位去掉,递归调用该函数 print(i); } else printf...

2018-10-10 20:36:25 3224

原创 const在C与C++中的使用

在C语言中const修饰只读变量,例如  const int a = 0; 此时a为只读的,不能通过  a = 10;这种手段进行值的修改,若想修改a的值,可通过指针来完成,如  int *pa = (int *)&amp;a, *pa = 10;此时 a 的值变为10;在C++中,若const修饰变量,则该变量变为常量,存储在符号表中,使用时在从符号表中取值,且编译器是不会为该常量分...

2018-10-08 20:20:49 270

原创 编程题:通过编程实现输出2的1000次方

#include &lt;stdio.h&gt;#include &lt;iostream&gt;#include &lt;string.h&gt;using namespace std;int main(){ int a[1024]; //先定义一个足够大的数组 for(int i = 0;i &lt; 1024;i++) { a[i] = 0; } a[0...

2018-10-08 19:33:38 734

原创 几大常用排序,冒泡,选择,插入,希尔,堆排,归并,快排以及相关改进

#include &lt;stdio.h&gt;#define MAX 10typedef int ElementType;typedef ElementType ARR[MAX];void swap(ARR arr,int i,int j){ ElementType temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}vo...

2018-10-08 13:54:36 227

原创 编程题:使用二分查找法,查找第一个大于或等于某个数的下标

题目要求:使用二分查找法,查找出第一个大于或等于某个数的下标例如:int[]a = {1,2,2,2,4,8,10},查找2,返回第一个2的下标1,查找3返回4的下标4,查找4返回4的下标4,如果没有则返回-1.#include &lt;stdio.h&gt;#include &lt;iostream&gt;#include &lt;string.h&gt;using namesp...

2018-10-08 13:50:24 7108 1

原创 编程题:输入五个数含小数,负数,对他们排序

题目要求:输入五个数含小数,负数,将他们按从小到大进行排序例如输入:./a.out -1 2.1 -3 5 7  输出:-3 -1 2.1 5 7#include &lt;stdio.h&gt;#include &lt;iostream&gt;#include &lt;string.h&gt;using namespace std;void paixu(float *a,in...

2018-10-07 19:25:37 359

原创 编程题:将一个字符串中连续最长的数字串打印出来

题目要求:写一个函数,原型为int continumax(char *outputstr,char *inputstr),功能:在字符串中 找出连续最长的数字串,并把这个串的长度返回,同时把这个最长的数字串付给其中一个参数outputstr所指内存,例如:"abcd12345ed125ss123456789aa"的首地址传给inputstr后,函数返回9,outputstr所指的值为1234567...

2018-10-07 18:57:56 729

与unity相似的颜色面板

实现了与unity中设置颜色面板相似功能的颜色设置器,支持全屏幕颜色拾取,支持通过输入hex设置颜色,支持一键应用初始颜色等功能。 由于需要支持全屏幕颜色拾取(不局限于unity 的Game视图),所以使用了.net的System.Drawing.dll和System.Windows.Forms.dll来实现屏幕快照的功能 在使用时有些注意事项: 1.需要在ProjectSettings--Player--Other Settings中勾选“Allow unsafe code” 2.两个dll类库是.net4.5的,需要在ProjectSettings--Player--Other Settings将“Api Compatibility Level”设置为“.Net 4.x”

2023-12-12

A*PathFindingProject(A星寻路插件)

一款强大的A星寻路插件,可实现2D,3D寻路,带有多个示例场景

2023-10-16

A星寻路优化-unity工程包

对简单版本的A星寻路进行了优化

2023-10-13

MQTT物联网协议学习-客户端测试工程+mqttfx调试工具

MQTT物联网协议学习-客户端测试工程+mqttfx调试工具

2023-08-29

unity插件ASE(Amplify Shader Editor 1.8.9.035)

unity插件ASE(Amplify Shader Editor 1.8.9.035)

2022-03-08

基于socket网络编程的聊天室

1. 采用 Client/Server 架构 2. Client A 登陆聊天服务器前,需要注册自己的 ID 和密码 3. 注册成功后,Client A 就可以通过自己的 ID 和密码登陆聊天服务器 4. 多个 Client X 可以同时登陆聊天服务器之后,与其他用户进行通讯聊天 5. Client A 成功登陆后可以查看当前聊天室内其他在线用户 Client x 6. Client A 可以选择发消息给某个特定的 Client X,即”悄悄话”功能 7. Client A 可以选择发消息全部的在线用户,即”群发消息”功能 8. Client A 在退出时需要保存聊天记录 9. Server 端维护一个所有登陆用户的聊天会的记录文件,以便备查 1. Server 可以内建一个特殊权限的账号 admin,用于管理聊天室 2. Admin 可以将某个 Client X “提出聊天室” 3. Admin 可以将某个 Client X ”设为只能旁听,不能发言” 简单完成版,后续还有新功能会添加!!!!!

2018-09-25

空空如也

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

TA关注的人

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