Unity-网络开发(一)
网络基本概念网络网络的作用 在没有网络之前,每个人的设备(电脑等)都是彼此孤立的,网络的出现让设备之间可以相互通信 网络是由若干设备和连接这些设备的链路构成,各种设备 间接或者直接通过介质相连 设备之间想要进行信息传递时,将想要传递的数据编码为2进制数值便可以被有效的传输。这些数据是以电脉冲的形式进行传输的 线缆中的电压是在高低状态之间进行变化的,因而 二进制中1是通过产生一个正电压来传输的,二进制中0是通过产生一个负电压来传输的 局域网 局域网(Local Area Network,简称LAN) 是按照范围划分而来的名称,是指在某一个小区域内由多台设备互联成的计算机组,可以是家里的两台设备组成 也可以是学校、公司里的上千台设备组成,特点是分布地区范围有限,覆盖范围一般是方圆几千米之内 以太网以太网是一种计算机局域网技术,是目前应用最普遍的局域网技术 IEEE组织(电气与电子工程师协会)的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容 说人话: 局域网中设备的连接规范,数据的传输规范等等规则,都是基于以太网的技术标准来完成的 ...
Unity-网络开发(二)
网络通信网络游戏通信方案概述弱联网和强联网游戏网络游戏是以C/S模型为基础进行开发的由客户端和服务端组成 弱联网游戏: 这种游戏不会频繁的进行数据通信,客户端和服务端之间每次连接只处理一次请求,服务端处理完客户端的请求后返回数据后就断开连接了 强联网游戏: 这种游戏会频繁的和服务端进行通信,会一直和服务端保持连接状态,不停的和服务器之间交换数据通过之前的知识我们知道,网络游戏是以C/S模型为基础进行开发的由客户端和服务端组成 弱联网游戏代表: 一般的三消类休闲游戏、卡牌游戏等都会是弱联网游戏,这些游戏的核心玩法都由客户端完成,客户端处理完成后只是告诉服务端一个结果,服务端验证结果即可,不需要随时通信 比如:开心消消乐、刀塔传奇、我叫MT等等 强联网游戏代表: 一般的MMORPG(角色扮演)、MOBA(多人在线竞技游戏)、ACT(动作游戏)等等都会是强联网游戏,这些游戏的部分核心逻辑是由服务端进行处理,客户端和服务端之间不停的在同步信息 比如:王者荣耀、守望先锋、和平精英等等 长连接和短连接游戏长连接和短连接游戏是按照网络游戏通信特点来划分的 弱联网游戏——>短连接游戏 强联网游戏 ...
Unity-中英对照汉化
演示 操作把汉化包zh-cn.po用记事本打开,复制内容到word编辑 word软件主窗口编辑–替换,打开查找替换窗口 点击高级,选中使用通配符 查找内容:(msgid\ ")(*)("^13msgstr ")(*)("^13) 替换为:\1\2\3\2 \4\5 全部替换完之后,复制全部内容到记事本记事本中文件–另存为zh-cn.po就OK了 解释举例汉化包中的一段内容#: Editor/Mono/Inspector/AudioMixerControllerInspector.cs:1msgid “ Threshold Volume”msgstr “阈值音量” 查找内容msgid “ Threshold Volume”msgstr “阈值音量”替换为msgid “ Threshold Volume”msgstr “ Threshold Volume阈值音量” 拆分解释(msgid\ “)()(“13)(msgstr “)(\)(“13)()括号内为需要查找的文本内容,一个括号对应一个替换文本的元素即,第一个(msgid\ “)对应替换\1第二个 ...
Unity-Addressable
配置Profile 概述窗口配置 BuildTarget:构建目标,可以在这里设置是哪个平台,默认是你激活哪个平台就是哪个平台LocalBuildPath:本地构建路径,默认在项目的Library库文件夹中LocalLoadPath:本地加载路径,在哪里加载本地已有的资源RemoteBuildPath:远程构建路径RemoteLoadPath:远程加载路径,在哪里下载远程内容和目录 注意:1.一般情况下,不要去修改本地构建和加载路径默认值2.当我们针对不同平台远程分发内容时,通过多个配置文件最方便。如果你想要最终的发布包包含所有内容,那么一个默认配置就够了 AddressableAssetSettings 可寻址资源数据设置 概述配置Profile In Use:可以在这选择使用的是哪一套配置文件Manage Profiles:点击它会打开管理配置文件窗口 Diagnostics:诊断Send Profiler Events:启用分析器事件,启用它后我们可以在Event Viewer窗口查看Addressable相关信息Log Runtime Exceptions:记录运行时加载相关 ...
Unity-Camera
摄像机组件照相机是玩家观察世界的装置,屏幕空间点按像素定义,屏幕的左下为(0,0);右上是(pixelwidth,pixelHeight),z位置在照相机的世界单位中。 相机组件 1234567891011121314151617181920212223242526272829Clear Flags :清除标识:确定了屏幕哪些部分将被清除,方便多个摄像机画不同的游戏元素Background:背景色Culling Mask:包含或省略要由相机呈现的对象层。在检查器中将图层分配给您的对象。Projection: 切换相机的功能来模拟透视。 Perspective(透视): 相机将完整地呈现透视物体。拍摄角度为0-180°(最高)Field of View: 设置为“正交”时,“相机”的视口大小。Orthographic(正交): 相机将统一渲染对象,没有视角。注:正交模式下不支持延迟渲染。正向渲染总是被使用。Size:设置为“正交”时,“相机”的视口大小。Cliping Planes:从相机到开始和停止渲染的距离。 Near :相对于相机的最近点将出现绘图。 ...
Unity解析Json
JsonUtility一、Unity自带的Json库官方API:https://docs.unity3d.com/ScriptReference/JsonUtility.html 在Unity中使用JsonUtility类对Json进行解析,此类包含三个重要方法,下面进行详解。 二、FromJson方法(反序列化)将Json转换为object 返回值是一个Object,需要在对应的类或结构体前标记Serializable属性(没标记好像也行 序列化不成功可能就是因为没有标记)。object类型必须支持序列化,其中的字段也必须支持序列化(比如私有类型、标记了NonSerialized属性的类型等不可序列化字段会被忽视)。 只有普通的类/结构体才行, 继承自UnityEngine.Object (比如 MonoBehaviour 或 ScriptableObject)的类则不行。 使用string的此函数可以在后台线程调用,但使用TextAsset的此函数只可以在主线程调用。 12345678910111213141516171819using UnityEngine;[System. ...
Unity-全局屏幕点击特效
准备首先canvas的设置调为camera模式 Screen Space -OverLay:只显示所创建的canvas中的内容,即只渲染画布。 Screen Space-Camera:只显示相机所渲染的区域,当保证camera的projection是perspective(透视模式)而不是(orthogonality)正交模式的时候通过调整canvas中image或其他物体的Rotation可以制作3D立体效果的UI,但是这种模式下不可以更改Canvas的ReactTransform,只能通过相机来调整canvas的显示位置和显示大小。 World Space:canvas的ReacTransform完全可以编辑并且把canvas完全当成一个普通的类似于Cube的物体在场景中进行渲染,仔细考虑一下这种模式,如果你把canvas赋给游戏人物,那么你会发现这种模式适合给人物做血条或者在场景中一直在游戏人物的头顶显示人物名称。 Unity坐标世界坐标:场景中非子物体的transform组件的坐标。Unity中的通过transform.position获取到的坐标即为世界坐标,注意:Ins ...
Unity-底层原理
Unity是如何实现跨平台的首先,我们要知道Unity,Mono,.Net 三者的关系。需要简单说一下.Net。 .Net拥有跨语言,跨平台性。 跨语言:就是只要是面向.Net平台的编程语言,用其中一种语言编写的类型就可以无缝的在另外一种语言编写的应用程序中互操作。 跨平台:一次编译,不需要任何代码修改,应用程序就可以运行在任意在.Net实现的平台上跑,即代码不依赖于操作系统,也不依赖硬件环境。一个.Net程序运行的核心在于.Net CLR(公共语言运行时,或者称为.Net 虚拟机,类似java虚拟机的概念),为了让.Net程序在其他平台(目前只能在.Net 平台,windows系统)上跑,微软官方还推出了在其他平台上(MacOs,Linux)跑的 .Net的实现,就推出了.Net Core。 然而,Unity引擎需求也是需要跨平台,支持多语言(C#,Js,Boo)。就参考微软开发.Net Core的概念,于是,推出了Mono. 到这里,基本说明了.Net 与Mono和Unity的联系关系,其实没啥关系。做游戏都知道,肯定需要跨平台,不能只支持一种平台,不然每个对应的平台做出一种对应 ...
Unity-Shader
MeshMeshFilter 网格过滤器 主要从众多的资源中挑选需要的Mesh,把它丢给MeshRender。 MeshRenderer 网格渲染器 主要是负责把MeshFilter丢过来的Mesh,绘制显示到我们的场景中,当然这项工作是非常复杂的。 Material 材质球 Material是MeshRenderer中非常重要的角色,它的配置决定了物体表面的外观将以怎样的质地呈现到我们眼前。如果天MeshRenderer不小心弄丢了Material,那这个物体就会变成让人烦躁的品红色。其实它跟大家经常看到的网页Error404差不多,RGB调成101就是这个颜色啦。 如果说Material是MeshRenderer的灵魂,那Shader就是Material的灵魂,但凡Shader哪里不开心了,即使MeshRenderer没有弄丢Material,物体依旧会变成前面所说的101颜色。 Mesh 网格 Mesh指的就是模型的网格,它决定了物体的表面形状是怎样的,一个模型的表面大多是由多个彼此相连的三角面构成,当然也有其它类型。我们平时听到的建模,可以简单理解为就是在建网格,那为什 ...
Unity-简易对象池
在Unity中我们经常会用到对象池,使用对象池无非就是解决两个问题: 一是减少 new 时候寻址造成的消耗,该消耗的原因是内存碎片。 二是减少 Object.Instantiate 时内部进行序列化和反序列化而造成的CPU消耗。 设计:从字面上理解对象池,池的意思就是容器。我们可以从池中获取一个对象(一条鱼),也可以向池中放入一个对象(一条鱼)。获取的操作我们叫Allocate(分配),而放入一个对象我们叫Recycle(回收)。所以我们可以定义池的接口为如下: 123456public interface IPool<T>{ T Allocate(); bool Recycle(T obj);} 为什么要用泛型呢?如何实现一个精简并且灵活的对象池。这个灵活很大一部分是通过泛型体现的。 池是容器的意思,在C#中可以是List,Queue或者Stack甚至是数组。所以对象池本身要维护一个容器。本篇我们选取Stack来作为池容器,原因是当我们在Allocate和Recycle时并不关心缓存的存储的顺序,只要求缓存对象的地址是连续的。代码如下所示: 123 ...


