- 博客(28)
- 收藏
- 关注
原创 Unity中使用Protobuf(纯小白也可学会)
在unity中使用protobuf进行网络通信前的proto相关配置,以及提供批处理文件一键生成所有proto文件对应的cs文件
2025-01-07 16:34:38
1757
原创 Unity强联网之解决Tcp粘包方案(原理篇)
所有强联网游戏都会遇到一个问题,那就是Tcp的粘包。既然想要解决这个问题,那么就需要知道问题是怎么产生的,然后才能对症下药。众所周知,Tcp的Socket当收到数据时,操作系统会将接收到的数据存在接收缓存区中,此外还有一个发送缓存区。这两个缓存区程序不能直接对其操作,只能通过socket.Receive,socket.Send等方法间接操作,并且Receive方法只是将接收缓存区中的数据提取出来;而Send方法也只是将数据写入发送缓存区中,具体操作还是由操作系统负责。OK,扯了这些,那么和粘包有啥关
2021-03-25 00:34:16
791
原创 消息事件系统(案例)
消息事件系统在游戏开发中,客户端内部有一套自己的消息事件系统是很有必要的,它会极大的帮助代码解耦,同时很方便的对自定义的消息类型进行绑定事件和在适当的时候调用。概括来说,以下消息事件系统的原理大致是用一个hashtable来存储事件类型以及事件类型所对应的回调方法,这个回调方法可以添加多个,同时也可以在需要的地方删除一个或多个。如果读者有更好的做法或方案,欢迎在评论区留言。(注:该文章是本人根据姜雪伟老师所著的《unity3d实战核心技术详解》所写,仅作为一种消息事件系统的方案供感兴趣的童鞋参考和了
2021-03-24 23:32:37
546
原创 NavMeshAgent寻路扩展组件
NavMeshAgent官方扩展组件简要该组件算是unity官方提供的专门针对NavMeshAgent自动寻路系统做的一个扩展插件;针对于Unity内置的寻路系统,该扩展组件提供了额外的功能,例如可以动态Bake地形;动态拼接地形,物体可以从平地移动到墙面上等。本人从这里学习了相关的知识。此博客只是当做笔记给需要此功能的人做个学习例子(如有错误欢迎指出,持续更新中)使用方式将官方扩展组件下载并解压之后将Assets文件夹下所有的文件拷贝到工程中(Unity版本最低为5.6)例子1.可以设置烘焙自
2020-11-10 14:00:08
952
原创 获取文件MD5码
void GetMD5(string path) { if (!File.Exists(path)) { Debug.Log("不存在该文件"); return; } FileStream stream = File.OpenRead(path); MD5 md5 = new MD5CryptoServiceProvider(); byte[] v...
2020-08-29 15:40:30
198
原创 Unity从网络中获取图片加载到物体上
Unity使用UnityWebRequest从网络中获取图片并加载在2D/3D物体上首先从网络中获取资源使用的是协程(从来没遇到在主线程中下载资源的情况)如果图片附加到2D/3D物体上出现红色问号,要么是路径有问题,要么是代码逻辑有问题(协程内部的逻辑有没有问题,调用协程有没有问题(是用StartCoroutine来调用协程的,别傻乎乎的像调用普通的方法一样去调用协程,那样不起作用(我就犯过这个错)))如果是从网页中随便找的一张图来给物体赋值的话,要检查这个图片的地址有没有问题(图片地址一般是.jpg
2020-08-29 15:06:05
2373
1
原创 Unity使用ScriptableObject进行本地存储
本人在B站Up主M_Studio的视频中学习了使用该方法进行本地存储,下面是代码和实现效果原视频链接:单个物品的属性以及信息:using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 鼠标右击会显示该菜单/// </summary>[CreateAssetMenu(fileName ="New Item",menuName ="Inven
2020-06-10 17:01:05
1272
原创 Unity:AssetBundle打包
1.给资源进行分类命名并且加对应的后缀2.创建打包后的文件夹(此处用StreamingAssets文件夹下的Windows文件夹为例3.在工具类中写打包的方法工具类代码如下:using UnityEngine;using UnityEditor;public class MyTest : Editor{[MenuItem(“Itools/BuilderOne”, false, 34)]public static void TestOne(){string outPath = App
2020-06-09 22:06:58
528
原创 UnityAStar算法入门解析(A*算法寻路)
A*算法广泛用于MMORPG游戏的寻路功能,本人在B站Up主唐老湿的视频中学习了一段时间,总结出其原理和实现过程。视频链接:公式:f(寻路消耗)=**g(自身离起点距离)+*h(自身离终点距离)原理:将地图分成若干个方块(结点),从起点周围的8个结点找到不是位于地图边缘和障碍物的结点,放到开启列表中,再从开启列表中找出f值最小的结点,放入关闭列表中;重复执行该步骤,直到起点等于终点为止。此时,关闭列表存放的就是最短路径,从最后一个结点开始判断自身有无父结点,有的话就存放到新的列表path中。最后反
2020-06-09 18:07:00
922
3
原创 Lua面向对象
C#中,对象是由属性和方法构成的,但是Lua最基本的结构是table,所以可以通过table来模拟C#中的对象属性和方法。Lua中可以使用table+function的方式模拟出C#中的类里面的方法,继承可以通过元表来模拟继承之后可以通过点访问父类的属性,点和冒号访问父类的方法Parent={}--表示自己可以查找自身Parent.__index=Parent--可以让其他表继承该表function Parent:New() -- body local mySelf={} mySelf
2020-06-08 19:12:33
127
原创 Lua元表
Lua元表就相当于给一个table外接一个表,当想要找一个元素的时候,如果Lua从自身的表中没有找到该元素的话就会从外接的元表中去找,如果找到该元素就会通过__index来返回,如果找的过程中有方法的话,就会调用该方法,等到方法完成之后再继续找;如果自身表以及元表中都没有该元素,那么就返回nil对指定的表设置元表:mytable={}mymetatatable={}–使用setmetatable关键字对表创建一个元表:setmetatable(自身表,外接的表)setmetatable(mytab
2020-06-08 18:20:40
178
原创 Unity:对组件进行自定义编辑
1.在Editor文件夹下面创建C#脚本2.引入UnityEditor命名空间并继承自Editor3.在类名上方添加[CustomEditor(typeof(要修改的组件名称))]4.重写父类中的OnInspectorGUI()方法5.在该方法中写想要显示组件的参数信息(此处用Transform组件为例...
2020-05-31 16:18:47
664
原创 Unity:自定义Menu扩展工具
1.创建Editor文件夹(有这个文件夹就不用创建了)2.在此文件夹中创建一个C#脚本,该脚本要引入命名空间:UnityEditor,并继承Editor3.方法必须是public Static类型4.在方法前面加上[MenuItem(菜单名称,bool,显示的序号)](注意:菜单名称必须是“菜单名/方法的功能名称”,否则就报错...
2020-05-31 16:02:38
339
原创 Unity:实现UI上下翻动效果
1.在Canvas下面创建一个空物体ScrollRect,并添加ScrollRect组件和Rect Mask 2D组件(ScrollRect组件的功能是实现滑动效果,RectMask2D组件是只显示ScrollRect范围内的UI2.在ScrollRect下面创建名为ViewPort的空物体,并在该物体下面创建名为Constont的空物体,并给Constont添加布局组件(我使用的是Vertical Layout Group3.将ViewPort和Constont拖到ScrollRect组件中对应的位置
2020-05-31 15:05:28
2025
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人