<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[KeeeepGO的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/KeeeepGO</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; KeeeepGO]]></copyright><item><title><![CDATA[lua简明教程]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/89314868</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/89314868</guid><author>KeeeepGO</author><pubDate>Mon, 15 Apr 2019 16:47:03 +0800</pubDate><description><![CDATA[起因

因为项目原因，开始学习lua。

想法

刚开始我是拒绝的。要我写lua？那不是脚本语言吗？不是c#，不是面向对象语言，那我费了老多时间学的设计模式还有积累的经验不是没得用了？

然而，经过几天的学习之后，我只想说一句：“真香”。

lua是一个很灵活，很优雅的语言。

1、它是弱类型的，即变量不用声明类型，还可以赋值为任意类型（用过“大家都会”的python的人应该知道）。【灵活度+1】...]]></description><category></category></item><item><title><![CDATA[ugui的弹出效果和控制scrollview的滚动]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/89065382</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/89065382</guid><author>KeeeepGO</author><pubDate>Sun, 07 Apr 2019 09:30:21 +0800</pubDate><description><![CDATA[起因

用ugui的scrollview做了一个游戏内信息提醒列表。然后想在每次出现新信息时，自动弹出列表，并且内容滚到底端。

思考与工作

弹出弹回效果就是修改RectTransform的anchoredPosition。它是异步的动画，不想放update，不想用协程，可以用DoTween等动画插件的方法，例如DoTween的DOAnchorPosX。还有要保留初始值RectTransform...]]></description><category></category></item><item><title><![CDATA[游戏相关设计模式的总结（二）]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88962702</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88962702</guid><author>KeeeepGO</author><pubDate>Tue, 02 Apr 2019 08:57:48 +0800</pubDate><description><![CDATA[桥接模式

“将’抽象‘与‘实现’分离，使两者可以独立地变化。”

“想要实现一个‘抽象’类的一个功能，除了通过继承实现，还可以通过声明一个桥接成员，通过调用该成员的实现的功能来实现自己的功能。即桥接别人的功能。”

“描述了两个类群组之间交叉组合汇编，存在一个整体有两个连接的灵活可变部分的状态。”

成员：

Abstraction（抽象体接口）、Implementor（实现体接口）、具体Abs...]]></description><category></category></item><item><title><![CDATA[改造Fungus源码及使用教程：建立数据驱动脚本系统的尝试（二）：自定义Command]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88955801</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88955801</guid><author>KeeeepGO</author><pubDate>Mon, 01 Apr 2019 19:53:38 +0800</pubDate><description><![CDATA[”想更快更方便地实现功能，就向上抽象。想实现更丰富的功能，就向下拆解。“

---某不知名程序员



起因

继续更深入地改造Fungus，碰上了Command。由于Fungus的原生Command的参数都是靠面板输入的（毕竟其原本的设计意图就是方便不懂编程的人靠界面操作来实现游戏逻辑），并没有提供给在代码环境中修改Command参数的接口，所以想通过数据驱动动态创建Command，要么给Co...]]></description><category></category></item><item><title><![CDATA[SMM开发日志：第一次重构（Unity与游戏逻辑系统解耦，中介者、状态等模式的运用]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88954111</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88954111</guid><author>KeeeepGO</author><pubDate>Mon, 01 Apr 2019 18:22:23 +0800</pubDate><description><![CDATA[起因

越深入阅读《设计模式与游戏完美开发》后，越发感到现在手头这个项目的代码架构可以有改进的地方。思考了一段时间后，整理了下当前的架构，决定将书上的一些优秀的实现融合到这个项目里。

思考

重构前的问题：

1、很多系统功能由挂载场景中的GameObject的继承自MonoBehaviour的Script实现（我命名为XXController，原意是照搬以前javaee的MVC模式）。其问题在...]]></description><category></category></item><item><title><![CDATA[游戏相关设计模式的总结（一）]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88673145</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88673145</guid><author>KeeeepGO</author><pubDate>Tue, 19 Mar 2019 21:03:15 +0800</pubDate><description><![CDATA[状态模式

“将多变的行为分离出来封装成状态，通过状态切换来改变呈现的行为。”

成员：

Context（状态拥有者，可以是任何有多种状态的类）、IState（状态接口）、State（状态类）

使用方法概述：

Context拥有IState状态接口对象m_State，指示当前状态。调用Context相关方法时调用m_State对应的方法呈现出不同行为，同时提供SetState方法修改当前状态...]]></description><category></category></item><item><title><![CDATA[关于C#，CLR，.NET，托管的相关理解]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88648126</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88648126</guid><author>KeeeepGO</author><pubDate>Mon, 18 Mar 2019 19:36:57 +0800</pubDate><description><![CDATA[.NET Framework包含了CLR、类库及相关语言编译器。

运行时，C#源码，首先被.NET的C#的编译器编译成中间语言MSIL（Microsoft Intermediate Language），是一种介于高级语言和机器语言中间的语言，也叫本地代码，并加上元数据（数据的数据，包含源代码中所有元素的描述）。然后，MSIL在.NET的CLR（Common Language Runtime）上托...]]></description><category></category></item><item><title><![CDATA[c# 关于内存回收GC的简单总结]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88644250</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88644250</guid><author>KeeeepGO</author><pubDate>Mon, 18 Mar 2019 17:35:47 +0800</pubDate><description><![CDATA[GC

废弃对象的4种方式

方式
			例子
			被释放的对象
		将null引用赋值给对象的仅剩引用。（赋空值）
			ClassA a = new ClassA();a=null;
			没有一个引用引用它时
		将不同对象的引用赋值给对象的仅剩引用。（赋新值）
			a1 = new ClassA();a2 = new ClassA(); a1 = a2;
			a1的原先引用对象
		...]]></description><category></category></item><item><title><![CDATA[改造Fungus源码及使用教程：建立数据驱动脚本系统的尝试（一）]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88636625</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88636625</guid><author>KeeeepGO</author><pubDate>Mon, 18 Mar 2019 12:39:11 +0800</pubDate><description><![CDATA[起因
先前面试某厂时，面试官说我简历上用的那个可视化编辑剧情插件Fungus在大型游戏里是不实用的。因为有大量剧情的话，一个个去创建、移动、调参会很慢。应该使用数据驱动的剧情脚本系统。
我认为说得挺有道理的，到后面写复杂剧情的时候确实比较费事。不过我并不想抛弃Fungus那种直观的可视化剧情，还有它已经写好的各种组件和指令。
思考
于是我就想着在Fungus上扩展一下，根据一定格式的脚本批量生成B...]]></description><category></category></item><item><title><![CDATA[Unity 一种对象池的实现]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88582359</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88582359</guid><author>KeeeepGO</author><pubDate>Fri, 15 Mar 2019 19:46:44 +0800</pubDate><description><![CDATA[在Untiy中，如果在短时间内有大量GameObject被创建销毁，会造成性能下降，游戏卡顿。
根据线程池的思想，我们可以建立一个对象池来暂存暂时不用的GameObject，要用时再从对象池取出，实现GameObject的复用，减少创建，销毁。
以最近项目中的弹幕池为例。
要点：
1、编写弹幕池类，其拥有一个队列作为池来保存对弹幕GameObject的引用。
2、将该类设为单例，避免多次创建，管理...]]></description><category></category></item><item><title><![CDATA[UGUI中一种由孩子元素决定大小的嵌套Layout的实现方法]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88391972</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88391972</guid><author>KeeeepGO</author><pubDate>Mon, 11 Mar 2019 13:15:50 +0800</pubDate><description><![CDATA[Content Size Fitter的Horizontal Fit、Vertical Fit用于父元素去适应孩子元素。
Vertical\Horizontal Layout Group 的 Child Controls Size用于让孩子元素自己控制自己的大小（即保持孩子原大小）。
Child Force Expand用于强制孩子元素扩展到父元素大小。
具体参考：
https://docs.un...]]></description><category></category></item><item><title><![CDATA[Unity Singleton 单例模式的实现]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88383462</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88383462</guid><author>KeeeepGO</author><pubDate>Sun, 10 Mar 2019 20:40:22 +0800</pubDate><description><![CDATA[以前一直用着以下博客的单例模式的实现方法。
Unity Singleton 单例类（Unity3D开发之二十）
https://blog.youkuaiyun.com/cocos2der/article/details/47335197
今天看了《剑指Offer》P32实现单例模式的面试题2后，发现原来上面那种实现是书中提到不好的解法2。原因是使用了加锁这个比较耗时的操作，而且其实在实例创建后就不必再执行加锁...]]></description><category></category></item><item><title><![CDATA[Image和RawImage]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88377119</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88377119</guid><author>KeeeepGO</author><pubDate>Sun, 10 Mar 2019 12:54:27 +0800</pubDate><description><![CDATA[Image

Property:
			Function:
		Source Image
			用于展示的纹理图片 (类型必须是Sprite).
		Color
			给图片混合上颜色（可以用来改变明暗，色调）
		Material
			图片渲染材质
		Raycast Target
			能否作为射线碰撞的目标
		Preserve Aspect
			确保图片保持当前的长宽比
		Set N...]]></description><category></category></item><item><title><![CDATA[对delegate、Func、Action、event、UnityEvent、UnityAction委托一族的总结]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88356098</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88356098</guid><author>KeeeepGO</author><pubDate>Fri, 08 Mar 2019 18:01:24 +0800</pubDate><description><![CDATA[对委托相关知识的总结，参考了一些博客再加上了自己的理解。
delegate、Func、Action、event、UnityEvent、UnityAction
委托
一种可用于封装命名或者匿名方法的引用类型。 

它的存在说明变量不仅能存储值，对象的引用，还能存方法。只不过声明时前面加个delegate。与函数指针不是同个概念。

类似于 C++ 中的函数指针，而且是类型安全和可靠的。

可用于简化...]]></description><category></category></item><item><title><![CDATA[排序算法的简单总结]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88087480</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88087480</guid><author>KeeeepGO</author><pubDate>Sun, 03 Mar 2019 13:50:23 +0800</pubDate><description><![CDATA[比较排序



基于插入

1、直接插入排序

概念：理扑克牌。将后面未排好序的数插入到前面已排好的序列中。

时间复杂度：O(n2) O(n) O(n2) （最坏 最好 平均）

空间复杂度（辅助空间）：O(1)

稳定

|

发现：接近有序的序列，比较次数小

优化：增量划分组，多次插入排序逐渐接近有序

|

2、希尔排序

概念：增量+分组+插入排序。以i为间隔划分组进行插入排序，i递...]]></description><category></category></item><item><title><![CDATA[Unity跨平台(安卓)使用C#读取Excel的遇到的坑]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/88084800</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/88084800</guid><author>KeeeepGO</author><pubDate>Sun, 03 Mar 2019 09:39:52 +0800</pubDate><description><![CDATA[昨天把项目打包发布在安卓平台时，发现一个功能的效果出错了。排查以后，发现是使用以前用的C#读取Excel的工具类ExcelReader读出来的数据是空的。（https://blog.youkuaiyun.com/KeeeepGO/article/details/83186377）
原因是在安卓平台上不能直接使用
string filePath = Application.streamingAssetsPath...]]></description><category></category></item><item><title><![CDATA[《Unity Shader入门精要》的有关渲染流水线的知识总结]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/87924160</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/87924160</guid><author>KeeeepGO</author><pubDate>Mon, 25 Feb 2019 20:37:36 +0800</pubDate><description><![CDATA[《Unity Shader入门精要》的有关渲染流水线的知识总结

 

名词解释

顶点：包含一个几何顶点的位置，法线方向，颜色等信息的数据

图元：顶点的集合（点，线，多边形）

网格：图元的集合

片元：一个像素的状态（屏幕坐标，深度，法线，纹理坐标等用于计算该像素最终颜色的信息）集合

光栅化：把顶点数据转换为片元的过程。将图转化为一个个栅格（像素）组成的图。本质是坐标变换、几何离散化。（转...]]></description><category></category></item><item><title><![CDATA[TIS开发日志（一）C#读取Excel]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/83186377</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/83186377</guid><author>KeeeepGO</author><pubDate>Fri, 19 Oct 2018 18:23:42 +0800</pubDate><description><![CDATA[using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Excel;
using System.IO;
using Assets.Scripts;
using System;

public static class ExcelWorker
{
    public static Li...]]></description><category></category></item><item><title><![CDATA[Unity踩坑记（一）添加外部库(dll)到项目中]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/83107974</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/83107974</guid><author>KeeeepGO</author><pubDate>Wed, 17 Oct 2018 12:58:34 +0800</pubDate><description><![CDATA[起因：

要写读excel表的功能，百度一下说可以用ExcelReader

过程：

根据别人博客放出这个库的github地址下过来后，只有源代码的，没有dll，不知道怎么用。然后去nuget下，下了个高版本的，报错.net版本不对，就换低版本的。

接下来就出现了神奇的一幕：

在vs中写好引用该库的代码生成解决方案成功后，切换到Unity界面，给我报错：“Assets/Scripts/Tes...]]></description><category></category></item><item><title><![CDATA[简单的漫画爬虫，python爬虫实战]]></title><link>https://blog.youkuaiyun.com/KeeeepGO/article/details/82466875</link><guid>https://blog.youkuaiyun.com/KeeeepGO/article/details/82466875</guid><author>KeeeepGO</author><pubDate>Thu, 06 Sep 2018 19:58:10 +0800</pubDate><description><![CDATA[因为某些众所周知的原因，有些漫画在大网站上看不到了。然后小网站上体验较差又没有更新提醒，每次都要打开看有没有更新，有些不方便。闲来无事就写了个爬虫。再闲来无事写个教程好了，就当是回报各大python博主的教导，嘿嘿。

 

准备工具

python 3.6.3、mysql、chrome浏览器

相关知识

python、html、正则表达式、xpath、爬虫相关库

 

步骤：

 

1、分...]]></description><category></category></item></channel></rss>