自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Unity大规模骨骼动画优化方案

1. 需求出现  最近项目有了新的需求, 需要敌我双方英雄各自带领数十(百)个小兵对冲, 乱战. 在之前的方案基础上去掉特效后效等进行测试, 发现性能开销简直惨不忍睹, 帧数只能勉强维持15-20的样子, 200个英雄+小兵的情况下CPU大概有40ms的耗时, DrawCall200多个. 分析后发现开销基本在处理动画和drawcall上.2. 解决方案  针对上面的两个问题, DrawCall过多很容易联想到GPU Instancing, 因为小兵的mesh和材质都一样, 不过有一个问题, 小兵使

2020-11-03 15:38:42 2273

原创 C#反射用法浅述

1. 反射的定义   反射的官方定义是指程序在运行时可以访问, 检测和修改它本身状态或行为的一种能力. 反射的主要用途就是使给定的程序动态的适应不同的运行情况. 在C#中, 反射最基础的API就是typeof(), 它可以提供封装的程序集, 模块和类型的对象.using UnityEngine;namespace Assets{ public class Reflect : MonoBehaviour { public class test { }

2020-09-21 17:28:01 257

原创 Unity资源导入优化

  这几天学了不少优化相关的课程, 趁还没忘完把脑子里还记着的整理一下= =. 所有资源导入(Importer)相关的都可以自己写导入类继承AssetPostprocessor处理, 然后自动化生成导入报告, 一旦发现资源有问题根据报告找对应人员. 但是对于一些小的, 相对没那么规范的团队, 属实是想的太美了, 最后还是美术来找你让你帮着查问题. 所以我的做法是在所有preprocess阶段都不处理, 后面包装成一件优化之类的按钮, 有问题直接报出来当场修改.动作Animation Type首先

2020-08-18 19:02:52 853

原创 C#中的迭代器

1.迭代器模式  迭代器模式指按照一定顺序来访问一个集合对象中的每个元素, 但是同时不会暴露集合对象的内部结构. C#中内置的迭代器模式就是Foreach语句, 它可以顺序遍历容器中的每个元素. 而迭代器的具体实现主要是靠IEnumerable 和IEnumerator.2. IEnumerator  IEnumerator接口其实就是foreach的具体实现, 它只定义了三个函数, 如下 public interface IEnumerator { bool MoveNext();

2020-08-13 17:01:49 1585

原创 解谜游戏中谜题与剧本

  CGDC的独立游戏开发会听了一些独立游戏开发者关于解谜游戏的创作,结合自己的想法整理了一些关于剧本和解谜的东西,仅供娱乐。  一个最简单的解谜游戏流程其实和侦探小说一样,主人公受到某人的委托,开始调查某件事,通过收集信息,进行推理,解开谜题,最后得到真相。这其中收集信息,推理,解开谜题的一系列循环动作就是解谜游戏的核心,不仅要设计好谜题,巧妙填充以推进游戏流程,还要和整个剧本背景贴合不能过于突兀。剧本主题每一个故事都需要一个主题,需要在游戏前期通过某种方式来交代给玩家。主题基本决定了一个游戏的整

2020-08-07 00:09:21 2265

原创 Unity实现游戏小地图

  3D游戏中, 一般会需要一个小地图挂在某个角落来提醒玩家位置, 资源位置, BOSS位置等等. 小地图是场景的略缩图, 同时这个小地图应该是实时刷新的, 用于更新玩家在地图中的位置.为了实时把玩家在场景中的位置反应到小地图上, 首先我们要创建一个新的摄像机放在场景的正上方用于渲染整个场景范围. 摄像机投影方式改为正交, 范围根据场景可移动范围大小调节. 新建一个render texture并且把摄像机输出设置为它, 在UI层级挂一个Raw Image, 把我们刚才创建的texture挂上去, 这是

2020-06-19 11:55:08 1113

原创 行为树学习与理解

1. 背景 考虑到成本与风险问题, 绝大多数游戏中的AI其实并不属于真正意义上的AI, 其中并没有对应机器学习算法的设计和AI的训练, 而是按照一定规则写死的, 因此游戏AI中最常见的是有限状态机和行为树. 有限状态机(Finite State Machine)定义了某个对象有限个状态, 通过各种条件或事件来实现状态的转换. 有限状态机的优点是理解简单, 每一种状态都是一个节点, 发生的任何事...

2019-12-02 16:16:35 806 1

原创 某逻辑面试题

 昨天面试被问到两道逻辑题=-=, 挺无语的, 不知道的还以为我面了什么微软亚马逊. 希望以后三线小游戏公司招拼图仔的时候少问点这种题.稍加记录下.一个人在地球表面某个点,向南走了1公里,然后向东走1公里,然后向北走一公里, 然后面试官看着我微笑不说话. =-=我一度不知道这个问题是想问我啥. 应该是问是否存在这样的点. 于是要解这道题首先有一个常识, 在地表上, 南北走向要沿着经度方向, ...

2019-10-29 17:36:01 364 2

原创 C#泛型

泛型的定义 泛型主要作用是延时声明. 通过使用泛型参数类型T, 类和方法等课可以在定义时不规定参数类型, 直到程序运行并调用他们时才指定.使用泛型的意义免去了类型转换的开销, 泛型没有装拆箱的消耗和风险可以减少一些进行函数重载的工作量, 提升代码重用性代码来了! public class GoodClass { public void GoodFunc&lt...

2019-10-26 14:08:03 112

原创 图集工具TexturePacker的使用

1.为什么要打图集 降Draw Call! 在Unity中, 每一次引擎准备好要渲染数据并通知GPU的过程称为一次Draw Call. 对于开发者而言, 每帧的drawcall越低越好, 过多的drawcall会导致渲染过程极度耗时造成视觉卡顿. Unity内置了批次处理技术(batch), 只要游戏对象的Transform(不太严谨)和材质相同, 就合并为一个批次, 在一个drawcall内处...

2019-10-25 14:57:42 2656 1

原创 C#中的委托与事件

1. 委托(delegate) 先写最重要的一点! 委托并不是函数! 虽然长得很像, 但是委托是一个类! 它定义了方法的类型, 使该方法可以被当成参数来进行传递或者调用. 使用委托时必须像使用类一样, 创建实例后才能使用 ! 委托中重载了 “+=” 和 " -=" 运算符使得委托可以通过这两个运算符来实现对方法的绑定和解绑定, 但是第一次赋值时需要使用 “=” 或者在实例时就进行赋值, 否则会有...

2019-10-24 16:07:44 163

原创 C#中的重载和重写

 前面在C#虚函数的文章里提到了重写(override), 虚函数和重写实现了面向对象语言在运行阶段的多态性, 而重载实现了在编译阶段的多态性.重写(override)  重写指的是当父类中有抽象函数或虚函数时, 在子类中实现或重新实现了这些函数, 就完成了对父类函数的重写, 当对象的实例类为子类时, 调用的函数是子类中重写的函数. 重写使用关键字override, 要求重写函数的函数名, 返...

2019-10-23 19:57:47 692

原创 C#中的虚函数

1. 虚函数的特点 虚函数是面向对象语言中多态性的重要实现. 当一个函数方法在声明时, 前面带了virtual关键字, 这个函数就是一个虚函数. 它与非虚函数的主要区别在于它的实现可以在派生类中进行重写(override)(非强制要求). 重写后的函数一样也是虚函数, 当一个类或其基类中存在虚函数后就不允许出现同名, 返回值, 参数类型个数相同的非虚函数. 虚函数由于可以被子类改写的特点, 不...

2019-10-23 16:59:15 4287

原创 C#的接口和抽象类

1. 接口(interface)接口可以看做包含了一系列方法声明的一个类型, 他的定义方式与类相同, 但是包含的方法不可以提供任何实现, 同时接口可以继承其他接口, 当其他类继承了该接口后, 必须实现该接口中和该接口所继承的其他接口中的所有方法.代码来了! interface IGoodIF { int GoodFunc(int a); } inte...

2019-10-22 16:41:05 181

原创 lua中的元表

lua中每个值都有自己的元表。元表本质上也是一个table,其中存放的key为事件,value为元方法。在这些值进行某些操作(运算,比较,调用…)时,会依次序从每一个值的元表中检索对应的事件中是否存在元方法,如果都不存在的话报错无法执行。lua中其他类型(number,string…)的元表都无法轻易使用lua修改,这些类型每一种都共用一个元表。table和userdata可以拥有独立的元表(也...

2019-10-18 16:34:55 160

原创 lua常用数据结构table

table作为lua中可能最常用到的数据类型,是一种关联型数组table基本特征这里的key可以为非nil的任意类型(number,string),key可以不写但是在声明时如果没有写key默认从1开始testTable = { that = "java", "js", "c++"}for k,v in pairs(testTable) doprint(...

2019-10-17 20:50:05 730

原创 Pachi中的蒙特卡洛树搜索,AMAF,Rave

蒙特卡洛树搜索:MCTS使用蒙特卡洛模拟来估计每个节点的价值. 其默认策略为贪婪算法, 即每次选择价值最高的节点进行模拟, 在每次模拟得到结果后, 将结果反馈回每个上级节点, 更新节点价值. 通常来讲, 每个访问到的节点都会加入到树中, 实际上为了节省内存每次只加入一个子节点, 可以通过对旧节点剪枝或多次模拟后再加入新节点来进一步节省内存.  贪婪算法的缺点在于对于一个节点, 如果产生了一次...

2019-10-17 15:13:55 1289 3

原创 Logistic Regression(逻辑回归)

分类是机器学习的一个基本问题, 基本原则就是将某个待分类的事情根据其不同特征划分为两类.Email: 垃圾邮件/正常邮件肿瘤: 良性/恶性蔬菜: 有机/普通对于分类问题, 其结果 y∈{0,1}, 即只有正类或负类. 对于预测蔬菜是否为有机这件事, y = 0表示蔬菜为普通, y= 1表示蔬菜为有机.逻辑回归是分类问题中的一个基本算法, 它的猜想函数hθ(x) = g(θT*x)其...

2019-10-17 15:10:07 438

原创 用C#实现竖列转盘游戏

本来以为CSDN可以传本地视频= =结果也不行,只能转gif了,今天从博客园搬家之前用lua撸了一个转盘,为了方便以后用 ,今天撸一个C#版的转盘,主体思路一致,便于展示用U3D拼了一版简易UI灵魂UI来了!代码来了!using UnityEngine;using UnityEngine.UI;public class NewBehaviourScript : MonoBehavi...

2019-10-17 15:01:14 855

原创 用lua实现竖列转盘游戏

梳理下转盘游戏的流程,点击,开转,停止,出结果,于是重点就在模拟转的过程!定数据结构!假设一个转盘有4行,5列,为了视觉效果连贯,我们需要设计一个5行5列的棋盘,(第一行隐藏在棋盘上方)于是共有5*5=25个item,每个item的宽高保持一致,转盘每一列的状态用int控制,1,2,3分别代表转,停和即将停当开始转后,每列状态变为1,从第一列开始,每一列整列向下移动,在移动到一个item高度时...

2019-10-17 14:53:13 314

原创 lua中, pairs和ipairs的区别

函数pairs和ipairs都是实现遍历功能的函数,通常使用方法是和for函数共同使用构造for u,v in pairs/ipairs(t)实现遍历t表中的所有元素对。区别在于,pairs可以遍历到表中所有的key,对于key的类型没有要求,遇到nil时可以跳过,不会影响后面的遍历ipairs遍历时只能取key为整数值,遇到nil时终止遍历代码来了!1.当表中的元素对key值均为默认时,...

2019-10-17 14:46:14 768

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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