[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_XUNITY_X_YUNITY_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的主要内容,如果未能解决你的问题,请参考以下文章

maya模型导入unity3d后只显示一面材质

unity插件怎么安装

unity 插件菜单栏不见

unity插件怎么安装

怎么给Unity写一个原生的插件

unity 5.6.3插件 TerrainComposer2 (导入高度图部分)