- 博客(40)
- 收藏
- 关注
原创 解决mac下鼠标滚轮和触控板方向相同的问题
mac的触控板已经很好用了,但是在某些时候,还是要用到鼠标(特别是对于我这种游戏开发的ui仔,没有鼠标,拼ui简直是痛苦),但是mac下触控板的双指滚动方向和鼠标滚轮的方向是一致的,总有一个不舒服,dan...
2021-06-01 14:43:37
5524
4
原创 Lua中的do...end
由于去年一年都在写C#,最近换了工作,又要开始重新拾起lua开发,因为只有在实习的时候写过半年的lua,所以这段时间重温一下lua语法,留下一些笔记。zai'shuo
2021-05-30 16:56:38
2272
原创 Unity shader实现URP下2D图片描边效果
内置管线下2D图片的描边已经有很多文章了,在此实现下URP下的2D图片描边效果。由于代码相对简单,比较好理解,直接贴代码了:Shader "outline"{ Properties { _MainTex("Texture", 2D) = "white" {} _lineWidth("lineWidth",Range(0,10)) = 1 _lineColor("lineColor",Color) = (1,1,1,1) } // -----------------------
2021-04-06 21:11:49
2330
2
原创 解决Unity UGUI滑动组件自动回弹的问题
在我们使用Unity自带的滑动组件(Scroll View)时,有时候在Content下填充了物体之后,滑动会出现回弹的情况,也就是划不到最下边,无法看到最下边的元素,如下图所示原因就在于 填充的物体所占的体积大于了Content的大小。如图所示,红色为Content的大小,而黄色为需要滑动的物体所占的大小。解决方案:可以在Content上添加Content Size Fitter和Layout Group组件,这样可以让Content去根据子元素自适应大小,从而保证正常滑动...
2021-03-02 20:08:38
2955
原创 Unity 利用System.Drawing.dll播放GIF 打包之后GIF无法播放问题
当采用了引用System.Drawing.dll来播放GIF时,打包之后可能会出现GIF无法播放的问题,System.Drawing.Image.FromFile()这个方法会报空。原因是引用的dll位置不对,不应该引用当前使用unity的文件位置->Data->Mono->lib->mono->2.0->System.Drawing.dll,而应该用Editor\Data\MonoBleedingEdge\lib\mono\unityjit中的System.Draw
2020-12-11 11:25:00
1182
8
原创 Unity UGUI播放GIF图片(高性能处理方式)
Unity本身现在是不支持GIF的直接播放的,目前网上已经有一些方法可以在UI上播放GIF,例如:https://blog.youkuaiyun.com/u013172864/article/details/78054379但是采用此类方法在播放多个GIF的时候会有明显的卡顿,我们可以做一些优化处理,使得性能更好我们就以上边的GIF播放的方法来进行优化,下边是优化过后的版本,大家可以直接自行对比。using UnityEngine;using System.Collections;using Syst
2020-12-03 22:59:16
5407
7
原创 Unity URP中的Single-Pass到底是什么
什么是URP相信大家都已经看过了很多的文章,这里就不再向大家详细解读URP了,只是简单的提一下:大家都知道,一直以来,unity使用的都是一套内置的渲染管线,全部写在引擎的源码里,大家基本不会能改动,所以过去的管线对于开发者来说,是很难进行定制的。而且对unity官方团队而言,应该也有很大负担,因为他们要在一个渲染管线里支持几十种平台,例如PC,主机,手机等,越来越多的平台支持无疑会使这套代码越来越臃肿,很难兼顾效率和效果,所以unity推出了一套新的基于脚本的渲染管线SRP(可编程渲染管线),主要把渲染管
2020-11-01 15:36:49
3519
1
原创 Unity通过脚本实现不规则多边形的碰撞检测
先上效果图可能大家都已经对Polygon Collider 2D这个组件已经非常的熟悉,就是一个判断多边形碰撞的组件,我们可以通过编辑形状大小来实现对不同多边形的碰撞检测。但是如果遇到较为复杂的多边形,我们在调节时就可能会相对困难,例如下边这个复杂的多边形在这里分享一个脚本,可以去识别多边形最边缘的边,把最边缘的边赋值给Polygon Collider 2D,就可以使得Polygon Collider 2D的大小完美贴合多边形的边缘。查找边缘的主要算法就是取到多边形内不共用的边(可以发现只有边缘
2020-08-26 21:43:03
3934
1
原创 unity为什么有的shader材质不能一键转换为默认支持URP的shader
在unity项目中切换为URP之后,可能大部分材质都会变成粉色(错误状态),这时候我们可以点击Edit-Render Pipeline-Universal Render Pipeline下的选项来进行自动转换为支持URP的材质,但是有的时候会出现“xxx material was not upgraded. There's no upgrader to convert xxxx shader to selected pipeline UnityEditor.Rendering.Universal.Uni
2020-06-29 11:17:03
15541
6
原创 解决用unity制作FPS游戏时枪管插入物体中的问题
在我们用unity制作fps游戏时候,经常会遇到枪械插入到别的物体中的问题,如下图所示,可以看到枪管已经插入到了墙中。我们来解决一下这个问题,解决问题的方法就是为枪械添加一个独立的摄像机,下边来看详细操作。可以看到第一人称控制器下边已经有了一个Camera(主摄像机),此时我们再在FirstPersonCharacter下边添加一个摄像机,并且命名为WeaponCamera(武器相机)。然后更改武器的Layer,例如图上所示的AK47,M4,AWP等,把他们的Layer设为Weapons
2020-06-08 16:40:24
854
原创 C#格式化器如何序列化类型实例
为了简化格式化器的操作,FCL在System.Runtime.Serialization命名空间提供了一个为了简化格式化器的操作,FCL在System.Runtime.Serialization命名空间提供了一个FormatterServices类型。该类型只包含静态方法,而且该类型不能实例化。以下步骤描述了格式化器如何自动序列化类型应用了SerializableAttribute 特性的对象:格式化器调用FormatterServices的GetSerializableMembers方法: p
2020-05-17 14:18:00
265
原创 UNITY Visual Effect Graph初体验
在Unite LA 2018上,Visual Effect Graph作为大会主角,一登场便吸引了无数的眼球,这是一种用于在Unity中构建实时视觉效果的工具。该工具使用GPU运行的计算着色器和基于节点的工作流,相比原来的粒子系统,这个工具更系统,可以处理特效的整个生命周期,可以用图形化的方式连接制作。随着unity2019.3版本的出现,Visual Effect Graph结束了previ...
2020-04-29 17:14:11
3328
原创 C#的垃圾回收算法到底做了什么
应用程序调用 new 操作符创建对象时,可能没有足够的地址空间来分配该对象。发现空间不够,CLR(公共语言运行库,是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境。)就会执行垃圾回收。对于对象生存期的管理,有的系统采用的是某种引用计数算法。事实上,Microsoft自己的“组件对象模型”(Component Object Mode,COM)用的就是引用计数。在这种系统中...
2020-04-21 16:08:06
363
原创 由简单例子了解C#中的委托和Lambda表达式
最近一直在实习,觉得自己的基础还是不行,遇到复杂的代码还是很不容易理解,于是又重温了《C#本质论》,便写下了这篇笔记。委托(delegate):允许像处理其他任何数据一样处理对方法的引用。Lambda表达式:可以快速和简单地创建自定义委托。委托C/C++中允许程序员利用”函数指针“将对方法的引用作为实参传递给另一个方法。C#则使用委托提供了相同的功能。委托允许捕捉对方法的引用,并像...
2019-12-15 11:09:50
381
原创 C#中的空接合操作符(??)和null条件操作符(?.)
空接合操作符(null coalescing operator) ?? 能简单地表示“如果这个值为空,就使用另一个值”。其形式如下:expression1 ?? expression2??操作符支持短路求值。如果expression1不为null, 就返回expression1的值, 不对另一个表达式求值。如果expression1求值null,就返回expression2的值。 和条件操...
2019-11-02 10:39:36
1295
原创 C#字符串是不可变的
string类型的关键特征是在于它是不可变的(immutable)。可以为string变量赋一个全新的值,但出于性能方面考虑,没有提供修改字符串内容的机制。所以不可能将字符串中的字幕全部转换为大写。只能新建字符串,让它成为旧字符串的大写字母版本,但旧字符串在这个过程中不会被修改。代码1:错误,string是不可改变的static void Main(string[] args){ ...
2019-10-26 11:50:49
943
原创 C#中的字符串差值
基本例子创建了两个int变量:foo和bar。int foo = 34;int bar = 42;string resultString = $"The foo is {foo}, and the bar is {bar}.";Console.WriteLine(resultString);输出:The foo is 34, and the bar is 42.表达式...
2019-10-24 23:18:08
879
转载 Lua中的点、冒号与self
Lua中的点、冒号与self,它们之间的关系主要体现在函数的定义与调用上,Lua在函数定义时可以用点也可以用冒号,如:function mytable.fun(p) return pendfunction mytable:fun(p) return pend用冒号定义的函数有个特别的地方是它内部有个self表示自身可以直接访问(虽然self并不是Lua的关键字,他...
2019-10-13 14:16:44
396
原创 Lua中...的意义
... 就是 不定参数(arg),也就是说参数没有规定多少个。例如 print函数,他的参数就没有规定几个。下边看一串代码function try(i,...) --参数为i 和 arg print(i) print(...) print(type(...)) --print(arg[1])--arg等价于... --print(arg[3])endtry(1,2,3,4...
2019-10-09 22:05:16
6959
原创 解决unity动画系统中多次按键之后trigger触发多次的问题
在unity动画系统中,例如用trigger控制人物跳跃动画,当你快速按下相应按键时,可能trigger会触发多次,例如:解决方法如下:在ground状态下新增一个名为FSMClearSignals的脚本,代码如下using System.Collections;using System.Collections.Generic;using UnityEngine;pu...
2019-10-03 10:43:42
7825
3
原创 unity巧妙实现ARPG人物控制代码
在这里依然强烈推荐大家可以去看一下傅老师的unity黑暗之魂复刻视频,讲得实在是太好了!!!传送门:https://www.bilibili.com/video/av21513489先来看一下最终实现的效果动画系统用混合树,三种状态站立、行走、跑步的thresho值分别为0、1、2。下边是代码using System.Collections;using Syst...
2019-10-02 15:50:09
1852
原创 C#中partial关键字的作用
partial关键字告诉C#编译器:类,结构或借口的定义源代码可能要分散到一个或多个源代码文件中。将类型源代码分散到多个文件的原因有三:1.源代码控制:假定类型定义包含大量源代码,一个程序员把它从源代码控制系统中签出(checkout)以进行修改。没有其他程序员能同时修改这个类型,除非之后执行合并(merge)。使用partial关键字可将类型的代码分散到多个源代码文件中,每个文件都可...
2019-09-23 17:06:28
684
原创 C#中的拆箱与装箱
由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以通过显式(或隐式)操作相互转换,而这转换过程也就是装箱(boxing)和拆箱(unboxing)过程。装箱: 是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。拆箱: 是从 object 类型到值类型...
2019-09-21 11:04:12
314
原创 UnityTips!这可能是全的unity小贴士合集(不断更新)
1.在 Awake() 和 OnEnable() 之前如果你想在一个实例化的物体身上执行某些操作,只需要在实例化之前通过SetActive(false)禁用即可。就比如说你需要在停用前储存一些活动状态并在实例化之后调用,通过这个操作可以避免你在其他地方应用了改预制体,可能会导致活动状态以外更改。2.改善低帧频动画的简便方法:更改帧时,请给sprite的scale一个小的弹跳。3.使...
2019-09-21 10:29:01
847
原创 Unity2D简单实现物体跟随鼠标移动并旋转
效果图如下代码如下using System.Collections;using System.Collections.Generic;using UnityEngine;public class FollowMouse : MonoBehaviour { // Use this for initialization void Start () { } //...
2019-08-31 16:17:38
11997
6
转载 我们为什么要使用空接口
FxCop设计规则中的第三条提供了对空接口的检查.下面是它的描述:一个接口提供了一组行为和使用契约(usage contract),任何一个类型都可以实现这个Interface, 而不需要考虑这个类型的继承层次。一个类型通过实现接口的成员而实现这个接口。一个空的接口没有定义任何成员,因此,也就没有任何契约能够被实现。如果你的设计包含一个空的接口,并且希望一些类型实现这个接口,你很可能希望使...
2019-08-22 11:03:24
1593
原创 超简单的unity游戏热更新方案之xLua(三)——真正开始尝试热更新
第一篇:超简单的unity游戏热更新方案之xLua(一)——准备工作第二篇:超简单的unity游戏热更新方案之xLua(二)——Lua虚拟环境搭建---------------------------------------------------------------------------------------------------首先先明确一款商业游戏的开发过程:首先开...
2019-08-18 11:08:24
1881
原创 超简单的unity游戏热更新方案之xLua(二)——Lua虚拟环境搭建
第一篇:超简单的unity游戏热更新方案之xLua(一)——准备工作第三篇:超简单的unity游戏热更新方案之xLua(三)——真正开始尝试热更新---------------------------------------------------------------------------------------------------找一个地方新建一个文本文档,用来编写Lua代...
2019-08-18 10:36:15
901
原创 超简单的unity游戏热更新方案之xLua(一)——准备工作
第二篇:超简单的unity游戏热更新方案之xLua(二)——Lua虚拟环境搭建第三篇:超简单的unity游戏热更新方案之xLua(三)——真正开始尝试热更新---------------------------------------------------------------------------------------------------学习之前可以先看一下xLua的官方...
2019-08-17 19:29:57
1439
2
原创 Lua中 pairs 和 ipairs 的异同
Lua中 pairs和ipairs都是Lua默认提供的迭代函数。相同之处:都是能遍历集合(表、数组)不同之处:ipairs 仅仅遍历值,按照索引升序遍历,索引中断停止遍历。不能返回 nil,如果遇到 nil 则退出。它只能遍历到集合中出现的第一个不是整数的 key。pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回...
2019-08-16 16:22:56
485
原创 抽象类和接口的含义以及区别
抽象类、抽象方法以及接口,这三个知识点是每个程序员必备的基础,无论是在实际编程的时候,还是在面试的时候,都会出现这类问题,面试官很可能就会问你,interface和abstract的区别,但是当你知道他们的区别的时候,便能从容地回答...抽象类是什么:抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象...
2019-08-05 10:36:21
292
原创 Unity2D判断两个物体碰撞的方向
我们要从Collision2D或者Collision2D的碰撞点,然后根据碰撞点的法线去判断是从那个方向碰撞的private void OnCollisionEnter2D(Collision2D coll){ if (coll.contacts[0].normal.y == -1)//从上方碰撞 { } else i...
2019-08-02 11:37:01
3930
1
原创 Unity代码简单实现物体自动左右移动
效果如下using UnityEngine;using System.Collections;//Add this script to the platform you want to move.//左右移动的平台public class MovingPlatform : MonoBehaviour { //Platform movement speed.平台移动速度 p...
2019-07-31 17:19:18
15925
6
原创 C#常用设计模式(Unity)——游戏场景的转换——状态模式(State)
此文章原文来源于《设计模式与完美游戏开发》(蔡升达著),笔者只是在学习过程中受益颇多,从而进行了总结,有兴趣的读者可以去阅读原书。1.场景的转换当游戏比较复杂的时候,通常会设计多个场景,让玩家在几个场景之间切换,某一个场景可能是角色在一个大地图上行走,另一个场景则可能是在洞穴探险,这样的设计方式类似于舞台剧,一幕幕的呈现,但对于观众来说,同一时间只能看到演员在某一个场景中的演出。当我们...
2019-05-30 19:42:00
3271
转载 C#冒泡排序与快速排序比较
今天是开篇,得要吹一下算法,算法就好比程序开发中的利剑,所到之处,刀起头落。针对现实中的排序问题,算法有七把利剑可以助你马道成功。首先排序分为四种: 交换排序: 包括冒泡排序,快速排序。 选择排序: 包括直接选择排序,堆排序。 插入排序: 包括直接插入排序,希尔排序。 合并排序: 合并排序。那么今天我们讲的就是交换排序,我们...
2019-05-18 17:02:22
490
原创 C#socket编程——TCP协议和UDP协议的区别
TCP协议:基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端主动推送消息。使用Tcp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) (2).绑定服务器端IP地址及端口号--服务器端 (3).利用Listen()方法开启监听--服务器端 (4).利用Accept()方法尝试与客户端建立一...
2019-05-18 16:30:13
1445
原创 C#socket编程——UDP协议创建服务器端和客户端并进行通信
上次利用代码在一台电脑实现了TCP协议创建服务器端和客户端并进行通信,这次我们来用UDP协议进行实现。(建议先了解TCP协议如何实现数据传输)(传送门:https://blog.youkuaiyun.com/wang568270833/article/details/89764756)TCP协议和UDP协议有什么区别呢?这里先简单的说一下,TCP协议在收发数据之前有一个连接的功能,就是在服务器端调用A...
2019-05-12 22:37:28
3818
原创 C#socket编程——TCP协议创建服务器端和客户端并进行通信
我们做网络通信的时候需要有通信协议,在进行socket编程的时候有两种通信协议TCP、UDP,这次我们就用简单的方式在一台电脑建立TCP协议的服务器端和客户端并使之进行通信。服务器端和客户端进行连接,第一步就行在服务器端创建一个socket,开始监听客户端的连接,然后在客户端创建一个socket,向服务器端发起连接,这样连接建立起来之后就可以进行数据的交换。由于Visual Studio一...
2019-05-02 22:14:18
14187
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人