自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZhangLei的博客

Triumph in the Skies

  • 博客(35)
  • 资源 (3)
  • 收藏
  • 关注

原创 【远程文件浏览器】Unity+Lua开发调试利器

博客首发地址 https://www.cnblogs.com/iwiniwin/p/15595243.htmlRemote File Explorer是一个跨平台的远程文件浏览器,用户通过Unity Editor就能操作运行在手机上的游戏或是应用的的目录文件。比如当项目打包运行到设备上时,可通过Remote File Explorer直接浏览设备上的目录文件,并进行下载,上传,删除等操作。尤其是Unity+Lua开发环境下的调试利器,当然,这里的调试不是指代码的逐行调试,而是泛指定位排查问题用武之地

2022-04-28 09:59:19 328

原创 【UGUI源码分析】Unity遮罩之Mask详细解读

博客园博文链接 https://www.cnblogs.com/iwiniwin/p/15131528.html遮罩,顾名思义是一种可以掩盖其它元素的控件。常用于修改其它元素的外观,或限制元素的形状。比如ScrollView或者圆头像效果都有用到遮罩功能。本系列文章希望通过阅读UGUI源码的方式,来探究遮罩的实现原理,以及通过Unity不同遮罩之间实现方式的对比,找到每一种遮罩的最佳使用场合。Unity UGUI主要提供两种遮罩,分别是Mask和Rect Mask 2D。在2D游戏开发中,可能还会用到S

2021-09-08 19:08:17 4367 1

原创 游戏开发中不同时区下的时间问题

在全球化互联网时代,许多游戏厂商都在大力开拓海外市场,大量的游戏也都会选择在海外发行。作为游戏开发者的我们也不得不处理一个容易被忽略的问题,全球不同时区下的时间问题一些与时区有关的时间概念GMT(格林威治平均时间,Greenwich Mean Time)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治平时基于天文观测本身的缺陷,已经被原子钟报时的协调世界时(U

2021-08-11 11:20:12 1343

原创 聊一聊Unity协程背后的实现原理

Unity开发不可避免的要用到协程(Coroutine),协程同步代码做异步任务的特性使程序员摆脱了曾经异步操作加回调的编码方式,使代码逻辑更加连贯易读。然而在惊讶于协程的好用与神奇的同时,因为不清楚协程背后的实现原理,所以总是感觉无法完全掌握协程。比如:MonoBehaviour.StartCoroutine接收的参数为什么是IEnumerator,IEnumerator和协程有什么关系?既然协程函数返回值声明是IEnumerator,为什么函数内yield return的又是不同类型的返回值?y

2021-07-05 19:11:45 702 3

原创 【剑指Offer】反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。解法1可以使用三个辅助指针pHead, last,nextpHead记录当前节点,last记录上一个节点,next记录下一个节点首先使用next保存当前节点的下一个节点,然后将当前节点的下一个节点指向last,实现反转如下图所示实现代码public ListNode ReverseList(ListNode pHead){ ...

2020-04-26 20:06:44 162

原创 【剑指Offer】链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。解法基本思路是使用两个辅助指针p, q,让p先走k - 1步后,p, q两个指针再一起走这样当p指针走到链表的末尾时,q指针刚好走到的就是倒数第k个结点如下图所示实现代码public ListNode FindKthToTail(ListNode head, int k){ ListNode p = head, q = n...

2020-04-26 20:05:25 128

原创 【剑指Offer】数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0解法1最直接的思路,计算base的exponent次方,则将base连乘exponent次即可,时间复杂度为O(exponent)但是要注意处理特殊情况:如果底数base等于0则直接返回0非0数的0次方等于1当指数为负数时的...

2020-04-22 18:50:18 219

原创 3D游戏中各种空间变换到底是怎么回事

渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转化到屏幕上的过程,本文就旨在说明,顶点是经过了哪些坐标空间后,最终被画在了我们的屏幕上。空间变换的原理首先,我们来看一个简单的问题:当给定一个坐标空间以及其中一点(a, b, c)时,我们是如何知道该点的位置的呢?从坐标空间的原点开始向x轴方向移动a个单位向y轴方向移动b个单位向z轴方向移动c个单位坐标空间的变换就蕴含在上面...

2019-11-06 20:58:22 706

原创 学习Shader所需的数学基础(矩阵)

在三维数学中,我们通常会使用矩阵来进行变换。一个矩阵可以把一个矢量从一个坐标空间转换到另一个坐标空间。矢量和矩阵我们可以用矩阵来表示矢量。实际上,矢量可以看成是n×1的列矩阵或1×n的行矩阵,其中n对应了矢量的维度。把矢量和矩阵联系在一起的原因是为了让矢量可以像一个矩阵一样参与矩阵的运算。矩阵的运算矩阵和标量的乘法矩阵和标量相乘,结果仍然是一个相同维度的矩阵它们之间的乘法非常简单,就...

2019-11-03 19:12:41 706

原创 学习Shader所需的数学基础(坐标系,点和矢量)

坐标系在三维笛卡尔坐标系中,我们需要定义3个坐标轴和一个原点。这3个坐标轴被称为该坐标系的基矢量,相互垂直且长度为1的基矢量被称为标准正交基,相互垂直但长度不为1的基矢量被称为正交基左手坐标系与右手坐标系我们可以利用双手来判断一个坐标系的旋向性。请读者举起你的左手,用食指和大拇指摆出一个“L”的手势,并且让你的食指向上,大拇指向右。现在伸出你的中指,它将指向你的前方。此时你已经得到了一个左手...

2019-10-26 02:32:35 595

原创 一篇文章搞懂到底什么是渲染流水线

本文实际上是《Unity Shader入门精要》一书的读书笔记,书中关于渲染流水线的讲解清楚易懂,非常适合作为Shader学习的入门书籍。自知好记性不如烂笔头,遂将相关内容再结合自己的一些理解写作这篇博客记录下来。我们将图像绘制的流程称为渲染流水线,是由CPU和GPU协作完成的。一般一个渲染流程可以分成3个概念阶段,分别是:应用阶段(Application Stage),几何阶段(Geometr...

2019-10-22 16:29:27 330

原创 【剑指Offer】调整数组顺序使奇数位于偶数前面

文章目录题目描述解法1实现代码解法2实现代码解法3实现代码题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解法1最直接的思路是再构建一个新数组,先遍历一遍原数组,把其中的奇数依次添加到新数组中,再遍历一遍原数组把其中的偶数依次添加到新数组中,时间复杂度为O(2n)...

2019-06-25 23:24:16 139

原创 【剑指Offer】二进制中1的个数

文章目录题目描述补码解法1实现代码解法2实现代码题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。补码解题前,我们先来了解一下补码。在计算机系统中,数值都是用补码来表示和存储的。而原码就是数值的二进制数表示,最高位1表示负数。以32位数值举例1的原码就是-1的原码就是正数的补码等于原码负数的补码等于其原码按位取反后(除了最高位)加1,比如-1的补码就是...

2019-06-20 13:36:26 164

原创 【剑指Offer】矩形覆盖

文章目录题目描述解法1实现代码解法2实现代码解法3实现代码题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解法1一开始尝试解这道题的时候其实有些不知道怎么下手,花了很长时间。后来发现可以利用递归的思想,将n的值不断放小到某个可以直接知道结果的值。虽然直接实现递归的算法可能效率不高,但在找到题目的递归解法...

2019-06-11 23:27:31 141

原创 【剑指Offer】变态跳台阶

文章目录题目描述解法1实现代码解法2实现代码解法3实现代码题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解法1本题是【剑指Offer】跳台阶的进化版本。原来的青蛙只可以跳上1级或2级,即F(n) = F(n - 1) + F(n - 2)现在的青蛙可以跳上1到n的任意级,按照之前的解题思路,依然先来看F(n),对于...

2019-05-04 01:52:22 150

原创 【剑指Offer】跳台阶

文章目录题目描述解法1实现代码排列组合解法2实现代码题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解法1首先对这道题,我们可以通过找规律来解一只青蛙可以跳上1级台阶,也可以跳上2两级台阶当n = 1时,有1种跳法当n = 2时,有2种跳法当n = 3时,有3种跳法当n = 4时,有5种跳法当n = ...

2019-04-25 17:22:26 207

原创 【剑指Offer】斐波那契数列

文章目录题目描述解法1 递归实现代码解法2 动态规划实现代码动态规划解法3矩阵的快速幂实现代码题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解法1 递归解题前先简单说明一下斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称...

2019-04-19 13:43:23 447

原创 【剑指Offer】旋转数组的最小数字

文章目录题目描述解法1实现代码二分查找解法2实现代码一点想法题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解法1对于非减数组来说,数组右边的元素一定大于等...

2019-04-16 21:30:41 197

原创 【剑指Offer】用两个栈实现队列

文章目录题目描述栈和队列解法实现代码题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。栈和队列解题前我们先来了解下什么是栈和队列栈是限制插入和删除只能在一个位置上进行的表,是后进先出表,比如,在栈中依次插入1,2,3,4(由栈顶插入),如下图所示。由于栈是限制只能在一个位置上进行操作,所以删除(弹出)也只能在栈顶进行,即弹出顺序为4,3,2,1。...

2019-04-14 13:43:48 160

原创 【剑指Offer】重建二叉树

剑指Offer 文章目录题目描述二叉树的前序中序后序遍历前序遍历过程中序遍历过程后序遍历过程解法1实现代码解法2实现代码遇到的问题题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二叉树的前序中序后序...

2019-04-13 13:52:51 186

原创 Unity脚本生命周期与执行顺序

文章目录脚本生命周期MonoBehavior生命周期图脚本执行顺序自定义执行顺序在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码。必须绑定在游戏对象上才能开始它的生命周期。游戏对象可以理解为能容纳各种组件的容器,游戏对象的所有组件一起决定了这个对象的行为和游戏中的表现。脚本生命周期Unity脚本中的常见必然事件如下表所示名称触发时机用途...

2019-04-11 13:42:40 885

原创 A*寻路算法详细解读

文章目录A*算法描述简化搜索区域概述算法步骤进一步解释具体寻路过程模拟需要更新F值的情况Lua代码实现在学习A*算法之前,很好奇的是A*为什么叫做A*。在知乎上找到一个回答,大致意思是说,在A*算法之前有一种基于启发式探索的方法来提高Dijkstra算法的速度,这个算法叫做A1。后来的改进算法被称为A*。*这个符号是从统计文献中借鉴来的,用来表示相对一个旧有标准的最优估计。启发式探索是利用...

2019-04-10 14:02:05 1175 2

原创 【剑指Offer】从尾到头打印链表

剑指Offer 从尾到头打印链表题目描述解法1实现代码一点补充题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解法1这道题主要思路是while循环从头遍历整个列表,将每个元素插入到List中,因为要求是从尾到头,所以每次插入时利用Insert函数不断将元素插入到第一的位置实现代码public class ListNode{ public int val...

2019-04-07 01:29:11 138

原创 【剑指Offer】替换空格

剑指Offer 替换空格题目描述解法1实现代码解法2实现代码题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解法1这道题比较简单,就是遍历该字符串每一个字符进行复制,遇到空格就复制成%20。或者你也可以直接用C#自带的Replace函数,那这道题也就完全没有意义了。实现代...

2019-04-07 00:41:51 168

原创 Android屏幕尺寸单位转换

最近在看Android群英传这本书,书中有一节涉及到了,屏幕尺寸与单位。觉得以后可能会用到,做个笔记。PPI(pixels per inch) ,又称为DPI,它是由对角线的像素点数除以屏幕的大小得到,通常达到400PPI就已经是非常高的屏幕了。Android系统定义了几个标准的DPI值,作为手机的固定DPI密度 ldpi mdpi hdpi xhdpi...

2019-04-06 14:46:35 419

原创 【剑指Offer】二维数组中的查找

剑指Offer 二维数组中的查找题目描述解法1实现代码需注意的问题解法2实现代码题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解法1最简单的思路,就是暴力遍历,for循环遍历数组所有元素,判断该整数是否存在。再利用题目给出的每一行递增,每...

2019-04-06 14:35:58 112

原创 详细解读KMP模式匹配算法

首先我们需要了解什么是模式匹配?子串定位运算又称为模式匹配(Pattern Matching)或串匹配(String Matching)。在串匹配中,一般将主串称为目标串,将子串称为模式串。本篇博客统一用S表示目标串,T表示模式串,将从目标串S中查找模式串T的过程称为模式匹配。虽然我们的主角是KMP模式匹配算法,但我们还是要先从暴力匹配算法讲起,通过发现暴力匹配算法存在的问题,由此来引出KMP模式匹配算法。

2016-09-30 16:54:11 27501 4

原创 常见排序算法汇总与分析(下)(基数排序与计数排序)

本篇汇总的算法将不再是基于比较的排序算法,因此会突破这类算法的时间复杂度下界O(nlog2n)。如果有朋友对前面的内容感兴趣,可以先去看看常见排序算法汇总与分析(中)(选择排序与归并排序)我们先来总结基数排序算法,该算法在排序过程中不进行比较,而是通过“分配”和“收集”两个过程来实现的。基数排序【基本思想】首先设立r个队列,对列编号分别为0~r-1,r为待排序列中元素的基数(例如10进制数,则r=10),然后按照下面的规则对元素进行分配收集1,先按最低有效位的值,把n个元素分配到上述的

2016-09-19 16:18:56 2754

原创 常见排序算法汇总与分析(中)(选择排序与归并排序)

之前我们已经对常用排序算法中的交换排序与插入排序做了详细的汇总与分析,如果有还没有阅读过的,可以先去看看常见排序算法汇总与分析(上)(交换排序与插入排序)这一篇我们来对选择排序中的直接选择排序与堆排序,以及常用的归并排序做一个汇总。选择排序直接选择排序【基本思想】每一趟在待排序列中选出最小(或最大)的元素,依次放在已排好序的元素序列后面(或前面),直至全部的元素排完为止。直接选择排序也称为简单选择排序。首先在待排序列中选出最小的元素,将它与第一个位置上的元素交换。然后选出次小的元

2016-09-19 16:16:12 1048

原创 常见排序算法汇总与分析(上)(交换排序与插入排序)

每每遇到关于排序算法的问题总是不能很好的解决,对一些概念,思想以及具体实现的认识也是模棱两可。归根结底,还是掌握不够熟练。以前只是看别人写,看了就忘。现在打算自己写,写些自己的东西,做个总结。所以就有了这“常见排序算法汇总与分析”上中下三部曲。本篇是这个汇总的开始,我们先来解决一些问题。首先,排序是什么意思,大家应该都知道。但是排序涉及到一个概念,叫排序稳定性。那么稳定性是什么意思呢?稳定性:就是有两个相同的元素,排序后它们相对位置是否发生变化,若未变化则该称该排序算法是稳定的。否则就是不稳定的

2016-09-17 15:21:26 1522

原创 自定义View实现钟摆效果进度条PendulumView

转载请注明出处:http://blog.csdn.net/fightlei/article/details/52556755在网上看到了一个IOS组件PendulumView,实现了钟摆的动画效果。由于原生的进度条确实是不好看,所以想可以自定义View实现这样的效果,以后也可以用于加载页面的进度条。废话不多说,先上效果图底部黑边是录制时不小心录上的,可以忽略。既然是自定

2016-09-16 17:44:22 3708 2

原创 解决使用属性动画没有效果,监听发现属性值未发生改变问题

最近在学习用自定义View做一些效果,需要在onDraw()方法中使用属性动画,只是一个简单的需求却遇到了问题。例如仅仅是使用ValueAnimator.ofFloat()方法,做一个值改变的功能,在onDraw()方法中添加如下代码:@Overrideprotected void onDraw(Canvas canvas) { ValueAnim

2016-09-16 10:11:00 2373 1

转载 Android消息处理机制

Google参考了Windows的消息处理机制,在Android系统中实现了一套类似的消息处理机制。学习Android的消息处理机制,有几个概念(类)必须了解:1.       Message消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程。2.       Message Queue消息队列,用来存放通

2016-09-14 15:11:17 1440

转载 JVM理解

在阅读本文之前,先向大家强烈推荐一下周志明的《深入理解Java虚拟机》这本书。前些天面试了阿里的实习生,问到关于Dalvik虚拟机能不能执行class文件,我当时的回答是不能,但是它执行的是class转换的dex文件。当面试官继续问,为什么不能执行class文件时,我却只能回答Dalvik虚拟机内部的优化原因,却不能正确回答具体的原因。其实周志明的这本书就有回答:Dakvik并不是一个Java...

2016-09-13 11:06:16 747

原创 ubuntu下Android反编译详细教程-apktool,dex2jar,jd-gui的使用

最近在学习Android反编译的一些知识,虽然在网上搜到了很多相关的文章,但是大多都大同小异,或是未切中要害。整个过程下来,踩了很多坑,所以特地记录下来。本文的所有操作都是在ubuntu下进行的,与其它系统下的操作略有不同。我们都知道,Android的安装包是.apk文件,可以在手机等设备上直接安装,但其实就是一种压缩文件,将要反编译的apk文件后缀名改为.zip后缀,然后就可以直接用解压

2016-09-04 14:17:20 7392 3

unity2019.4中文离线文档-秒开版

unity提供的中文离线文档,虽然是离线,但是打开与搜索仍然很慢,主要是由于内部访问了很多耗时链接。这个资源剔除了很多冗余链接。本地基本可以实现秒开。

2021-05-16

常用排序算法源码下载(Java实现)

常用排序算法的Java实现源码,包括冒泡排序,快速排序,直接插入排序,希尔排序,直接选择排序,堆排序,归并排序,基数排序,计数排序。

2016-09-20

Android反编译工具包-apktool,dex2jar,jd-gui

Android反编译所需工具包集合,其中包括apktool,dex2jar和jd-gui

2016-09-06

空空如也

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

TA关注的人

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