
C#
C#学习之路
Data菌
这个作者很懒,什么都没留下…
展开
-
Unity-Http协议请求下载系列4:Http应用测试
上篇文章介绍完了Http协议种请求下载资源的方式,现在需要测试。关于本地搭建服务器,读者可以查看本人写的另外一篇博客Tomcat服务器。测试类HttpTestusing System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using System.IO;/* * Author:W * http协议请求下载测试 */namespace W.GameFr原创 2021-07-13 17:07:54 · 630 阅读 · 2 评论 -
Unity-Http协议请求下载系列3:UnityWebRequest
上篇文章介绍了基于HttpWebRequest接口实现的资源请求下载方案,本篇介绍基于UnityWebRequest接口实现的方案。并且是开启协程执行的。首先,写一个全局的协程管理控制器CoroutineManager工具类using System.Collections;using System.Collections.Generic;using UnityEngine;/* * Author:W * 线程工具【全局】 */namespace W.GameFramework.Hot原创 2021-07-13 16:58:08 · 1095 阅读 · 0 评论 -
Unity-Http协议请求下载系列2:HttpWebRequest封装
上篇文章介绍了Http请求的接口封装,本篇具体介绍基于HttpWebRequest接口实现的资源请求下载。HttpWebRequestHelper实现完全重新请求下载和断点续传,并且是异步多线程执行的。using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Net;using System.IO;using System.Text;using System;using原创 2021-07-13 16:50:56 · 1196 阅读 · 0 评论 -
Unity-Http协议请求下载系列1:接口封装HttpHelper
游戏请求服务器下载资源,是很常见的操作。特别是有热更的资源游戏,游戏启动会检查下载Bundle资源。使用的是Http协议。本人查看很多资料,实现服务器请求下载资源的方式大概有2种,其一是NET框架提供的HttpWebRequest接口,另外就是Unit引擎提供的UnityWebRequest接口。另外,是否支持断点续传。本人整合封装了上述2中实现方式,并且支持完全重新下载和断点续传2种下载模式。 这篇文章主要介绍实现Http请求的接口封装类:HttpHelperusing System.Co..原创 2021-07-13 16:44:11 · 802 阅读 · 0 评论 -
Unity Bundle文件加密方式三:DES算法
上篇介绍了AES算法,本篇介绍类似原理的另外一种对称算法。关于该算法的详解,请移看他人博客https://blog.youkuaiyun.com/z784561257/article/details/78174106DES算法封装实现如下:using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Security.Cryptography;using System.Text;usi原创 2021-07-06 19:19:21 · 359 阅读 · 2 评论 -
Unity Bundle文件加密方式二:AES算法
上一篇介绍了原始的加密方式,本篇介绍第2种算法,AES算法,一种对称加密算法,即密钥只有一个,加密和解密都使用相同的密钥。详细原理介绍,请移看他人的博客文章https://blog.youkuaiyun.com/qq_28205153/article/details/55798628AES算法封装实现using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Security.Crypt原创 2021-07-06 19:14:04 · 878 阅读 · 0 评论 -
Unity Bundle文件加密方式一:二进制加密(原始)
Bundle文件是否需要加密?加密又会带来什么影响?这要看文件的重要程度与安全级别,如果不想它被轻易获取,则我们需要对其进行加密。但是对于加密了的文件,访问时需要先进行解密,这无疑会延缓访问速度,而且不同的加密算法方式,其安全级别和解密效率也是不同的。接下来几篇文章,主要介绍一些常用加密算法。该篇文章主要介绍最原始的加密算,就是直接针对文件二进制数据进行异或编码。Byte(原始)异或 key(秘钥)= Byte(加密后),Byte(加密后) 异或 key(秘钥) = Byte(原始)。利用该原理进行加密..原创 2021-07-06 19:05:52 · 1580 阅读 · 0 评论 -
Windows系统本地搭建Tomcat文件服务器
为了模拟测试客户端热更新资源,于是自己需要在自己的电脑上搭建一个服务器,本篇博客介绍整个Tomcat服务器搭建过程。首先,需要下载Tomcat服务器安装包,原创 2021-06-20 14:16:52 · 1017 阅读 · 0 评论 -
Unity-线程工具(六)
自上篇介绍完ThreadManager类后,多线程异步任务工具基本完成。本篇介绍使用该工具,ThreadingTest.cs:线程使用测试类,供参考使用。原创 2021-06-18 10:26:34 · 429 阅读 · 2 评论 -
Unity-线程工具(五)
上篇介绍了ThreadWaitHelper类,ThreadManager.cs:游戏项目多线程管理控制器,其他外界模块系统,只需要通过该控制器开启线程执行任务函数。原创 2021-06-18 10:18:47 · 486 阅读 · 0 评论 -
Unity-线程工具(四)
上篇介绍了线程池多任务处理的脚本实现类。原创 2021-06-18 10:14:38 · 507 阅读 · 0 评论 -
Unity-线程工具(三)
上篇介绍了SingleThreadHelper类,ThreadPoolHelper.cs和MultiThreadedTaskLoadHelper.cs:前者实现使用的线程池ThresdPool和协程Coroutine来处理多任务;后者是在它基础上的再封装和扩展,以方便外界访问。原创 2021-06-18 10:08:23 · 830 阅读 · 0 评论 -
Unity-线程工具(二)
上篇文件介绍了MainThreadHelper类,本原创 2021-06-18 10:01:20 · 463 阅读 · 0 评论 -
Unity-线程工具(一)
进程、线程以及协程的特点:1)进程:一般一个程序对应一个进程,进程是操作系统级别的概念。2)线程:主线程、子线程、线程池、资源的加锁访问,并且它是并行的。单独的线程的执行由操作系统管理(这实际上取决于.NET实现)。 当有多个“逻辑”CPU时,许多线程就能够在不同的CPU上同时执行。多线程的使用情况:大量耗时的数据计算、网络请求(http请求、Socket等)、文件I/O操作、AI、寻路等。3)协程:Unity主线程的协程,不是独立的线程,它是并发的。协程方法可以一段接一段时间地执行,但“节奏”原创 2021-06-18 09:52:53 · 1135 阅读 · 0 评论 -
Unity-Excel表全能转换工具
游戏项目避免不了需要配置各种数据,而这些配置文件一般是由策划来负责编写的。一般他们最喜欢也最熟悉的办公软件就是Excel表了。那怎样把策划编在Excel表中配置的数据导入到游戏项目中来呢?游戏项目中直接使用Excel表可不可以呢?理论上是可以的,笔者似乎也看到过这样的资源插件。但Excel格式文件不是Unity项目通用常见高效地数据存储、传输格式文件如xml/json/lua/csv/db(数据库文件)。因此,一般需要我们程序员写个导表工具。本人写的导表工具有如下几个特点:支持把Excel表中数据一键转原创 2021-06-08 21:14:46 · 2587 阅读 · 14 评论 -
Unity-日志工具
游戏项目开发工程中,既基础也重要的2项重要技能:1)会Debug调试技术 2)会加Log并会看日志信息。本篇文章主要介绍后者,主要介绍在编辑器控制台有效地查看日志信息。最后介绍本人基于项目经验,自己封装扩展的编写的日志工具插件。上面是Unity编辑器日志控制台面板。这里主要介绍上方一排菜单的作用:1)Clear:顾明思义,就是清空控制台所有日志信息。2)Collapse:把相同日志信息“折叠显示”,日志信息后会带数量。3)Clear On Play:是指在编辑器点击运行游戏时,自动.原创 2021-06-01 17:52:32 · 1888 阅读 · 4 评论 -
游戏实时网络通信实现【Socket与FlatBuffer协议】(六)
上篇介绍了关于网络工具的帧调用API的注册监听实现,本篇真正介绍如何使用前面编写的网络工具实现向服务器发送消息,以及监听服务器返回的消息。测试脚本如下:using System.Collections;using System.Collections.Generic;using UnityEngine;using W.NetWork;using MyGame.Sample;using FlatBuffers;/* * Author:W * 网络通信测试 * 1.模拟向服务器发送消原创 2021-05-20 17:17:30 · 312 阅读 · 0 评论 -
游戏实时网络通信实现【Socket与FlatBuffer协议】(五)
上篇介绍完网络工具的实现,本篇介绍辅助类游戏管理器,顾名思义主要是管理控制整个游戏的一些公用的,或者游戏项目各子功能模块的交互等。这边主要介绍“帧”调用事件的注册监听。前面网络通信工具实现中,有部分API需要每帧检查执行。using System;using System.Collections;using System.Collections.Generic;using UnityEngine;/* * Author:W * 游戏管理器 */public class GameMana原创 2021-05-20 17:07:44 · 313 阅读 · 0 评论 -
游戏实时网络通信实现【Socket与FlatBuffer协议】(四)
上篇介绍了传输层Socket的扩展封装,本篇介绍游戏项目应用层对网络的封装。注意的是,使用网络通信协议是FlatBuffer。如果读者不太熟悉该协议,请阅读笔者关于该协议的博客。1)服务器连接的建立与关闭;2)客户端消息的拼接、序列化以及发送;3)服务器返回的消息的监听、反序列化以及派送。using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using FlatBuffe原创 2021-05-18 21:13:18 · 540 阅读 · 0 评论 -
游戏实时网络通信实现【Socket与FlatBuffer协议】(三)
上篇文章介绍了Socket传输单元Byte数组的封装。本篇介绍对网络套接字Socket的扩展封装。1)连接建立与关闭 ;2)byte数据的发送;3)服务器返回的byte数据的监听与接收【使用队列实现缓存】using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Net.Sockets;using System.IO;using System.Threading;using原创 2021-05-18 20:54:07 · 630 阅读 · 0 评论 -
游戏实时网络通信实现【Socket与FlatBuffer协议】(二)
上篇介绍了字节与基本类型数据转换工具的编写。本篇来介绍Byte数组类的实现,Socket网络通信传输的就单元是字节数组,因此有必要对其进行封装。ByteArray既实现了对基本类型数据转换成Byte数组封装;也实现了对Byte数组转换成基本数据类型的封装。using System.Collections;using System.Collections.Generic;using UnityEngine;using System.IO;using System; /* * Author原创 2021-05-18 20:44:44 · 599 阅读 · 0 评论 -
游戏实时网络通信实现【Socket与FlatBuffer协议】(一)
游戏项目基本很难避免不与服务器端通信交互传输数据,除非你只做单机版的游戏。一般的网络游戏在游戏刚启动的时候,需要做资源热更检查处理。这里一般使用http协议,如UnityWebRequest/WWW以及HttpWebRequest等已经封装好的接口来实现。而针对在网络游戏战斗部分,则必须实现长链接,保证数据实时传输发送与接收。一般使用TCP传输协议或者“改善”的UDP协议来实现。这边使用TCP协议。详细的网络通信原理,该系列文章不做介绍,站在项目实用的角度,讲解如何一步一步地实现。本篇文章主要介绍字节与原创 2021-05-18 20:33:43 · 1781 阅读 · 0 评论 -
通信协议-FlatBuffer-C#对象序列化与反序列化
上篇文章介绍了FlatBuffer协议的描述文件的编写和转换。本篇介绍C#版协议的序列化与反序列化操作。新建测试脚本ReadAndWriteTest脚本using System.Collections;using System.Collections.Generic;using UnityEngine;using MyGame.Sample;using FlatBuffers; /* * Author:W * FlatBuffer C#消息的序列化与反序列化操作 */p原创 2021-05-13 11:37:27 · 732 阅读 · 0 评论 -
Unity关于轻量级数据库Sqlite的封装使用
using System.Collections;using System.Collections.Generic;using UnityEngine;using Mono.Data.Sqlite;/* * Author:W * sqlite轻量型数据库使用 * 【注意:记得把Mono.Data.Sqlite.dll文件放在项目工程的Plugins文件夹下】 */public class SqlLiteManager : MonoBehaviour{ public static原创 2020-06-21 22:49:40 · 582 阅读 · 0 评论 -
xml文档的创建与解析
using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Xml;namespace XMLData{ public class XMLDataTest { #region XML文档的创建【实际项目中很少用】 /* *<?xml version ="1.0" encoding="utf-8" ?&g原创 2020-06-20 23:06:56 · 200 阅读 · 0 评论 -
Json数据的序列化与反序列化
using System.Collections;using System.Collections.Generic;using UnityEngine;using LitJson;/* * Author:W * Json数据解析 */namespace JsonDataManager{ [System.Serializable] public class Student { /// <summary> /// 名字原创 2020-06-20 15:20:11 · 408 阅读 · 0 评论 -
游戏设计模式-命令模式
using System.Collections;using System.Collections.Generic;using UnityEngine;/* * Author:W * 命令模式:当发送一个指令、或命令、或执行请求时,如果是立即执行的,则只需调用功能提供者的方法执行即可。 * 但是,如果需要对这些请求命令进行管理,即可以新增、撤销、排序、调度、延迟执行等操作时,则需要将这些请求“对象化”, * 并创建命令管理者来统一进行管理 * */namespace WCommand原创 2020-06-14 16:57:48 · 190 阅读 · 0 评论 -
游戏设计模式-备忘录模式
using System.Collections;using System.Collections.Generic;using UnityEngine;/* * Author:W * 备忘录模式:游戏对象状态【数据】的存盘功能实现 * 针对游戏中有记录状态数据(也有可能有多份即不同版本的)需求的系统,可以专门设计对应的记录类来完成这部分工作。 * 比如AchievmentSystem成就系统,可以设计个AchievementSaveData类来负责保存和读取成就相关数据 。 */names原创 2020-06-14 01:22:13 · 187 阅读 · 0 评论 -
游戏设计模式-组合模式
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;/// <summary>/// 组合模式:游戏对象是以树状结构组合起来的,其实Unity中游戏对象就是以这种模式来组合的;/// 可以根据GameObject和Tranform组件提供的方法,就可以访问该树状结构上的任意一个游戏对象节点/// 因此,这样可以实现UI界面与UI功能分离;美术原创 2020-06-13 16:25:43 · 374 阅读 · 0 评论 -
游戏设计模式-中介者模式
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Mediator{ /// <summary> /// 中介者模式:让GameCenter类对象充当游戏内各系统之间沟通的桥梁或接口,从而降低子系统之间的耦合度 /// </summary> public class GameCenter {原创 2020-06-13 01:26:15 · 296 阅读 · 0 评论 -
游戏设计模式-外观模式
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Facade{ /// <summary> /// 外观模式:将复杂的子系统沟通交给单一的一个类负责,并提供单一界面给客户端使用,是客户端减少对系统的耦合度。 /// </summary> public class GameCenter { p原创 2020-06-11 23:33:47 · 311 阅读 · 0 评论 -
游戏设计模式-状态模式
using System.Collections;using System.Collections.Generic;using UnityEngine;namespace DesignPattern{ /// <summary> /// 角色AI【状态拥有者】 /// 拥有当前的状态,并且可以切换当前的状态 /// </summary> public abstract class ICharacterAI {原创 2020-06-11 23:05:30 · 253 阅读 · 0 评论 -
游戏设计模式-工厂方法模式
using System.Collections;using System.Collections.Generic;using UnityEngine;/* * Author:W * 当类的对象产生,需要复杂的流程,或者需要加载外部资源,或从网络、存储设备、数据库等;或者有对象 * 上限; 或者可重复使用等情况时。 * * 1.角色工厂 * * 2.本地资源加载工厂 * * 3.属性产生工厂 */namespace DesignPattern{ #region 产原创 2020-06-08 19:37:02 · 272 阅读 · 0 评论 -
观察者模式-实际应用-游戏事件系统
using System.Collections;using System.Collections.Generic;using UnityEngine; /* * Author:W * 游戏事件系统 */namespace DesignPattern_Observer{ #region 事件主题实现 /// <summary> /// 游戏事件主题的基类 /// </summary> public abstract cl原创 2020-06-07 01:55:20 · 368 阅读 · 0 评论 -
游戏设计模式-观察者模式
当主题内容发生变化时,它的所有订阅者都会收到通知。/// <summary>/// 观察者基类--->监听该事件的游戏对象基类/// </summary>public abstract class Observer{ public abstract void Update();}/// <summary>/// 具体的观察者1 ---> 监听该事件的游戏对象1/// </summary>public class Obs原创 2020-05-23 23:24:05 · 244 阅读 · 0 评论 -
游戏设计模式-单例
普通类单例几种制作方式如下:/* * Author:W * 单例模式 * 【注意】会随着场景的切换而销毁 */public class Singleton_Common{ /// <summary> /// 普通的单例模式 /// </summary> private static Singleton_Common _instance; public static Singleton_Common Instance {原创 2020-05-23 17:44:38 · 417 阅读 · 0 评论 -
C#关于类与接口的一些知识
类:描述了它所代表的对象的共同的属性和行为,因此一个类最基本的2个组成部分是数据和行为(功能)。其中数据包括字段与属性,用于保存与该类相关的信息变量;而行为是功能、动作,表示类所能提供的服务。1、字段:用于存储类所需要的数据,关于静态字段,它是类级别的,访问它直接使用类名.静态字段名即可。2、属性:本质是字段的扩展,它可以让我们实现对“字段”的访问的灵活控制:只读、只写或者还需要对字段执行原创 2015-05-05 17:08:28 · 949 阅读 · 0 评论 -
C#之委托与事件
委托:相当于C/C++中的函数指针,它能够引用函数,只不过在C#中,委托是一个对象,并且是类型安全的,避免了函数指针的不安全性。一个委托类型的变量可以引用一个或多个方法。1、可以被委托变量引用的方法需满足:方法签名与委托一致;方法返回值要与委托一致;2、委托声明、实例化、调用public delegate void DoProcess(string msg);//声明委托DoPro原创 2015-05-06 11:14:38 · 729 阅读 · 0 评论 -
C#一些编程基础知识讲解
1、标识符的命名规范:这样有利于提高代码的可读性,便于团队成员之间协作1)类名和它的成员变量:一般要求每个单词的首字母均大写;2)局部变量和方法参数:首字母小写,其余每个单词首字母均大写;3)缩写词:由全大写字母组成;4)常量:由大写字母组成,并且每个单词之间由下划线分隔;2、变量:本质上一个占位符,它引用了一块内存的地址,但它存储的值是可以变化的。声明变量的目的就是使原创 2015-04-28 11:05:07 · 881 阅读 · 0 评论 -
.NET简介
.NET是微软开发的一款全新的、集成的、面向对象的开发平台,也可以成为框架。它支持多种编程语言比如C#、VB.NET、C++、Python等。.NET框架是在操作系统之上、应用程序之下的一个“抽象层”,类似于Java的虚拟机;它负责管理运行在它之上的各种.NETt应用程序的方方面面,比如编译、运行、内存管理、垃圾收集、安全等。 关于虚拟机的概念:负责与具体的操作系统、硬件设备打交道原创 2015-04-28 10:07:39 · 1042 阅读 · 0 评论