- 博客(42)
- 收藏
- 关注
转载 帧同步(LockStep)该如何反外挂
在中国的游戏环境下,反挂已经成为了游戏开发的重中之重,甚至能决定一款游戏的生死,吃鸡就是一个典型的案例。目前参与了了一款动作射击的MOBA类游戏的开发,同步方案上选择了帧同步技术(LockStep而非snapshots以下同)。那么就有很多人担心起来,客户端会跑全部逻辑帧同步该如何反外挂,和状态同步有什么区别呢?首先我们来分析一下手游的风险和外挂的分类,这里推荐腾讯游戏安全中心的文章,有着非常详细...
2018-03-09 14:24:07 2750 1
转载 【网络游戏同步技术】帧同步的一致性
【参考博文】GAD-网络游戏同步技术引言 帧同步的形式很泛,根据不同游戏,使用的技术范围又不一样,所以大家都在讲方法论,要全面覆盖可能需要较大的篇幅,所以,我简单描述下。 假定大家对帧同步和状态同步有一定的认识,理论上的问题,我就不作过多解释了。 大家都知道,帧同步的核心是一致性,通过一致性的算法,使得各端输入一致的情形下,输出也是一致的,以此,可以解决同步的根本问题——仲裁的结果是一致的。...
2018-03-08 21:08:13 1385 3
转载 复盘王者荣耀手游开发全过程,Unity引擎使用帧同步放弃状态同步
如今已经大获市场成功的《王者荣耀》一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优期。也就是在2015年8月18号正式不删档测试版本推出之后,被腾讯评级为不达六星之后的时间。据闪电站小猪了解,在8月之后的两个月间,《王者荣耀》技术团队对这个产品进行了非常深度的优化,并攻克了局内同步、网络要求,以及性能表现的三大难关,成功达到了腾讯六星产品的标准。比如延...
2018-03-08 20:13:19 1674
转载 Unity状态机(含多线程处理)
众所周知,Unity在开发游戏的时候经常用到状态机,而通常情况下,我们会使用简单的枚举类型设置状态,然后通过调整枚举,来切换状态,在简单情况下是可以的,就像是Unity中Animator切换动画状态就是,直接通过动画片段的名称切换。而当状态很多的时候,直接切换就显得有些很不安全,而且友好性也不是很好,所以根据Unity中Animator这种通过条件切换状态的架构,我写了一个简单的状态机,给大家分享...
2018-03-08 10:38:12 1118
翻译 AssetBundles加载资源
在Unity5中,我们可以使用四种不同的API来加载资产包。它们的行为取决于构建资产包时所使用的包加载平台和压缩方法(未压缩、lzma、lz 4)。我们必须使用的四个API是:AssetBundle.LoadFromMemoryAsyncAssetBundle.LoadFromFileWWW.LoadfromCacheOrDownloadUnityWebRequest’s DownloadHand...
2018-02-25 15:31:34 878
翻译 AssetBundle Dependencies
如果一个或多个unityEngin.Objects包含对位于另一个bundle中的unityEngin.Object的引用,则资产绑定包可能会依赖于其他资产绑定包。如果unityEngin.object包含对任何资产绑定包中不包含的unity.Engineering对象的引用,则不存在依赖关系。在这种情况下,当您构建资产绑定包时,该包所依赖的对象的副本被复制到包中。如果多个包中的多个对象包含对未分...
2018-02-25 14:34:54 688
翻译 unity资源打包分配策略
在使用资产包时,您可以自由地将任何资产分配给任何您想要的包。然而,在设置包时有一些策略需要考虑。这些分组策略是指用于您认为适合您的特定项目的。请随意组合和匹配这些策略。逻辑实体分组逻辑实体分组是根据它们所代表的项目的功能部分将资产分配给资产包的地方。这包括用户界面、字符、环境等部分,以及在应用程序整个生命周期中可能经常出现的任何其他部分。例如:根据UI打包所有的textures和布局数据;根据角色...
2018-02-25 12:07:11 2984
转载 Unity3d中制作Loading场景进度条所遇到的问题
通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长。为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景。因为Loading场景包含的资源较少,所以加载速度快。在加载主场景的时候一般会在Loading界面中显示一个进度条来告知玩家当前加载的进度。在Unity中可以通过调用Application.LoadLevelAsync函数来异步加载游戏场景,通过查
2018-02-05 14:45:37 300
转载 Unity中如何分配内存
最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化.Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时
2018-02-01 17:30:59 829
转载 Unity对象池初探
理论参考:http://www.cnblogs.com/mezero/p/3955130.html代码参考:http://www.omuying.com/article/78.aspx背景:首先为什么会去了解对象池技术,原因是我的游戏在iOS上运行时出现了问题,有时会闪退,于是网上寻找解决方法,大神给出的答案是内存爆了。因为游戏中会频繁而且相对大量的创建( Instan
2018-02-01 16:17:56 224
转载 Unity对象池管理
Unity编程标准导引-3.4 Unity中的对象池 本节通过一个简单的射击子弹的示例来介绍Transform的用法。子弹射击本身很容易制作,只要制作一个子弹Prefab,再做一个发生器,使用发生器控制按频率产生子弹,即克隆子弹Prefab,然后为每个子弹写上运动逻辑就可以了。这本该是很简单的事情。不过问题来了,发射出去后的子弹如何处理?直接Destroy吗?这太浪费了,要知道Unity
2018-02-01 16:16:47 318
转载 UnityShader学习-- 坐标变换
试想我们的美术做了一个3D模型,然后渲染引擎把模型渲染到屏幕上。我们还可以选定不同的视角,模拟不同的光照条件去观察模型。现在来分析一下这个过程。如果说我们把这个过程看成一个函数,那么函数的输出就是屏幕上的图像。确切地说,是屏幕上的每个像素。这个函数的主要输入是这个3D模型,我们观察的视角,光照情况等等因素。渲染过程就是给出这些因素决定每个像素值的过程。 首先来看模型。模型通常是由可视化的
2018-01-30 13:33:01 526
原创 Unity3DAI行为------避开障碍物简单实现
public float speed = 20.0f; public float mass = 5.0f; public float force = 50.0f; public float minimumDistToAvoid = 20.0f; private float curSpeed; private Vector3 targetPoint;
2017-05-27 14:41:23 7379 1
原创 Unity3DAI行为------路径跟随
正如你所见,这是一个非常简单的脚本,它有一个Length属性,如果发起请求,就可以返回航点数组的长度和大小。GetPoint方法返回数组中指定下标位置的特定航点的位置。 然后,Unity调用OnDrawGizmos方法,以在编辑器环境中绘制出组件,在游戏视图中,如果不打开gizmos,那么这些绘图是不会渲染的。public class Path : MonoBehaviour {
2017-05-27 11:29:19 3256
原创 UnityAI行为------群组行为CraigReynold算法
结合上一篇文章讲述群组行为的算法,这篇是替换实现,更加清晰。FlockController的行为很简单,它在运行时生成boid的行为,更新群组的中心及群组的平均速度public class FlockController : MonoBehaviour { public float minVelocity = 1; public float maxVeclocity
2017-05-26 16:55:16 2941 1
原创 UnityAI行为------群组行为
群组行为是指多个对象组队同时行进的情况,我们可以坐下来,告诉每一个对象它该如何移动,但这样做的工作量太大。取而代之的是,我们去创建一个群组的领导,让它来为我们做这些, 这样我们所要做的就只是设置一些规则,然后群组中的boid就会自行组队。在本章中,我们将学习如何在unity3d中实现这种群组行为。每个boid都可以应用一下三个基本的规则:分离(seperation):群组中的每个个体都
2017-05-26 16:48:52 7349 2
原创 UnityAI行为-----群组行为之群集动画
一、群集动画的简介群落运动是自然界中非常有趣的现象。在天空中,我们可以看见大群的候鸟南飞,在陆地上,我们可以看见羚羊群,牛群在飞快的奔跑,在海洋里,鱼群的运动更是壮观。群落和其他相关的群体,他们运动的时候都是非常的壮观,他们的气势常常让我们惊叹不已。在群落中,每一个个体都是非常的独立,然而整个群落又犹如一个整体。群体中的个体似乎是随机的,但确有一定的运动规律。最令我们感到震惊的是群落中似乎有一
2017-05-26 16:41:52 9527 1
转载 帧同步--竞技类网络游戏设计方案
一、 前言 帧同步,根据wiki百科的定义是,一种对同步源进行像素级同步显示的处理技术,对于网络上的多个接入者,一个信号将会通过主机同步发送给其他人,并同步显示在各个终端上。同步信号可以是每帧的像素数据,也可以是影响数据变化的关键事件信息。帧同步在网络游戏中的应用,设计上有异于传统的mmorpg游戏,因为可以承载更大量的后台计算,实现类单机的效果,所以可应用在类似射击
2017-05-23 18:41:26 3222
转载 【Unity】制作手游的帧同步时遇到的问题
网络游戏的同步可以做的很简单,也可以做的很复杂。简单来说就是通过Http或者Socket来跟服务器同步数据。而如果往复杂了说,可以有p2p、帧同步、航位预测等等高级课题可以研究。 因为我们的项目需求----几百个独立单位的实时同步(带pvp的rts),所以研究了下帧同步。不过后来发现它其实有很多问题,所以具体如何还要看其他同事的研究成果。以我个人来说,修改游戏方案反而是最合理
2017-05-23 16:53:01 945
转载 Unity资源处理机制(Assets/WWW/AssetBundle/...)读取和加载资源方式详解
Unity资源机制1、概述 本文意在阐述Unity资源机制相关的信息,以及一些关于个人的理解与试验结果。另外还会提及一些因机制问题可能会出现的异常以及处理建议。大部分机制信息来源于官方文档,另外为自我验证后的结果。 2、资源概述 Unity必须通过导入将所支持的资源序列化,生成AssetComponents后,才能被Unity使用
2017-05-23 15:09:41 1820
转载 设计模式六大原则
单一职责原则(Single Responsibility Principle)定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责
2016-12-09 16:47:20 442
转载 动作手游实时PVP帧同步方案(客户端)
动作手游实时PVP帧同步方案(客户端)1、概述1.1、基于UDP的帧同步方案 在技术选型方面,之所以选择帧同步方案,在Kevin的一篇介绍PVP帧同步后台实现的文章中已经做了详细叙述,这里简单摘要如下:高一致性。如果每一帧的输入都同步了,在同样的上下文中,计算得出的结果应该也是同步的。低流量消耗。除了帧同步,其它方案(比如状态同步)想做到高一致性,需要同步非常大量的数据。无论
2016-09-28 18:37:02 6492
转载 帧同步游戏开发基础
帧同步游戏开发基础什么游戏适合帧同步这种技术? 在现代多人游戏中,多个客户端之间的通讯,多以同步多方状态为主要目标。为了实现这个目标,主要有两个方向的技术: 一种叫状态同步:客户端发送游戏动作到服务器,服务器收到后,计算游戏行为的结果,然后通过广播下发游戏中各种状态,客户端收到状态后显示内容。这种做法类似于各个客户端都远程操作服务器上的软件。最早的mud,以及后来大量的国产网游,特
2016-09-28 18:12:55 1487
原创 C#枚举中的位运算权限分配浅谈
C#枚举中的位运算权限分配浅谈常用的位运算主要有与(&), 或(|)和非(~),比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第一步, 先建立一个枚举表示所有的权限管理操作:public enum Permissions { Insert = 1, Delete
2016-09-28 17:13:00 2361 2
转载 [Unity3d]打包Assetbundle并加载
由于我们要将模型资源放在远程的服务器端,但如果直接放fbx模型是不可以加载的,所以我们可以将fbx做成预设或者是直接将其打包成assetbundle格式的,然后通过www来加载获取。说下使用方法:1、把附件脚本放到工程文件夹下的...\Assets\Editor文件夹下。2、在工程的Project视图里点击想要保存的资源,网络上推荐的是Prefab,右键
2016-03-22 10:53:43 684
转载 C#/IOS/Android通用加密解密方法
公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密不了,或者反之。下面的是三个平台都可以加密解密的方法。加密解密中用到的key="1234578";在调取方法时传值即可。C#代码#region 跨平台加解密(c#) /// /// 对字符
2016-03-22 10:36:30 1617
转载 unity3d 状态存储 PlayerPrefs高级用法
using UnityEngine; using System.Xml.Serialization; using System.IO; public class StateStorage{ public static T LoadData( string key ){ if ( PlayerPrefs.HasKey( key ) ) { Xml
2016-03-22 10:31:55 1149
原创 Unity中的旋转和缩放
一:鼠标旋转被选中的物体1.X轴在平面坐标是左右方向,这里得到的是左右移动距离2.移动距离得到了,接下来要考虑以那个轴为中心作旋转3.这里要实现固定摄像机位置的情况下旋转物体,就以Y轴为中心,所以Rotate(0,mousX,0);public float roate_Speed=100.0f;//旋转速度void Update(){Transform target_tran
2016-01-30 20:15:18 5437
原创 Unity开发app之搜索功能
搜索界面: 这个是用NGUI的Input做的,点击搜索框,在里面输入字符,调用change方法 public void OnSearchTextChange() { _searchText = _cachedView.searchInput.value.Replace (" ", ""); if
2016-01-25 20:49:21 4593 2
原创 Unity开发app平台之刷新功能
一、 实现原理NGUI实现拖拽滑动功能组件是ScrollView脚本。实现拖拽刷新与获取更多的原理修改ScrollView的源代码,NGUI提供了检测拖拽内容的边与Panel边缘距离的方法,通过这个方法判断何时调用刷新、获取更多等方法。ScrollView为UI控制脚本,只控制何时刷新,具体的刷新逻辑并不能在里面实现,需要使用Action实现外部的调用,具体看代码。二、 实现方法修改S
2016-01-25 20:44:27 3667 2
原创 MVC框架(二)
好久没写博文了,最近刚找到一份工作,也是挺忙的,在做项目期间对MVC框架理解更深了点,趁着有闲时间把自己的感想写一下。在我看来框架和设计模式都是一种逻辑处理,根据自己的项目进行逻辑处理。MVC(Model View Controler),M是数据模型,V是用户界面,C是控制器。使用MVC的目的是要讲M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。C的目的则是确保M和V同步,一旦M改
2015-09-30 10:54:29 491
转载 游戏架构脚本该如何来写
这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难。这篇文章的目的是让哪些已经上手Unity3D游戏引擎的朋友学会如何更好的写游戏脚本,当然本文这紧紧是我这么多年对游戏开发的认知,你也可以有你自己的看法。首先我们看看游戏主要是由哪几部分组成的,如下图所示,任何平台下的任何游戏核心都是由:数据、逻辑、渲
2015-08-12 10:43:00 777
原创 Unity3D的Socket通信
我们知道两个进程如果需要进行通讯最基本的一个前提是有唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后
2015-07-29 15:41:46 1310
转载 Unity性能优化之Draw Call
Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置、法线、UV等),索引(顶点如何组成三角形),变换(就是物体的位置、旋转、缩放、以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API——或者就简单地看作是通知GPU——开始绘制,
2015-07-08 09:03:17 657
原创 四元数和向量相乘,向量间的点乘和叉乘
四元数和向量相乘 Quaternion.Euler(x,y,z) 返回一个绕x轴旋转x度再绕y轴旋转y度再绕z轴旋转z度的Quaternion,因此Quaternion.Euler(0,90,0)返回一个绕y轴旋转90度的旋转操作.Quaternion作用于Vector3的右乘操作(*)返回一个将向量做旋转操作后的向量.因此Quaternion.Euler(0,90,
2015-07-07 09:29:01 10040 1
原创 Unity物理引擎研究之关节
添加关节Joints让刚体的行为更加复杂。比如,你可以制作一扇逼真的门或者是一台有摆动链条的吊机。1.关节介绍(1)铰链关节 Hinge Joint 。铰链关节由两个刚体组成,约束它们像连在一个铰链上一样运动,适用于门,不过对于典型的链子、钟摆等同样适用。属性Connected Body 连接体 为刚体指定的关节连接物,如不设定,则与世界相连。
2015-06-27 17:12:59 4549
转载 Unity开发优化----删除多余的MeshCollider和Animation组件
手游项目做碰撞的时候,有关一切物理的东西Unity对手机支持的并不好,多余的MeshCollider 和Animation 空的组件,这俩东西很占效率的。比如下图这样的组件。 还有场景的材质最好用Mobile/Diffuse,它会比Diffuse的shader效率高很多,因为它会减少每个点的一次乘法。但是有时候美术需要做贴图的变色, 那就不能用Mobile/Dif
2015-06-24 20:13:55 4341
转载 Unity学习-NGUI结合Shader小地图的制作(三)
转载自http://blog.csdn.net/lzhq1982/article/details/12783493在做这个demo的过程中,制作小地图着实刁难了我一把,百度了很多文章,花了好长的时间,需要的知识点实在太多了,尤其是shader语言,好在最后成功把它啃下来了,先声明一下,本篇文章将会是这个系列中最难的,不过如果成功做出来成就感也是大大的,其实按照我的步骤一步一步来也没那么复杂啦,
2015-06-24 09:12:36 798
原创 Unity小地图制作(二)
继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向。右上角就是小地图,上面有个红色小箭头就是代表主角人物所在场景中的位置,箭头的方向就代表人物所面向的方向。步骤:1.俯视图的制作首先,我们将Scene场景调成俯视的角度;然后在创建一个Plane,然后点击该对象,在In
2015-06-24 08:22:53 789
原创 Unity链表的应用之蛇形动画
实现的功能:单击创建出一个Cube,跟随前一个运动,位置是前一个Cube的前一秒的位置,类似贪吃蛇。在场景中创建两个Cube,给一个添加紫色的材质球,另一个添加绿色的材质球。给紫色Cube添加一个Cubemove脚本,给绿色Cube添加一个FollowCube脚本。把绿色的Cube拖成预设体,大小改小一点。紫色Cube挂载的脚本代码:using UnityEng
2015-06-20 10:09:08 1399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人