unity3d

Unity Shader 玻璃效果

大城市里の小女人 提交于 2021-02-14 13:46:22
一个玻璃效果主要分为两个部分,一部分是折射效果的计算,另一部分则是反射。下面分类进行讨论: 折射: 1.利用Grass Pass对当前屏幕的渲染图像进行采样 2.得到法线贴图对折射的影响 3.对采集的屏幕图像进行关于法线方向上的扭曲和偏移,以模拟折射效果 反射: 主要利用环境贴图产生反射的残影,并和主贴图采样结果混合 得到反射和折射的结果后,以一个插值变量控制最终效果(类似于玻璃的透光率); 脚本如下: 1 // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' 2 3 Shader " MyUnlit/GlassRefraction " 4 { 5 Properties 6 { 7 _MainTex ( " Texture " , 2D) = " white " {} 8 // 这里的法线贴图用于计算折射产生的扭曲 9 _BumpMap( " Normal Map " ,2D)= " bump " {} 10 // 这里的环境贴图用于反射周围环境的部分残影 11 _Cubemap( " Environment Map " ,cube)= " _Skybox " {} 12 _Distortion( " Distortion " ,range( 0 , 100 ))= 10 13 // 一个折射系数

Unity小王子私藏的开发2D游戏的常用插件合集

ぃ、小莉子 提交于 2021-02-14 08:55:25
Unity以开发3D游戏见长,早期版本的Unity在开发2D游戏时不慎方便,因此Asset Store出现了很多2D游戏开发引擎。现在Unity对2D游戏的支持越来越好,而这些开发2D游戏的Unity插件也得到了更多开发者的喜爱。 1: Rex Engine: Classic 2D Platformer Engine Rex Engine: Classic 2D Platformer Engine是一款在Unity内部专门制作2D平台游戏的游戏引擎,可以查看下面的官宣。 2: TopDown Engine TopDown Engine和Corgi Engine来自同一开发者,是制作2D/3D动作类游戏的最佳引擎。 3: Platformer PRO 2 Platformer PRO 2是一款制作2D/2.5D的平台游戏引擎,内部集成了大量功能,包括跳跃等运动系统。 4: Corgi Engine – 2D + 2.5D Platformer Corgi Engine是一款制作2D/2.5D的平台游戏引擎,内部集成了若干有趣的游戏,Corgi Engine弥补了Unity制作2D游戏的短板。可以看一看下面的官宣。 5: DoozyUI: Complete UI Management System DoozyUI是Unity内部的一个UI管理插件。 6: Fingers – Touch

Unity3D安卓打包

对着背影说爱祢 提交于 2021-02-13 18:38:42
Unity3D安卓打包须知: 最近在接触Unity3D,在打包安卓时,出现了一些问题,在这里写出来跟大家分享: 首先需要安装jdk和android-sdk,安装方法略 Jdk的目录结构如下: android-sdk的目录结构如下: 安装好后,到android sdk的安装目录,找到SDK Manager.exe,运行之,界面如下: 前两个:Android SDK Tools和 Android Platform-Tools必须安装。 下面的Build-tools至少安装一个( 建议安装高版本的,低版本可能会出现打包错误 ) 然后安装SDK-Platform,它必须和Build-tools的版本对应: 至于下面的Extras,不知道具体是干什么用的,建议全部安装: 然后点击Edit->Preferences,将SDK和JDK的目录设置好 至此,环境已全部搭建完成。 接下来开始打包: 首先点击file -> Build Settings 进入导出对话框 导出对话框如下 选择 Android ,无需更改其他内容,点击build 这时可能会出现以下错误: 解决方法: 点击Edit->Project Settings->Player,会显示这个界面如下界面,请执行以下修改: 将包名改成 com.YourCompanyName.YourProductName 格式,不能以数字或下划线开头

Unity热更新之资源的上传与下载

久未见 提交于 2021-02-13 18:25:08
资源的上传 打包结束后,我们通过比较打包前和打包后AssetBundle的MD5值是否有变化来判断一个AssetBundle是否需要被更新,如果该AssetBundle的MD5值发生了改变,则我们将这个AssetBundle拷贝到我们的待更新文件夹中。更新文件夹的命名应该为当前的大版本号+资源版本号,这样下载的时候才能找到正确的路径,更新文件夹目录结构如下: UpdateFiles |-- iOS |-- 1.0 (大版本号) |-- 170513.1 (资源版本号) |-- VersionFile.txt |-- StreamingAssets |-- Prefabs |-- a.prefab |-- ... |-- StaticData |-- ... |-- Android |-- 1.0 (大版本号) 将所有需要更新的资源拷贝到更新文件夹后,将本次的更新资源的文件夹上传到资源服务器上。 资源的下载 获得服务器版本号,与客户端当前版本号作比较,如果是大版本更新,去商店下载,如果是小版本更新则去资源服务器下载。 拼接资源服务器地址,获得versionFile下载地址,根据大版本号,手机平台和资源版本号得到下载地址为: baseurl/ios/1.0/170513.1/VersionFile.txt 。 下载VersionFile,并与上一次手机缓存的VersionFile作对比

C#状态机Stateless

风格不统一 提交于 2021-02-13 12:02:16
最近在折腾一些控制相关的软件设计,想起来状态机这个东西,对解决一些控制系统状态切换还是挺有用的。 状态机(有限状态自动机)网上有很多介绍 。简单理解就是定义一系列状态,通过一系列的事件,可以使得状态可以相互之间切换。 如果不使用状态机的思想来编程,那么针对过程的编程方法会使得程序拓展性变差,并且不容易调试。而状态机只需要定义好了各种状态和状态切换之间的事件,你只管触发事件,剩下的事情它自己就自动完成了(毕竟名称叫做有限状态自动机),这对于很多需要定义各种控制阶段的系统简直是完美适配。了解到.NET也有很多库可以实现这些功能,本文主要介绍一下Stateless的应用。 Stateless介绍 Stateless 可以创建极简的状态机与对应的工作流。很多项目(包括VisualStudio Extension、AIlab)都有使用到它。 https: //github.com/dotnet-state-machine/stateless 它支持以下特性: 支持各种类型作为状态和触发事件 支持状态继承 支持状态进入/离开事件 支持条件状态转移 支持状态/转移查询 也有几点需要注意的: 它支持异步语法,但是它是单线程的,不是线程安全的。 可以导出DOT graph 安装起来很简单,直接在nuget中安装即可: Install - Package Stateless Stateless使用

Unity Shader-后处理:简单均值模糊

醉酒当歌 提交于 2021-02-13 05:32:46
一.简介 今天来学习一下后处理中比较常用的一种效果,屏幕模糊效果。模糊效果,在图像处理中经常用到,Photoshop中也有类似的滤镜。我们在游戏中也会经常用到。因为屏幕模糊效果是一些高级后处理效果的基础,比如景深等效果都需要用屏幕模糊效果来实现,所以我们首先看一下屏幕模糊效果,然后通过屏幕模糊,进一步学习景深效果与运动模糊效果的实现。 所谓模糊,也就是不清楚,清晰的图片,各个像素之间会有明显的过渡,而如果各个像素之间的差距不是很大,那么图像就会模糊了,极端一点的情况,当一张图片所有的像素之间颜色都差不多时,那么这张图片也就是一个纯色的图片了。模糊操作就是让像素间的颜色差距变小,比如A点是红色,A点周围的点是绿色,模糊就像用一把刷子,将A点和周围的点的颜色混合起来,变成最终的颜色。而怎样混合,按照不同的权值进行混合,就可以达到不同的效果了。比如均值模糊,以及著名的高斯模糊。 影响模糊程度的重要因素是模糊半径,模糊半径越大,模糊程度越大,模糊半径越小,模糊程度越小。那么,模糊半径是什么?所谓模糊半径,也就是我们采样的一个范围,比如我们模糊的半径很小,只是把像素和它周围的一圈定点混合,那么模糊的程度就很小,而如果我们加大模糊半径,极端情况是每个顶点都取了周围所有点,也就是整张图的像素平均值,那么这张图的颜色就会偏向一种颜色。 二.均值模糊 最简单的,我们看一下简单的模糊

Unity Shader-后处理:高斯模糊

房东的猫 提交于 2021-02-13 04:59:38
一.简介 上一篇文章学习了模糊的原理以及基本的模糊实现,对于清晰和模糊这个定义感觉还是比较说明问题,这里再贴出一下:“清晰的图片,各个像素之间会有明显的过渡,而如果各个像素之间的差距不是很大,那么图像就会模糊了”。鉴于这个定义,我们就可以通过代码来实现模糊的效果。上一篇Unity Shader-后处理:均值模糊中实现了一个基本的均值模糊,也就是将一个像素和其周围的像素取平均值从而进行模糊,并且通过迭代处理的方式,增强了模糊的效果。但是,均值模糊由于采样次数较少,每个像素以及其周围像素的权值是相同的,模糊出来的效果不佳,而多次迭代处理虽然可以增强模糊效果,但是迭代大大地增加了性能的消耗,虽然在学习时可以用迭代来达到效果,但是要实际使用的时候,效率就不得不成为我们考虑的重要因素。所以,这一次,我们来学习一下更加高级的模糊效果-高斯模糊。 高斯模糊(Gaussian Blur),又叫做高斯平滑。高斯模糊主要的功能是对图片进行加权平均的过程,与均值模糊中周围像素取平均值不同,高斯模糊进行的是一个加权平均操作,每个像素的颜色值都是由其本身和相邻像素的颜色值进行加权平均得到的,越靠近像素本身,权值越高,越偏离像素的,权值越低。而这种权值符合我们比较熟悉的一种数学分布-正态分布,又叫高斯分布,所以这种模糊就是高斯模糊啦。 二.概念介绍 1.正态分布 先来复习一下正太分布

Unity 镜子效果

青春壹個敷衍的年華 提交于 2021-02-13 00:40:41
1 Create Mirror —— 创建镜子 本教程,无需自己找镜子Shader,只需2个脚本即可在Unity中创建一个简单的模拟镜面反射效果 1. 在场景中创建一个 Plane —— 用来作为镜子 2. 同时创建一个材质球 /Material —— 给到 Plane 上 3. 修改新创建的 Material 的 Shader 为 Unlit/Texture 2 Create Camera —— 创建一个新相机 1. 新建一个 Render Texture(我改名为 Plane 便于区分和理解) 2. 右键 层次列表/Hierarchy —— 创建一个新的 Camera 3. 将新建的 Render Texture(Plane)给新建的 Camera 组件中的 Target Texture 4. 给新建的 Camera相机,添加脚本 ChinarMirrorPlane 并将 Main Camera与 Plane 拖到 Inspector 面板中对应的属性里 5. 给新建的 Camera相机,添加脚本 ChinarMirror ,并将 Plane 拖至 Inspector 面板中 注意: 一定要修改 Plane 材质的属性为: 具体流程其实很简单,如下 两个脚本,都需要挂载到 Camera: using UnityEngine; /// <summary> /// 镜子管理脚本 —

CocoaPods could not find compatible versions for pod “FirebaseCore”

大城市里の小女人 提交于 2021-02-11 17:44:47
问题 When I try to build with Unity cloud build, I got this message: and then > Installing cocoapods dependencies: >64201: ! .xcworkspace file could not be found. >64202: Analyzing dependencies >64203: [!] CocoaPods could not find compatible versions for pod "FirebaseCore": >64204: In Podfile: >64205: Firebase/Analytics (= 6.9.0) was resolved to 6.9.0, which depends on >64206: Firebase/Core (= 6.9.0) was resolved to 6.9.0, which depends on >64207: FirebaseAnalytics (= 6.1.2) was resolved to 6.1.2,

Firebase keepsynced

和自甴很熟 提交于 2021-02-11 17:00:06
问题 Working with Firebase in a Unity project, for a simple highscore, I stumbled on problems when doing a query. In editor, everything works like a charm (Editor does not have persistence) On devices (with persistence enabled) the troubles begin. Query is showing cached Firebase data, so it is only correct on first ever call in the client, and then when Firebase sees it fit to sync (maybe never, since there is no eventhandler) However, looking for a solution, there is no way to force an update of