自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 目录与知识汇总

数学计算机原理与操作系统数据结构与算法设计模式与架构计算机网络云计算和运维Databaseweb前端Unity3DUnrealAI生产工具PMPDevOps与自动化测试C / C++JavaJavaScriptPythonC#读书...

2020-06-13 15:15:33 54

原创 计算机科学核心知识体系

原文:https://github.com/keithnull/TeachYourselfCS-CN本文档是对TeachYourselfCS内容的中文翻译,原作者为Ozan Onay和Myles Byrne。如需了解翻译相关信息或帮助改进翻译,请参见本文档结尾。This document is a Chinese translation ofTeachYourselfCS, which is written byOzan OnayandMyles Byrne. For more i...

2020-06-13 11:53:30 138

原创 c#:浅析接口(interface)与抽象类(abstract)的区别

在学习c#接口(interface)和抽象类(abstract)的时候 发现接口和抽象类极为相似,比如说:继承后都需要重写,或者都不能通过new关键字来实例化… ,那么他们之间到底有什么区别与联系 ?一、接口的特征​ 1、接口使用interface关键字声明​ 2、接口中的成员有属性、方法、事件,索引器并且都没有实现部分,可以说是没有方法体​ 3、接口中不能声明字段,接口中的成员不能使用任何修饰符​ 4、继承接口的类或结构必须隐式或显式实现接口中的所有成员​ 5、一个接口允许...

2020-08-01 14:27:25 25

原创 Unity 知识点小结

第一部分:1、C#有几种数据类型?答:C#通常分为三种数据类型:值类型(ValueType)、引用类型(Reference types)和指针类型(Pointer types)。值类型可以直接分配给一个值。它们是从类System.ValueType中派生的。值类型直接包含数据。比如int、char、float,它们分别存储数字、字符、浮点数。当您声明一个int类型时,系统分配内存来存储值。引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。换句话说,它们指的是一个内存位置...

2020-07-31 12:03:13 29

原创 unity3d 动态加载资源Resources.Load和AssetBundle

1.首先总结下unity有哪几种资源类型 unity资源的类型: -a) Unity内置的常用asset, fbx\jpg...- b) textasset: txt、binary等,对应了它的TextAsset类,可以直接读入文本或者二进制byte-c) scriptable object 它是序...

2020-07-31 10:11:44 29

原创 C#反射机制

何为反射?首先我们通过两个实例来说明反射的大体概念。B超:大家体检的时候大概都做过B超,B超可以透过肚皮探测到你内脏的生理情况。这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时候就会产生一定的“回音”反射,然后把“回音”进行处理就可以显示出内脏的情况了。地球内部结构:地球的内部结构大体可以分为三层:地壳、地幔和地核。如何在地球表面不用深入地球内部就知道其内部的构造呢?我们可以向地球发射“地震波”,“地震波”分两种一种是“横波”,另一种是“纵波”。

2020-07-31 09:59:15 16

原创 C# 通过反射初探ORM框架的实现原理

背景:  以前学的Java进行开发,多用到Mybatis,Hiberante等ORM框架,最近需要上手一个C#的项目,由于不是特别难,也不想再去学习C#的ORM框架,所以就想着用反射简单的实现一下ORM框架的内容,简单的增删改查,没有用到多表之间的联系。反射:  Java和C#中的反射大体相同,主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。我的理解就是可以程序运行时动态的获取对象的属性和方法,并且可以进...

2020-07-31 09:53:52 32

原创 A*寻路 -- 更加真实 的路径(一)

对于A*寻路算法,可能是游戏开发者讨论最多的话题之一,很多游戏都会用到它来实现游戏角色的寻路。那么我这篇帖子的价值何在呢?先来看看传统A*算法存在的问题:1.尴尬的Z型路径 当你在用A*算法实现了角色行走逻辑后,点击一个目标点,虽然你起点和目标点间没有任何障碍物,但角色还TMD蛋疼地进行了Z型行走路线,拐了好多次弯,他丫的那么风骚的走位,以为有人在用狙击枪——瞄准他呢!?2.无路可走 当你使用A*算法的时候你可能会发现,当你选择一个不可移动点或者一个被障碍物围住的“岛...

2020-07-31 07:49:16 17

原创 顶点着色器和片元着色器

管线也称渲染管线,因为 OpenGL ES在渲染处理过程中会顺序执行一系列操作,这一系列相关的处理阶段就被称为OpenGL ES 渲染管线。OpenGL ES 渲染过程就如流水线作业一样,这样的实现极大地提高了渲染的效率。如图就是 OpenGL ES 的管线图,学习OpenGL ES 就是学习这张图中的每一个部分。OPenGL渲染管线图中阴影部分的 Vertex Shader(顶点着色器) 和 Fragment Shader(片元着色器) 是可编程管线 。可编程管线就是说这个操作可以动.

2020-07-31 07:34:38 4

原创 z缓冲和w缓冲 z-buffering 和 w-buffering

z-buffering 和 w-buffering都表示深度值。几乎所有的3-D加速卡都支持z-buffering,这样就使得z-buffers成为现在最常用的深度缓冲类型。但是,z-buffers也有它本身的缺陷。由于它所使用的数学方法,使得一个z-buffer中产生的z值在它允许的范围内[0.0,1.0]并不是均匀分布的。特别是靠近剪切面与远离剪切面处的比例,更是影响了z值的均匀分布。如果远平面的距离与近平面的距离的比为100,那么导致深度缓冲区的90%被花费在前10%的场景深度。一般的娱乐程序或视觉仿

2020-07-31 07:30:02 2

原创 句柄泄露

在linux中一个文件、一个串口、一个socket、一个线程都可以是一个文件,而一个文件会占用一个句柄,linux中一个进程默认的句柄最大数值是1024,当超过这个数值,linux就会对当前的进程进行kill,而kill的对象可以是任意对象,所以会造成各种异常原因的崩溃.使用linux下的lsof命令,列出所有占用的句柄,使用方式如下 1 2 3 4 5 adb shell su lsof...

2020-07-30 19:07:54 11

原创 Unity优化之减少Drawcall

简单来说,Drawcall就是屏幕渲染一次所需要的开销,为了较少消耗,提高性能.什么是DrawCall以及如何对DrawCall进行优化操作。一、什么是DrawCall? 在unity中,每次CPU准备数据并通知GPU的过程就称之为一个DrawCall。 具体过程就是:设置颜色-->绘图方式-->顶点坐标-->绘制-->结束,所以在绘制过程中,如果能在一次DrawCall完成所有绘制就会大大提高运行效率,进而达到优化的目的。二、Draw...

2020-07-30 08:37:02 27

原创 Unity 3D游戏客户端基础框架总结

框架概述:做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框架搭建,其中包括:UI框架(NGUI+MVC) 消息管理(Advanced CSharp Messenger) 网络层框架(Socket+Protobuf) 表格数据(Protobuf) 资源管理(Unity 5.x的AssetBundle方案) 热更框架(tolua)这里使...

2020-07-29 22:48:50 22

原创 Unity 3D游戏客户端基础框架 protobuf网络框架

前言: protobuf是google的一个开源项目,主要的用途是:1.数据存储(序列化和反序列化),这个功能类似xml和json等;2.制作网络通信协议;一、资源下载:1.github源码地址:https://github.com/mgravell/protobuf-net2.google项目源码下载地址(访问需翻墙):https://code.google.com/p/protobuf-net/二、数据存储: C#语言方式的导表和解...

2020-07-29 22:39:42 12

原创 Unity填坑笔记——记一次“内存泄露”的排查

【参考原文】Unity填坑笔记——记一次“内存泄露”的排查1.起因游戏上线之前大约不到一周的时间,安卓和iOS包都提给渠道之后,合作方的质检部门给出了一个测试报告,说我们游戏有严重的内存泄露……我裤子都……呃,不好意思,我包都提上去了,这个时间点你跟我说这个,早干嘛去了!而且内存部分也一直是我们关注的内容,不管是我们内部的周常测试还是定期的UWA的性能测试,在内存这块都没有发现特别明显的问题。2. 初步处理先初步沟通了下,内存泄露的结论是在做频繁开关ui的测试时得出的,依据是PSS内存一

2020-07-29 09:22:06 9

原创 内存耗用分析:VSS/RSS/PSS/USS

内存占用大小有如下规律 VSS >= RSS >= PSS >= USSVSS - Virtual Set Size (用处不大)虚拟耗用内存(包含共享库占用的内存)RSS - Resident Set Size (用处不大)实际使用物理内存(包含共享库占用的内存)PSS - Proportional Set Size(仅供参考)实际使用的物理内存(比例分配共享库占用的内存)USS - Unique Set Size (非常有用)进程独自占用的物理内存(不包含共享库占用..

2020-07-29 09:13:15 6

原创 内存不足引起崩溃的几种原因

At some points a game may crash with "out of memory" though it in theory it should fit in fine. When this happens compare your normal game memory footprint and the allocated memory size when the crash happens. If the numbers are not similar, then there is

2020-07-29 08:57:00 22

原创 Unity中的MonoBehaviour.Invoke 延迟调用详解

MonoBehaviour.Invoke 延迟调用方法签名:void Invoke(string methodName, float time);在time秒后,延迟调用方法methodName。Invoke() 方法是 Unity3D 的一种委托机制如: Invoke("SendMsg", 5); 它的意思是:5 秒之后调用 SendMsg() 方法;使用 Invoke() 方法需要注意 3点:1 :它应该在 脚本的生命周期里的(Start、Update、OnGUI、Fix...

2020-07-25 18:48:09 25

原创 unity 性能分析工具 --Profiler

一, 概述:profiler 可以让你查看在游戏各方面花费的时间,分析GPU,CPU和内存,渲染和音频的性能。使用时要关注消耗时间最多的部分 ,比较代码更改前后的分析结果,但是会影响帧率。二,窗口信息打开方式:Windows-profiler当游戏运行且探查器正在收集数据时,单击任何这些传输控件会暂停游戏,"current"传输按钮使配置文件统计窗口显示实时收集的数据,ctive Profiler弹出菜单允许您选择是在编辑器中还是在单独的播放器中进行性能分析(例如,在连接的...

2020-07-25 14:34:25 27

原创 C#中Enum用法小结

enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储。(1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此以下两个代码定义是等价的:enumTrafficLight{Green,Yellow,Red} enumTrafficLight{Green=0,Yellow=1,Red=2}...

2020-07-24 12:01:54 26

原创 多态中构造函数、函数重载执行顺序和过程

多态中构造函数、函数重载执行顺序和过程一直有些不理解,经过测试,对其中的运行顺序有了一定的了解,希望对初学者有些帮助。eg1:public class A { public A() { Console.WriteLine('A'); } public virtual void Fun() { Console.WriteLine("A.Fun()");

2020-07-24 09:58:06 15

原创 unity的InputFiled. isFocused属性自动对焦到输入框位置

第一种方式 public InputField mainInputField; // Activate the main input field when the scene starts. void Start () { mainInputField.ActivateInputField(); }第二种方式 public InputField mainInputField; // Activate the mai.

2020-07-22 14:32:32 22

原创 unity中动态获取字符串后在InputField上进行判断时文件编码格式BUG

今天想做一个简单的密码锁定控制功能,但是出现了问题。我是在游戏开始时读取streamingAsset中的text中的文本,其实就是密码如下图密码是123456789然后我在程序中输入了该密码出现错误,居然错了。然后我打印读取的文本信息是什么、没错啊。然后我将控制台复制粘贴到inputField中,居然成功了。为此我比较费解然后把它变成password不显示字符后。发现居然有10个字符那就是123456789是9个字符。但控制台输出的却是10个字符。估计就是读取文本时的错误了。

2020-07-22 12:15:18 14

原创 Unity中UGUI InputField组件修改Text文本

操作一:using UnityEngine;using UnityEngine.UI;public class Input : MonoBehaviour{ public Text text; // Start is called before the first frame update void Start() { text.text = "你好"; }}然后我们将InputField组件下的Text组件拖入点击运行,然而发...

2020-07-22 12:11:15 36

原创 C#中List集合使用LastOrDefault方法查找出最后一个符合条件的元素

在C#的List集合中,FirstOrDefault方法一般用来查找List集合中第一个符合条件的对象,如果未查到则返回相应默认值。其实如果要查找最后一个符合条件的List集合元素对象,可以使用LastOrDefault方法来实现,LastOrDefault方法的内部书写形式为Lambda表示式的书写形式。LastOrDefault方法如果未查找到符合要求的元素对象,将会返回对应默认值。(1)假设有个List<int>集合对象list1,内部元素为1至10。我们在实际运算中并不知道list1

2020-07-22 10:19:04 20

原创 C# List基础用法

List泛型集合是C#编程中的经常使用的集合之一,相对数组它可以动态的添加元素而不是声明的时候就必须指定大小。相对于ArrayList集合和Hashtable集合的优势是其元素的数据类型可以确定。而不是默认的父类类型object。List泛型集合的声明与元素添加1.List泛型集合的声明:List<数据类型> 变量名=new list<数据类型>();2.List泛型集合的声明案例://声明一个List泛型集合的变量listNewList<strin..

2020-07-21 17:54:27 26

原创 数据库分区、分表、分库、分片

一、分区的概念数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。另外,分区可以做到将表的数据均衡到不同的地方,提高数据检索的效率,降低数据库的频繁IO压力值,分区的优点如下:1、相对于单个文件系统或是硬盘,分区可以存储更多的数据;2、数据管理比较方便,比如要清理或废弃某年的数据,就可以直...

2020-07-19 07:09:05 31

原创 Unity Cinemachine插件全功能详解

https://blog.csdn.net/tanyu159/article/details/88608559

2020-07-18 18:37:52 56

原创 Unity 保存运行时的修改

调节相机时,很多时候需要在运行时进行调节,因为有很多动画在运行时才能知道它具体的位置。但是默认情况下,Unity不会保存任何运行时的修改和改动。那有没有什么办法能保存运行时的修改呢?其实在《大话Unity:新手村》专题中,咱们提到过如何保存运行时的修改,稍微复习一下:在Play模式下Copy Component,然后退出运行模式后Paste Component Values 在Play模式下将修改后的GameObject拖成Prefab,然后退出运行模式后再放到场景中但是Cinemachi...

2020-07-18 18:00:38 96

原创 2D游戏摄像机发展史

https://www.gcores.com/articles/111493

2020-07-18 17:53:12 25

原创 Unity设计模式之简单工厂模式、工厂方法模式和抽象工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。*public class Product : MonoBehaviour {/// <summary>/// 简单工厂模式/// 定义一个共同接口,创建不同的对象,简化创建...

2020-07-15 19:04:43 33

原创 使用 Protobuf 设计 REST API

概述一个设计的好的 REST API 接口,需要一个严格的接口定义。本文试图使用 Protobuf 作为接口设计语言,设计 API。创建文件,main/proto/Login.protosyntax = "proto3";package org.wcy123.api;option java_outer_classname = "Protos";message LoginRequest { string name = 1; string password = 2;}...

2020-07-15 09:58:03 47

原创 PureMVC框架在Unity中的应用(一)

前言:这篇文章分为两部分,第一部分是理论,解读PureMVC框架原理,第二部分是实践,通过一个简单的例子,演示如何在Unity中应用PureMVC框架。(文章的内容很长,坚持看完,一定会有所收获的:)我一直认为,框架的使用,需要你工作一段时间以后再去接触会比较好,就像孩子踢球一样,刚开始可以随心所欲的踢,没有什么中前,中后场的概念,球在哪儿,就一股脑儿的追上去抢,几十双脚噼里啪啦的,其实,这就是大多数人刚开始做游戏开发时候的状态,没什么框架,代码硬怼,不注重性能,扩展性,重用性等等,BUG层..

2020-07-13 11:17:50 60

原创 UnityPC端打包发布参数设置

主要设置都在PlayerSettings里面Company Name:设置公司名称Product Name:设置项目名称,这个获取窗体句柄的时候用的到Default Icon:默认的exe图标,更改打包好的exe文件的iconDefault Cursor:默认的鼠标图标,就是更改鼠标样式Cursor Hotspot:鼠标热点坐标?what's the fuck?查也查不到啥Resolution and Presentation:分辨率和演示Default Is Full Scre

2020-07-13 02:42:58 120

原创 性能测试 -- 内存过高, 如何定位问题?

1. 查资源内存 查纹理格式 → Android最好是ETC2格式, IOS最好是PVRTC, Windows PC最好是DXT 查纹理尺寸 → 1024x1024尺寸的纹理, 占用内存是512x512的4倍 查Mipmap → 开启Mipmap会将纹理内存提升1.33倍, 3D场景模型和角色可以开启, 但是UI纹理不建议开启 查【Read/Write Enabled】→ 开启该选项会使内存增大1倍, 建议关闭 查网格 查模型 → 删除临近顶...

2020-07-13 02:37:57 48

原创 TDD在Unity3D游戏项目开发中的实践

关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不 到特别多关于TDD的声音。那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使用U3D 5.3 .X之后版本已经集成的单元测试模块Editor Test Runner。 0x01 你好,TDD TDD,测试驱动开发改变了我们常见的工作流程,不要求先写逻辑代码,反而要求先完成测试代码。 待测试代码完成之后,我们再将目光转移到逻辑代码,根据测试的要求,完成逻辑代码,使...

2020-07-13 02:20:35 32

原创 Unity3D使用经验总结 优点篇

09年还在和其它小伙伴开发引擎的时候,Unity3D就初露头角。 当时就对这种基于组件式的设计结构很不理解。 觉得拆分过于细致,同时影响效率。而时至今日,UNITY3D已经成为了众多团队的首选3D引擎。 并且,随着Unity3D 4.3的发布,原生的2D支持也让人大开眼界。虽然Unity3d的原生2D功能还有很长的路要走,但也阻挡不了它称霸当下。2011年中,公司的引擎项目停止之后,我的目光便转到了U3D的身上,经过几番挣扎后,终于对基于组件式的对象模型有了新的认识。 而如今,这种模式,成为了我最

2020-07-13 02:17:15 53

原创 单元测试用例编写总结 (白盒测试)

1 背景测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。单元测试用于测试各个代码组件,并确保代码按照预期的方式工作。单元测试由开发人员编写和执行。大多数情况下,使用JUnit或TestNG之类的测试框架。测试用例通常是在方法级别写入并通过自动化执行。单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。2 单元测试用例相关概念2.1正面测试(...

2020-07-13 01:30:56 63

原创 Unity事件系统总结(EventSystem)

EventSystem基于Input,可以对键盘,鼠标,触摸,以及自定义输入进行处理。EventSystem本身是一个管理控制器,核心功能依赖InputModule和Raycaster模块。InputModule用来处理Input数据,管理事件状态,和发送事件给GameObject。Raycaster用来捕获哪些GameObject需要执行事件处理: Graphic Raycaster 用于UI元素就是继承自Graphic的对象; Physics2D Raycast...

2020-07-11 17:49:07 51

原创 AddComponent添加新脚本后脚本的执行顺序

一个游戏物体通过脚本添加了另一个脚本,那新添加的脚本的执行顺序是怎么样的呢?笔者做了以下的实验,在场景中添加了一个空的游戏物体,新建两个脚本:FirstScript.cs和SecondScript.cs,代码如下:FirstScript.cs:using UnityEngine;using System.Collections;public class FirstScript : MonoBehaviour { // Use this for initialization...

2020-07-11 15:47:59 64

提示
确定要删除当前文章?
取消 删除