博客导览
前言写了一篇博客导览,方便后续本人使用。
杂乱小面筋 :面筋
语言基础
C#: C# 高级语法 , 关于CLR模型-GC
C++: c++ 和c11 , C++ 之STL , 关于类与对象
lua: unity热更新Lua
408基础
计算机网络:计算机网络基础 , TCP与UDP
OS:OS
Unity相关
基础与理论:
unity基础:unity引擎基础
3d数学:unity 3d数学理论
UGUI基础:UGUI问答
热更新AB:unity热更新AB包
代码与框架:
设计模式:设计模式 , 游戏设计模式 , FSM ObjPool ,IOC容器-Springboot
UI手机适配:UI手机适配
红点系统:Unity红点系统
物理 :关于游戏物理实现
帧同步:帧同步和状态同步
性能优化:
UI性能优化:unity UI优化 ,UGUI 优化- DrawCall ,OverDraw ,源码角度分析Rebuild和Rebatch
图形学相关 : unity Bulid-in 渲染管线
3 ...
TCP与UDP
前言更改了计算机网络篇章,并整理更细化篇章tcp-udp独立一章了。
TCP与UDP的区别
区别
UDP
TCP
是否连接
不连接
面向连接
是否可靠
不可靠
可靠传输(传输过程中会丢失,但会重发)使用流量控制和拥塞控制
连接对象个数
支持一对一,一对多,多对一,多对多交互通信。
仅支持一对一通信。
传输方式
面向报文
面向字节流
数据边界
保存数据边界
不保存数据边界
速度
速度快
速度慢
发送消耗
轻量级(因为 UDP 传输的信息中不承担任何间接创造连接,保证交货或秩序的信息。这也反应在包头大小。)
重量级
首部开销
首部开销小,仅8个字节
首部开销大,最小20字节,最大60字节。
有序性
不提供有序性的保证
TCP 保证了消息的有序性,即使到达客户端顺序不同,TCP 也会排序。
应用场景
IP电话,视频会议,直播,以及FPS竞技类的使用UDP帧同步。
要求可靠传输的应用例如文件传输,以及MMO类的TCP状态同步。
TCP基本格式
序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据, ...
关于类与对象
前言之前写过了CPP,C#,Lua的语言基础 现在把三种语言的类与对象整理到一起。
简介此部分讲解:类型 方法 继承
类别
描述
示例代码/概念
值类型
Struct默认继承自object
struct MyStruct { /* ... */ }
引用类型
Class默认继承自object
public class MyClass { /* ... */ }
接口
声明我是什么样子的类型(类型规范),不实现
public interface ILifeCycle { /* ... */ }
抽象类
不能实例化,可以包含抽象方法,可以暂时不实现接口,等待子类实现
public abstract partial class Actor : ILifeCycle { /* ... */ }
继承
Class只能继承1或0个基类,但可以继承多个接口
public class Mage : Actor, ILifeCycle, IDestroy { /* ... */ ...
UI手机适配
前言在工作中存在于安卓手机适配与异形屏适配问题:
Unity 如何实现UI适配?水滴屏、异形屏?Canvas如何配置
Unity实现屏幕黑边
Unity How to Lock Camera View to an Aspect Ratio and Add Black Bars
Unity 的UI适配原理 - 知乎
怎么解决适配要想知道适配什么首先得搞清美术的出图流程,我们一般来说的适配指的是UI适配,那美术在出UI资源的时候肯定是要根据设计分辨率来进行出图的,而不能美术A同学是以2480x2200 出图的,而美术B同学是以1920x1080出图的,这样的话两个UI切图放到一个界面就不协调和美观,所以这个设计分辨率肯定是有的。
所以到目前为止涉及到了3种分辨率
1、图片分辨率
2、设计分辨率
3、屏幕分辨率
适配的过程就是根据设计分辨率出图,然后将设计分辨率整体映射到屏幕上。
那映射的过程是我们要思考的问题。
目前常见有四种映射方式
假设 scaleX = 屏幕分辨率宽/设计分辨率宽,scaleY = 屏幕分辨率高/设计分辨率高,
1、铺满屏幕
这种方式是将设计分辨率宽拉伸scaleX倍 ...
IOC容器-Springboot
前言因为QF框架引入了IOC概念,这边阐述一下IOC的观念,以springboot为例子
欢迎来到 QFramework 的文档! — QFramework 1.0.60 文档
Spring IOC容器基本原理IOC容器的概念IOC容器是具有依赖注入功能的容器,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,而是由IOC容器进行组装。在Spring中,BeanFactory是IOC容器的实际代表者。
Spring IOC容器通过读取配置文件中的配置元数据来管理对象。配置元数据可以通过XML文件、注解、基于Java文件的配置或基于属性文件的配置来定义。
Bean的概念由IOC容器管理的应用程序对象称为Bean。Bean是由Spring容器初始化、装配及管理的对象。IOC容器通过配置元数据(由BeanDefinition代表)来确定如何实例化Bean、管理Bean之间的依赖关系以及管理Bean。
开始Spring Hello World之旅1. 准备需要的jar包核心jar包:
org.springframework.asm-3.0 ...
Unity Mulligan Renamer 使用教程
1. 项目介绍Unity Mulligan Renamer 是一个用于 Unity 编辑器的开源工具,旨在快速且安全地批量重命名多个资产或游戏对象。该工具提供了多种重命名方式,包括替换子字符串、添加前缀和后缀、添加数字以及删除字符等。通过这些功能,开发者可以高效地组织和管理项目中的资源。
2. 项目快速启动安装方法通过 Unity Asset Store 安装
打开 Unity Asset Store。
搜索并找到 Mulligan Renamer。
点击“添加到我的资源”并导入到你的项目中。
通过 GitHub 安装
在你的项目目录中,打开 Packages/manifest.json 文件。
添加以下依赖项:
12345{ "dependencies": { "com.redbluegames.mulligan": "https://github.com/redbluegames/unity-mulligan-renamer.git#upm" }}
保存文件并重新打开 ...
安卓打包流程
视频链接Unity 与 Android 、IOS (一) 打包与交互_哔哩哔哩_bilibili
基础 Bulid Setting安卓插件选择安卓的Platform并且下载unity的安卓插件
设置app基础
基础信息
Company Name
Product Name
Version
Default Icon
Icon
Resolution and Presentation 分辨率和显示
Orientation 和 Allowed Orientations for Auto Rotation
俩个用来选择是否自动旋转
Portrait 竖屏
Portrait Upside Down 竖屏
Landscape Right 横屏
Landscape Left 横屏
Preferences配置外部环境包External Tools
Unity防坑指南之Android路径缺失jdk、sdk和nd ...
帧同步和状态同步
前言
谈到网络游戏,不可避免要谈到现有两种比较常见的网游同步技术:帧同步和状态同步说到这两个名词,大家夸夸奇谈,都能讲上些许自己的见解,我反正啥也不懂这篇文章就打算着重学习一下这两种技术的基础和原理
网络同步的目标就是时刻保证多台机器的游戏表现完全一致。
网络同步 = 实时的多端数据同步+实时的多端表现
同步战斗逻辑是包括技能逻辑、普攻、属性、伤害、移动、AI、检测、碰撞等等的一系列内容,这常常也被视为游戏开发过程中最难的部分。
网络同步按大类来分有两种做法:状态同步和帧同步。需要强调的是这两个概念并不是简单的对立概念,其中的差异包括:”数据格式与内容”、“逻辑的计算位置”和“是否有权威服务器”等。
帧同步【LockStep】
LockStep的翻译是锁步同步,是齐步行军的意思
有明确的逻辑帧概念,按照固定的逻辑帧间隔同步数据
帧同步的战斗逻辑在客户端
在帧同步下,通信就比较简单了,服务端只转发操作,不做任何逻辑处理。
客户端按照一定的帧速率(理解为逻辑帧,而不是客户端的渲染帧)去上传当前的操作指令,服务端将操作指令广播给所有客户端,
当客户端收到指令后执行本地代码,如果输入的指 ...
Dotween笔记
Dotween是unity里非常常用的插件,但是很多人应该没有仔细的阅读过它的api,它实际有很多好用的方法,下面我就针对一些相对常用的方法,做下总结:
Dotween常用方法详解-CSDN博客
Transform拓展方法1) Position1)改变世界坐标移动方法,第一个参数是要移动到的目标点,不是移动这个向量的距离。
1transform.DOMove(new Vector3(1, 1, 1), 2);
只控制x轴上的移动,其他两个方向同理。
1transform.DOMoveX(1, 2);
2)改变局部坐标12transform.DOLocalMove(new Vector3(1, 1, 1), 2);transform.DOLocalMoveX(1, 2);
2) Rotation1)世界旋转旋转到给定的值,改变的是欧拉角。
1transform.DORotate(new Vector3(0, 90, 0), 2);
旋转到给定的值,改变的是四元数。
1transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0 ...
FSM ObjPool
前言本文介绍unity常用框架工具,可以类似于GF(GameFrame)给的工具集。
GameFramework解析:开篇 - 知乎
FSM概念
FSM是一种数据结构,它由以下几个部分组成:
内在的所有状态(必须是有限个)
输入条件
状态之间起到连接性作用的转换函数
FSM的描述性定义:一个有限状态机是一个设备,或是一个模型,具有有限数量的状态。它可以在任何给定时间根据输入进行操作,使得系统从一个状态转换到另一个状态,或者是使一个输出或者一种行为的发生,一个有限状态机在任何瞬间只能处于一种状态。
State 状态基类,定义了基本的Enter,Update,Exit三种状态行为,通常在这三种状态行为的方法里会写一些逻辑。每个State都会有StateID(状态id,可以是枚举等),FSMControl(控制该状态的状态控制器的引用),Check方法(用来进行状态判断,并返回StateID,通过FSMControl驱动)
实现有限状态机的实现我们可以把他分成3部分,上图中从上到下每一行就是一部分,分别是状态部分(FsmState),状态机部分(FsmBase、IFsm、Fsm)以 ...