[Unity插件] FX Maker
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Unity插件] FX Maker相关的知识,希望对你有一定的参考价值。
参考技术A 插件介绍FX Maker是一款制作特效的工具,它专为移动操作系统做了优化。包括300种Prefab特效,300种纹理结构、100种网格、100种曲线效果。支持英文和韩文,由开发商IGSoft提供。是UNT3D中一款强大的粒子特效制作工具。
概述
- FX Maker包含300个特效Prefabs。
- 已经为移动设备进行了优化。FX Maker是用来产生特效的工具(创建、查看、分析、测试)。
- 支持BuildSprite功能,可以把数百个三角形转化为仅仅2个三角形。
- 支持Mesh、Legacy和Shuriken粒子系统。
- 粒子大小调节(Transform.Scale)
- 调整速度(Mesh, Legacy, Shuriken)
- 适用于Unity 4.3.4或更高版本(支持Unity5)。
- 包含的资源:300个特效,300个纹理,100个Mesh,100个曲线动画。
FX Maker是Unity3d一款非常流行的效果制作插件。不但有超过300种效果预制体, 还可以自己制作效果。包含Mesh Effect 和Particle Effect。
优点:资源库大,可以将消耗资源非常多的粒子效果 转换为帧动画效果。当然也可以直接用不转帧动画的效果,这种效果是画面最好的,但是对显卡开销大。帧动画显卡开销小,占内存大,适合移动平台。Fx Maker还能自动保存。
使用步骤:
一:导入包
http://jingyan.baidu.com/article/cb5d6105fda595005d2fe068.html
二:打开主场景sceneFXMaker
三:运行
运行界面如下,注意不要选全屏运行,要在运行时至少同时有Game界面和Inspector界面。
当前运行的效果对应 _CurrentObject下面的物体。既可以对下图左侧的UI界面操作,亦可以对Hierarchy下面的物体进行直接操作。
EffectMesh
网格动画,主要是平面的网格动画,Mesh_Ring和Mesh_Virtical有特殊形状的形状片的动画。
EffectParticle
粒子效果,其中最后的Shuriken里包含的是新的Shuriken粒子系统,其他全是旧的粒子系统。
EffectSample
效果样例展示
Resources
包含一些资源,其中最重要的是Animation的曲线效果 和 Mesh下的网格
四:做简单的帧动画效果
1.选第一个Project文件夹,新建一个空效果
2.从已有的效果拷贝物体过来
已有效果,对着FX Maker UI里的物体点击右键,Copy
3.运行看看效果
4.做成帧动画(精灵动画)
先点击Sprite
在出现下图左侧的Build Sprite界面时,用鼠标滚轮调整视口,如右侧红框,使之刚好涵盖效果区域。
接着可以直接点“Build Sprite”按钮
之后就生成了新的效果,名字是 原名+_1 之类的,就在原效果旁边。
对着新效果点右键,Export。 之后就生成了一般的Unity Package。
包括了所有这个效果需要用到的资源。
五:使用导出的效果
直接导入使用即可。效果路径和原工程下的路径完全一样。
六 加入其他东西Build Sprite
并不一定要FxMaker的效果才可以拿来Build Sprite。任何东西,只要相机看得见就可以放进去Build Sprite。并且可以和FxMaker的混合Build。
将东西加到效果下,这里是将Unity包里的Constructor放到效果 NewEffect1里。
正常Build Sprite
Build好后把新效果里的NcBillboard去掉,或者NcBillboard里的Front Axis设置为 Axis_Back。不然方向会颠倒。
由于使用的是Particle下的Addictive Shader,所以是与背景混合的半透明效果。
所以只适合拿来做效果。
至于真实物体的3D转2D,有兴趣的朋友可以自己去研究。
帧数起码要在FPS20以上,否则卡顿感太明显。
帧动画虽然不消耗显卡,但是贴图占内存还是比较大的。所以用完一定要释放内存。
如何让 Unity 插件支持旧版本的 Unity?
【中文标题】如何让 Unity 插件支持旧版本的 Unity?【英文标题】:How to make a Unity plugin support old versions of Unity? 【发布时间】:2019-11-15 09:33:45 【问题描述】:我正在为 Unity 开发一个插件。比如说,在我的机器上我安装了最新版本的 Unity(现在是 2019.1.8)。但是,我也希望插件支持旧版本的 Unity,最好是非常旧的版本(如 4.x 或 5.x)。这应该如何实现?
我想我需要在我的机器上安装不同版本的 Unity。例如。使用 Unity Hub 或每次我想在安装新版本之前保留一个版本时手动重命名 Unity 的安装文件夹(就像这里描述的那样:https://support.unity3d.com/hc/en-us/articles/210001066-Can-I-activate-more-than-one-version-of-Unity-on-the-same-machine-)。
在 Unity Asset Store 上发布插件时,我还必须上传多个 *.unitypackage
文件,Unity Asset Store 将根据买家安装的 Unity 编辑器的版本将正确的文件交付给每个买家机器。
由于 Unity 版本可能存在显着差异,因此我基本上必须并行开发多个项目。而且(特别是在开发后期)代码中的单个更改必须手动复制到项目的所有其他版本中。这是有道理的,因为在某些情况下,它不会简单地复制和粘贴,而是调整代码以解决在旧版本中没有退出、被重命名、被弃用等的东西。
这对我来说似乎是难以置信的开销。 Unity 插件的开发者是否真的做到了这一切,还是有一些更简单的方法?如果我只是用最新版本的 Unity 构建并只上传一个 *.unitypackage
文件,那么只有一些最新版本的 Unity(通常最多 1 年左右)能够正确导入和使用它,对吧?
【问题讨论】:
【参考方案1】:在您的代码中,您可以使用c# pre-processors 来使代码编译或根据某些全局定义有条件地注释掉。
Unity 提供Version and Platform specific pre-processors
从
Unity 2.6.0
开始,您可以选择性地编译代码。可用选项取决于您正在使用的编辑器版本。给定版本号 X.Y.Z(例如 2.6.0),Unity 以下列格式公开三个全局 #define 指令:UNITY_X
、UNITY_X_Y
和UNITY_X_Y_Z
。
和
从
Unity 5.3.4
开始,您可以根据编译或执行给定代码部分所需的最早版本的 Unity 有选择地编译代码。给定与上述相同的版本格式 (X.Y.Z
),Unity 以UNITY_X_Y_OR_NEWER
的格式公开一个全局#define
,可用于此目的。
因此您可以准确控制哪个代码版本应用于哪个特定目标平台、Unity 版本、.Net 版本等
您可以包装您的代码,例如在
#if UNITY_2017_1_OR_NEWER
/* Code that only compiles under newer version */
#elif UNITY_5
/* Code that compiles for Unity 5.x.y */
#elif UNITY_4
/* Code that compiles for Unity 4.x.y */
#else
/* apparently some older stuff */
#endif
然后您可以将它们全部打包在一个 *.unitypackage
中,用户甚至不会注意到。由于注释掉的东西在构建的应用程序中被剥离,它不会增加构建大小。
然而,发展结构是另一个问题。我认为为了确保支持正常工作,您不会为每个 Unity 版本创建一个项目,并将旧版本的代码复制粘贴到最新版本的预处理器包装部分中。
为了让我尽可能简单,我可能会使用类似的文件夹结构
YourPlugIn
|-- General
|-- Unity4
|-- Unity5
|-- Unity2017
并使用 partial
关键字来实现完整的行为,而不是启用和禁用单个代码块,例如
General/MyBehaviour.cs
public partial class MyBehaviour : MonoBehaviour
// this is the script users should be dragging onto objects
Unity4/MyBehaviour_4.cs
#if UNITY_4
// Extends the general MyBehaviour for Unity 4.x.y
public partial class MyBehaviour
public string InitialValue;
private void Start()
Debug.Log(InitialValue);
#endif
Unity5/MyBehaviour_5.cs
#if UNITY_5
// Extends the general MyBehaviour for Unity 5.x.y
public partial class MyBehaviour
public int InitialValue;
private void Start()
Debug.Log(InitialValue.ToString());
#endif
Unity2017/MyBehaviour_2017.cs
#if UNITY_2017
// Extends the general MyBehaviour for Unity 2017.x.y
public partial class MyBehaviour
public Vector3 InitialValue;
private void Start()
Debug.Log(InitialValue.ToString());
#endif
但是那么你不能使用任何例如UNITY_X_Y_OR_NEWER
定义是因为你会得到重复;)
当然还有很多问题区域,例如之后重命名您的类或在更新版本中将它们包装在接口等中......但我希望我能清楚地表达我的想法。
我还冒着风险声称只支持“最新”版本的 Unity 就足够了,而不是使插件向后兼容到 Unity 2.6 ......无论如何,谁仍然会使用那些旧的东西?
目前在 HUB 中,提供安装的最新版本是 2017.1.5f1
,所以我认为在那个版本之前提供向后支持就足够了。
关于版本控制的问题:Github 提供了一个相当完整的.gitignore
for Unity。在那里你可以看到除了Temp
文件夹之外,你应该 忽略的文件夹还有很多......尤其是Library
。
在this post 中,我还描述了一种使用单个git
命令删除所有生成文件的快速且安全的方法。就我个人而言,我喜欢将所有Library/*.asset
文件从忽略中排除(因此它们是版本控制的),因为这里有一些东西,例如自定义布局,当前构建目标等被存储。
【讨论】:
为了测试插件在不同Unity版本中的实际运行情况,我需要安装多个编辑器版本,并依次打开这个包含多个版本的大项目。由于不同的版本可能会创建自己的(冲突的)临时文件,因此我不仅需要忽略版本控制中的临时文件,还需要在旧编辑器版本中打开项目之前手动删除临时文件。对吗? 查看添加的最后一节以上是关于[Unity插件] FX Maker的主要内容,如果未能解决你的问题,请参考以下文章