自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hello Mingo

既然天注定,我们各自修行。

  • 博客(63)
  • 资源 (4)
  • 收藏
  • 关注

原创 Unity内存管理之GC

Unity中的System.GC是.Net提供给开发人员用以控制垃圾回收的方式。但是GC(garbage collection)的发展历程并不是从.Net开始,相比于.Net,GC的历史要悠久的多。虽然在本篇中我们要讨论的是.Net的GC,但是有必要强调的是,GC是一种思想,一种机制。GC是什么Garbage consists of objectsthat are dead....

2019-12-18 14:14:38 1253

原创 Unity渲染流程概述

本篇的任务是回答:在Untiy的渲染流程中CPU和GPU分别做了什么。渲染到设备屏幕显示的每一帧的画面,都经历几个阶段的加工过程:应用程序阶段(CPU):识别出潜在可视的网格实例,并把他们及其材质提交给GPU以供渲染。 几何阶段(GPU):进行顶点变换等计算,并将三角形转换到齐次空间并进行裁剪。 光栅化阶段(GPU):把三角形转换为片元,并对片元执行着色。片元经过多种测试(深度测试,a...

2019-12-04 19:58:29 12218

原创 面向对象与设计模式概述

从宏观理解面向对象的特点:提到封装,在身边最常听到的就是为了把功能相似(重复)的代码进行“封装”(伴随着封装往往产生了继承),甚至对类的封装听到的都很少,更不用提抽象层次的封装。封装的目的是使得外部调用只关注使用而非实现过程。但在这里我想强调的是宏观层面的,并不是将功能的实现整理成统一调用的方法和类这么简单,而是通过抽象对类与类或模块与模块之间的关系进行约束。 对于继承,码农想到的就是子类继...

2019-11-28 13:35:08 830

原创 Shader处理角色皮肤特效接缝

游戏角色皮肤要做流动特效,如果使用顶点uv对效果贴图进行采样,存在以下几个问题:因为在展UV的时候,各个结构之间基本都是拆开的,流动效果会有明显的接缝问题,破坏了效果的完整性 同样因为展UV的原因,无法保证各个部位的流动方向一致具体效果如下:所以,效果图采样不能使用顶点UV,可以考虑使用顶点的世界坐标或自身坐标。如果使用世界坐标,那么就会出现角色在移动过程中,对特效流动效果产生影响,这要看具体影响程度。如果使用自身坐标,需要设置一个偏移量,因为大部分角色的模型左右对称,如果不做一个偏移并

2021-11-23 19:52:12 2106

原创 Unity Shader 踩坑笔记之:real精度

部分特效使用粒子发射mesh,在苹果部分机型和某民族品牌的很多机型上出现了如下故障:观察分析后发现,是mesh表现异常,被显示成了box。通过如下手段进行排查:通过整包的方式排查了AB资源依赖——无效 开启了mesh的Read/Write Enable——无效 使用官方的URP渲染管线——无效 把shader中定义的target统一到3.0——无效 关闭了GPU INSTANCING——无效 对特效进行单独打包——表现正常最后通过与表现正常的shader进行逐行对比,发现出问题的

2021-11-12 16:39:45 4422

原创 Unity URP SRPBatcher踩坑记录

SRPBatcher是对相同shader材质进行渲染优化的一种方式,这里不介绍使用方式,只针对在使用过程中遇到的坑点进行记录。关于:Node use different shader keywords因为使用了不同的keywords导致了batch中断,首先应该检查mat设置使用的keywords是否一致。但既然是坑,就不可能这么简单解决。状况1:检查以后发现mat设置相同,把shader中的所有keywrod都关掉,保证shader只有一个变体,结果也还是报这个信息。问题原因:美术在制

2021-10-13 17:28:26 5702 2

原创 Unity特效性能测试小工具

闲来准备了一个批量自动化测试特效性能的小工具,导出的是txt文本,后续有时间升级到excel表格。using System.Collections;using System.Collections.Generic;using UnityEngine;using System.IO;using System;using Random = UnityEngine.Random;public class EffectProfTest : MonoBehaviour{ /// &lt

2021-09-19 21:53:07 614 1

原创 python小工具:检查资源中的大尺寸图片

# coding=utf-8import osimport filecmpimport loggingimport systry: from PIL import Imageexcept: import os os.system('pip install pillow') from PIL import ImagerootPath = r"E://WorkSpace/diablo/UI/assets"maxSize = 1024def loadAl.

2020-08-25 15:00:22 312

原创 Unity+Android替换默认启动类UnityPlayerActivity.java

*本文中的方案,适用于支持Java文件打包的Unity2018.2及以上版本。Android项目都会有一个默认启动类,通过Unity打包成AndroidStudio项目后,可以看到,在主包下面会有一个文件UnityPlayerActivity.java,这个就是Unity打包的工程的默认启动类。一般来说,这个类是不需要修改的,但是我就遇到了特殊情况...在接入第三方平台SDK的时候,因为某些原因,需要设置Activity的启动模式为sigleTop(Unity默认设置为sigleTask)。然而

2020-06-04 20:59:12 6383

原创 Unity+.NET3.5+Android的TcpClient的一个BUG

如果你遇到了以下描述的情况,很可能是这个Bug导致的:客户端在断开上一个连接以后,开启下一个连接,新连接读取到的数据发生错误 条件同上,Stream一直处在read阻塞中,所需要的数据读取不全 条件同上,网络通信奇奇怪怪问题的具体原因经过两天的秃顶式测试,现总结如下:使用TcpClient进行Socket连接以后,通过Read方法进行数据的读取,Read方法属于同步操作,当缓冲区没有...

2020-04-16 20:05:52 381

原创 不懂python也能写爬虫之——一晚上搞定爬虫

前言这篇帖子不会涉及到理论,只要你有一定的编程基础,就一定能看懂。首先说明,距离我最近一次写Python已经是三年半以前了。那时候的Python还没这么火,当时只是因为工作需要,被迫学了点,然后就写了两个月的逻辑。毕竟现在Python这么火,各种以Python之名打的广告铺天盖地,忽悠小孩子的也打上了Python的旗子。没事的时候想想好歹我曾经也是会Python的人啊...说不定哪天辞职回...

2020-03-05 20:50:30 458

原创 枚举类型用法和原理浅窥

本文只探讨C#中的枚举实现和使用,至于其他语言的用法,读者自行探究。本文会捎带提一下枚举的基础用法,后面重点讲枚举和位运算相关的内容。基础知识C# 的枚举(Enum)类型是用于声明一组命名常量的基本数据类型(int类型),声明格式如下enum <enum_name> {enumeration list};其中enum_name 指定枚举的类型名称; enumer...

2020-02-14 16:27:12 216

翻译 C#中的堆和栈(三)

原文链接:https://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-iii/导言虽然在.NET Framework下编程,我们不需要主动的关注内存管理和垃圾回收(GC),但是为了更优的程序性能,我们还是应该关注内存管理和GC。当然从根本上理解了内存管理是如何工作的也会帮助我们了解程序中的每一个...

2019-12-20 17:10:11 191

翻译 C#中的堆和栈(二)

原文链接:https://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-ii/前言虽然使用.NET Framework编程时我们不必主动的关注内存管理和垃圾回收,但是为了更优的程序性能,我们还是应该对内存管理和GC有一定的了解。而且,从根本上理解了内存管理的工作方式也可以帮助我们理解程序中的每一个...

2019-12-20 14:43:32 158

翻译 C#中的堆和栈(一)

原文连接:https://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-i/引言虽然使用.NET Framework时我们不需要主动关心内存管理和垃圾回收,但为了保证程序的性能,对内存管理和垃圾回收还是应该有必要的了解。从根本上理解内存管理的工作方式,也可以帮助我们理解在项目中使用的每一个变量是如...

2019-12-19 19:33:44 1040

原创 Unity Shader中CGINCLUDE和CGPROGRAM

Unity ShaderLab支持使用GLSL、HLSL和CG三种语言编写shader。CG(C for Graphics )是 NVIDIA 公司开发的语言。从名字上来看的出它是 C 语言的亲戚,现实是它保留了 C 语言的大部分语义。NVIDIA官方已经宣布自CG3.1版本后,不再维护和发展Cg语言。 HLSL(High Level Shader Language) 的简称,由微软和NV...

2019-12-16 17:14:08 2035

原创 Unity脚本生命周期总结——内置事件方法执行顺序详解

前言这篇贴子的内容主要信息来源是Unity的官方文档Version2019.2:https://docs.unity3d.com/Manual/ExecutionOrder.html也会根据这些年自己的开发经验,谈一些自己的看法和小技巧。就算初级Unity程序员也应该知道的Unity的内置事件方法很多,最基础的也是最常用一些,列举如下:方法名(按单次执行顺序排列) ...

2019-12-13 18:29:47 980

翻译 让错误代码更明显-Making Wrong Code Look Wrong

前言这篇文章是在《游戏引擎架构》这本书的推荐里看到的,看完以后觉得作者的观点和我平时的想法非常接近,所以决定翻译一下。我看到了网上有这篇文章的纯中文版本,但是是机翻的。在这里你将看到的是我花费了大把时间,一句话一句话翻译过来的版本。为了方便读者理解,我将原文也拷贝了过来,如果我哪里翻译的不准确,或者让你迷糊的,可以直接看原文。这篇文章的要讲的内容并不复杂,但是写的确实很啰嗦,或许是为了让读...

2019-12-11 21:17:45 1659

原创 Unity的静态批处理和动态批处理

什么是批处理为了将物体绘制到屏幕上,引擎必须向图像API(例如OpenGL、Direct3D)发送一个draw call指令。每一次draw call就可以大致理解为一个渲染批次(batch)。Draw call属于资源密集型的指令,图形API要为每个Draw call做大量的工作。造成CPU性能消耗的主要是渲染状态的切换导致的,例如切换到不同的材质,这会导致在图形驱动中产生密集的资源验证和切...

2019-12-05 18:32:49 5439 1

原创 Unity 镜头烟雾特效的笔记贴

效果:烟雾缭绕实现思路的探索:最直接的思路就是用粒子模拟,粒子特效特效跟随摄像机,然后布拉布拉的往外喷。效果还可以接受,但是用默认shader实现的粒子特效,会跟墙体地面等场景物品产生明显的接缝。这个问题起始解决起来也比较方便,把默认的粒子shader复制一遍,然后关闭ZTest。但是,虽然这个效果也可以接受,但是,为了压缩这一点点的性能开销,还是像尝试使用UV实现。PS4上看到一款游戏《路弗兰的...

2018-06-02 21:59:43 6410 4

原创 Unity地形切割后打包成AssetsBundle再进行加载的笔记

1.TerrainData文件切割成小块以后,分别打包成单独的AssetsBundle文件,如果不对依赖的资源进行bundleName进行设置,就会出现这部分依赖资源重复打包的问题。单独设置bundleName以后,所有依赖的资源都打包成了单独的文件。解决了资源重复打包的问题。2.资源依赖的信息是记录在.manifest文件里的,但是记录的是绝对路径。因为项目制作过程中是分为1:资源整合项目,2正...

2018-05-16 16:22:55 2113 2

原创 Unity Shader 自定义SurfaceShader

这里只做记录用,不进行详细的讲解。Shader "Custom/SurfaceShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5

2017-12-15 18:13:48 1357

原创 Unity Shader之TRANSFORM_TEX方法

TRANSFORM_TEX方法比较简单,就是将模型顶点的uv和Tiling、Offset两个变量进行运算,计算出实际显示用的定点uv。

2017-12-13 11:42:37 27476

原创 一套爽到哭的高效程序猿辅助工具

我以为高效的程序员可以不用鼠标

2017-05-02 16:34:43 2217

原创 解析Unity中transform.positon.x不能赋值的原因

用C#实现的代码中,transform.positon的分量不能单独赋值修改,必须对position进行整体修改。这算是个常识,但是至于为什么却从来没有考虑过。有人说是因为xyz分量是只读的。这样的解释纯属瞎猜。进入Vector3里面看一下就知道了,并不是只读的。并且Js实现的代码中是允许单独修改transform.position的分量的。做一组对照试验PositionTe...

2017-04-25 20:07:19 6182

原创 UnityShader常用设置标签和命令

这篇帖子纯粹是为了记录一下最近的学习内容。并不会讲解什么内容。关于多个Pass执行的疑惑在没有设置标签Tag(如"LightMode"(暂时不知道还有没有其他的))的情况下,全部的Pass都会执行。如果有设置Tag内容,比如"LightMode"=“ForwardBase”,那么就会根据条件进行选择性的执行了。至于怎么选择的,网上帖子很多,不作为本篇重点。关于半透明材质

2017-04-23 20:26:23 1203

原创 UnityShader太空中的大气层效果

在Unity中实现宇宙中的大气层效果

2017-04-21 14:04:20 3358

原创 从Quaternion.LookRotation()和Quaternion.AngleAxis()开始

Quaternion提供的这两个方法用起来非常简单,比之前自己用欧拉角计算方便很多。一直以来习惯了使用欧拉角,对Quaternion一直没怎么上心,今天用了一下,还是很爽的。兴致一下子就高涨起来了。也算是从这两个方法开始吧,好好研究一下矩阵和四元数,为后面Shader的学习打下良好的数学基础。

2017-04-17 18:34:22 4954

原创 unity ugui对场景中鼠标点击事件的遮挡

unity ugui对场景中鼠标点击事件的遮挡

2017-04-03 16:47:44 4840

原创 从C#中的ArrayList和List的区别说起

List和ArrayList作为C#中的集合,因为其长度动态,所以用起来较数组方便。但是很多新手都被网络上流传的所谓答案误导了。

2017-03-22 13:40:15 14280 4

原创 关于Lerp插值的基本原理和在Unity中的应用

简单的讲解一下其实也很简单的Lerp插值运算。通过这个讲解,希望能传达一种积极的严谨的程序思维。

2017-03-22 12:35:09 10114 1

原创 Unity在Scene中自定义3D ICONS

关于方法OnDrawGizmos的初次探索

2017-03-13 17:43:16 1149

原创 Unity拓展Inspector面板之添加自定义Button

Unity拓展Inspector面板之添加自定义Button

2017-03-09 17:20:34 8209

原创 Unity NGUI对特效的显示范围进行控制

在ngui的ScrollView中如果有特效存在,特效是不受panel裁剪的影响的。那么怎么限制特效的显示范围呢?

2017-03-08 13:55:44 3080 3

原创 Unity中对C#泛型<T>的使用

Unity中对C#泛型<T>的使用

2017-03-01 13:13:09 2927

原创 Unity中的ForceMode——纠正《UnityAPI解析——陈泉宏》一书 关于ForceMode的注解

在从网上查找FoceMode的四种方式的不同时,找到的这个内容。看完前面的公式,基本上就明白了官方注释中的continuous和instant的区别。但是自己按照书中的设置写了个例子,却发现结果出入很大。本身我是个文科生,动量定理根本没学过,所以就懵圈了!

2017-02-28 21:29:38 4613 1

原创 Unity根据条件控制Inspector面板中的属性显示

很多情况下,一个组件可调整的属性比较多,但是属性之间又有一定的联系,最简单的,当属性type是类型typeA时,属性width和height才会起作用。这时候,为了界面的整洁和直观,如果type的属性不是typeA,那我们就没必要暴露出width和height属性。

2017-02-18 21:04:09 15730 9

原创 Unreal里的SetLifeSpan()和InitialLifeSpan

这两个意思很简单,SetLifeSpan()是说还能活多长时间,InitialLifeSpan是你生下来只能活多长时间。时间到了就寿终正寝(自动销毁)。唯一需要注意的一点是:当值设置为0时,物体是不会被销毁的。官方的原话是这样的:Set the lifespan of this actor. When it expires the object will

2017-01-11 21:16:25 1758

原创 Unreal属性宏UPROPERTY的参数

关于UPROPERTY的介绍,官方是这么说的:UProperty变量通过标准C++语法及额外的描述符号进行声明,描述符号包括变量修饰符以及放置于声明上的元数据。(官方中文释义)

2017-01-07 16:20:52 7908

原创 从Unreal的GameMode开始

所谓GameMode,顾名思义就是游戏模式,也可以理解为游戏规则。一个游戏可以有任意数量的GameMode,但是在一个时间点,只能有使用一个GameMode。

2017-01-05 18:25:54 8465

程序员必备书籍

纯英文版PDF,非扫描版,慎重下载。包含7本高级程序员必备书籍

2014-12-04

游戏开发物理学

如果想真正做出一些好的游戏来,就看看吧,挺不错的书!

2013-04-18

空空如也

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

TA关注的人

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