Unity使用ShareSDK 的微信分享安卓回调问题

1

这几天接ShareSDK,目前主要用下微信分享,IOS接上也都没问题,但安卓的回调却是有问题,没有收到回调,官方的一个帖子上说的模模糊糊,反正我是看不懂,今天问了下他们的技术,让他一步一步教我,总算是搞定了。

首先是下载Unity版本的ShareSDK后,将Plugins放到Unity中。
然后,用exlipse打开Android_Java_Demo工程,将src中的cn.sharesdk.onekeyshare.wxapi修改名称为 自己的包名.wxapi
image
比如我的游戏的包名是com.mygame.myapp,所以这里改为 com.mygame.myapp.wxapi。

之后src上右键export,导出jar包
imageimage

在之后到Unity中找到刚才导入的plugins->Android->ShareSDK->libs中删掉OneKeyShare这个jar包,把刚才我们自己导出的放到这里来。

最后打开plugins->Android->ShareSDK下的AndroidManifest,修改微信回调的配置

   1: <;!-- 微信分享回调 -->

   2:         <;activity

   3:             android:name="com.mygame.myapp.wxapi.WXEntryActivity"

   4:             android:theme="@android:style/Theme.Translucent.NoTitleBar"

   5:             android:configChanges="keyboardHidden|orientation|screenSize"

   6:             android:exported="true" />

这样就可以收到回调了。

 

后续:

shareSDK安卓微信分享的问题
接了UC的渠道,他们会再自己对apk包进行处理改变签名,导致与在微信开放平台参与审核的APP的签名不一致导致出现分享不了(点击分享后,只会提示“后台处理”字样,然后就没有然后了)。
另外,UC的包需要在自己的包名后面添加.uc,所以在改变包名之后很多ShareSDK的配置相关东西也都要做出相应修改

 

17.02.14后续:

现在不需要整个Src导出jar包,如果只是微信分享的话,可以只将那一个包(com.mygame.myapp.wxapi)导出jar包即可,否则可能会出现因为与其他jar包有重复的内容导致出版本的时候出现“unable to convert classes into dex format.”的错误。
另外,如果AndroidManifest文件,以及代码中的配置都正确了,但还是出现没有回调,尤其是如果出现闪了一下,那可能是签名不同导致的,使用签名查看工具查看一下刚编译的包的签名与微信平台中填的签名是否一致。签名查看器可以使用新浪签名工具

223574582108961459QQ图片20170214155631

如果不一致,那可能就要考虑keystore之类的问题。

 

Unity3D 自定义封装Debug.Log

5

Unity原生的Debug.Log即使在发布版也是会输出Log的,而且知道了在编辑器中输出Log还可以设置文字颜色与大小之后,就想着封装一下来使用。

   1: public class DebugLog

   2:    {

   3:        /// <summary>

   4:        /// 是否打开Log输出,如果为false,则所有的log将不会显示

   5:        /// </summary>

   6:        public static bool bEnableLog = true;

   7:        /// <summary>

   8:        /// 显示当前使用该属性的类的名称

   9:        /// </summary>

  10:        public static string CurrentClass

  11:        {

  12:            get 

  13:            {

  14:                var st = new System.Diagnostics.StackTrace();

  15:                var index = Mathf.Min(st.FrameCount - 1, 2);

  16:                if (index < 0)

  17:                    return "{NoClass}";

  18:                return "{" + st.GetFrame(index).GetMethod().DeclaringType.Name + "}";

  19:            }

  20:        }

  21:  

  22: region Tag,可以用于忽略某特定的log        

  23:        private static HashSet<string> _setIgnoreTag = new HashSet<string>();

  24:        /// <summary>

  25:        /// 添加要忽略的tag名称

  26:        /// </summary>

  27:        /// <param name="strTag">要忽略的tag</param>

  28:        public static void AddIgnoreTag(string strTag)

  29:        {

  30:            _setIgnoreTag.Add(strTag);

  31:        }

  32:        /// <summary>

  33:        /// 取消对某tag的忽略

  34:        /// </summary>

  35:        /// <param name="strTag">要取消忽略的tag</param>

  36:        public static void RemoveIgnoreTag(string strTag)

  37:        {

  38:            _setIgnoreTag.Remove(strTag);

  39:        }

  40:        /// <summary>

  41:        /// 清空要忽略的tag,即所有tag都不会忽略

  42:        /// </summary>

  43:        public static void ClearIgnoreTag()

  44:        {

  45:            _setIgnoreTag.Clear();

  46:        }

  47:        /// <summary>

  48:        /// 是否要忽略某tag的log输出

  49:        /// </summary>

  50:        /// <param name="strTag">要检测的tag</param>

  51:        /// <returns></returns>

  52:        private static bool IsIgnoreTag(string strTag)

  53:        {

  54:            return _setIgnoreTag.Contains(strTag);

  55:        }

  56: endregion

  57:  

  58:  

  59: region _log_

  60:        /// <summary>

  61:        /// Log输出,类似Debug.Log

  62:        /// </summary>

  63:        /// <param name="strLog">log内容</param>

  64:        /// <param name="context"></param>

  65:        public static void Log(string strLog, UnityEngine.Object context = null)

  66:        {

  67:            if (!bEnableLog)

  68:            {

  69:                return;

  70:            }

  71:            UnityEngine.Debug.Log(strLog, context);

  72:        }

  73:        /// <summary>

  74:        /// Log输出加强版, 可以设置tag, 如果该tag在忽略列表里面则该log不会输出

  75:        /// </summary>

  76:        /// <param name="strLog">log内容</param>

  77:        /// <param name="strTag">tag</param>

  78:        /// <param name="strColor">内容显示的颜色,格式为 RRGGBB</param>

  79:        /// <param name="context"></param>

  80:        public static void Log(string strLog, string strTag, string strColor = "ffffff", UnityEngine.Object context = null)

  81:        {

  82:            if (!bEnableLog

  83:                || IsIgnoreTag(strTag))

  84:            {

  85:                return;

  86:            }

  87:  

  88:            UnityEngine.Debug.Log(string.Format("[{0}]:<color=#{1}>{2}</color>", strTag, strColor, strLog), context);

  89:        }

  90:        /// <summary>

  91:        /// Debug.LogWarning

  92:        /// </summary>

  93:        /// <param name="strLog"></param>

  94:        /// <param name="context"></param>

  95:        public static void LogWarning(string strLog, UnityEngine.Object context = null)

  96:        {

  97:            if (!bEnableLog)

  98:            {

  99:                return;

 100:            }

 101:            UnityEngine.Debug.LogWarning(strLog, context);

 102:        }

 103:        /// <summary>

 104:        /// LogWarning加强版

 105:        /// </summary>

 106:        /// <param name="strLog">log内容</param>

 107:        /// <param name="strTag">tag</param>

 108:        /// <param name="strColor">内容显示的颜色,格式为 RRGGBB</param>

 109:        /// <param name="context"></param>

 110:        public static void LogWarning(string strLog, string strTag, string strColor = "ffff00", UnityEngine.Object context = null)

 111:        {

 112:            if (!bEnableLog

 113:                || IsIgnoreTag(strTag))

 114:            {

 115:                return;

 116:            }

 117:  

 118:            UnityEngine.Debug.LogWarning(string.Format("[{0}]:<color=#{1}>{2}</color>", strTag, strColor, strLog), context);

 119:        }

 120:        /// <summary>

 121:        /// Debug.LogError

 122:        /// </summary>

 123:        /// <param name="strLog"></param>

 124:        /// <param name="context"></param>

 125:        public static void LogError(string strLog, UnityEngine.Object context = null)

 126:        {

 127:            if (!bEnableLog)

 128:            {

 129:                return;

 130:            }

 131:            UnityEngine.Debug.LogError(strLog, context);

 132:        }

 133:        /// <summary>

 134:        /// LogError加强版

 135:        /// </summary>

 136:        /// <param name="strLog">log内容</param>

 137:        /// <param name="strTag">tag</param>

 138:        /// <param name="strColor">内容显示的颜色,格式为 RRGGBB</param>

 139:        /// <param name="context"></param>

 140:        public static void LogError(string strLog, string strTag, string strColor = "ff0000", UnityEngine.Object context = null)

 141:        {

 142:            if (!bEnableLog

 143:                || IsIgnoreTag(strTag))

 144:            {

 145:                return;

 146:            }

 147:  

 148:            UnityEngine.Debug.LogError(string.Format("[{0}]:<color=#{1}>{2}</color>", strTag, strColor, strLog), context);

 149:        }

 150: endregion

 151:  

 152: region _Tools_

 153:        /// <summary>

 154:        /// 可以为指定的字符串转为带颜色的RichText

 155:        /// 比如 strLog = “哈哈哈”,color = red

 156:        /// 则返回的字符串为 "<color=#ff0000>哈哈哈</color>"

 157:        /// </summary>

 158:        /// <param name="strLog">内容</param>

 159:        /// <param name="color">颜色</param>

 160:        /// <returns>转换后的携带color的字符串</returns>

 161:        public static string ColorSurround(string strLog, Color color)

 162:        {

 163: if UNITY_EDITOR

 164:            return "<color=" + GetColorName(color) + ">" + strLog + "</color>";

 165: else

 166:            return strLog;

 167: endif

 168:        }

 169:        /// <summary>

 170:        /// 可以为指定的字符串转为带大小的RichText

 171:        /// 比如 strLog = "哈哈哈", size = 25

 172:        /// 则返回的字符串为 "<size=25>哈哈哈</size>"

 173:        /// </summary>

 174:        /// <param name="strLog">内容</param>

 175:        /// <param name="nSize">文字大小</param>

 176:        /// <returns>转换后的携带size的字符串</returns>

 177:        public static string SizeSurround(string strLog, int nSize = 25)

 178:        {

 179: if UNITY_EDITOR

 180:            return "<size=" + nSize + ">" + strLog + "</size>";

 181: else

 182:            return strLog;

 183: endif

 184:        }

 185: endregion

 186:    }    

简单封装之后测试可以,但双击Console中的输出的时候会打开这个DebugLog文件,而不是我们调用这个DebugLog的地方,一个方法就是将这个类导出为DLL,然后将dll放到项目的Plugins中即可。当然最好将这个类放到自己的命名空间中去。

怎么导出DLL呢,首先我是使用VS编辑代码的,所以可以直接在VS中新建类库项目,我是直接在这个游戏的解决方案中新建项目的:
image
然后选择类库,输入库名称,选择项目保存位置,点击确定:
image
它会自动给你新建一个类文件,你可以删掉或修改一下。
可以将DebugLog类放到这里,然后因为里面会用到Unity的东西,所以要添加引用的依赖库:
image
右键—>添加–》引用…
在界面中选中UnityEngine.dll
image
如果没有的话点击下面的浏览,到你的Unity路径下面找到这个文件就可以。
 
还有一步是修改目标框架:
在项目上右键–》属性–》应用程序的目标框架选择 Unity3.5 net subset base class libraries,这个知道原因的可以自己选择,不知道原因的就选这个就可以:
image
然后编译生成,可以Debug或Release生成,通过选择:
image
生成成功就可以在项目路径的Debug或Release文件夹中找到你的.dll了,复制你的dll到Unity的Plugins目录下即可使用。
 
如果你会频繁修改这个文件,而每次都要复制dll到Plugins下面很麻烦的话,VS还提供生成后事件,我们可以编辑一个当生成成功之后就复制这个dll到Plugins的事件,这样在每次编译成功之后都会自动复制到Plugins下面:
项目右键—>属性—>生成事件:
image
 

Unity3D 插件方式接渠道IOS SDK

0

一般渠道都会提供Unity3D版本的接口插件脚本的,但林子太大嘛,总有那么几个不考虑我们的感受,所以偏偏没有,只能自己去动手写。

其实也不是很难,主要难点就是你到底会多少Objective C的内容。。反正我是几乎不会,所以在实际开始之前就看了两天的OC的语法相关的东西,本来还想在Windows下装什么IDE来着可以写OC代码,但这样太浪费时间了,而且也没什么必要要将OC学得多深,其实现在看来就两个文件,一个.h,一个.mm。

可能不同的SDK它提供的东西不一样吧,我这个SDK在OC中提供了一个单例,所以我只需要在我的代码中直接使用这个单例就好。而且该SDK还提供了委托,所以我要实现这个委托中的方法来 被回调。
委托,在C# 中我当然是好理解的,而且用的出神入化~~,但一到了OC中我彻底就蒙了,学了两天OC其中一天半是在搞明白这TM怎么用。我根本不想知道它的原理是个毛,我只想知道SDK提供了这个我TM怎么用。
我纠结牢骚的过程就不说了,总之最后还是老老实实的看些例子,用我的聪明才智理解一下文档中的部分关键词,总算明白是怎么回事了~~

写完了两个文件,可以在XCode工程中放到里面,也可以放到Unity工程的Plugins/IOS 目录下面,这样到处XCode工程的时候这两个文件会自动被加入到Libraries中。

然后其他内容可以看下Unity的提供的例子:http://docs.unity3d.com/Manual/PluginsForIOS.html

另外我将那两个例子贴一下吧,反正这也没什么,我就贴一下,说不定就帮助了哪个跟我一样纠结我就想知道TM怎么用的人:

SDK_7659.h

   1: #import <Foundation/Foundation.h>

   2: #import <xsdkFramework/XSDK.h>

   3: @interface SDK_7659:NSObject<XSDKDelegate>

   4:  

   5: @end

SDK_7659.mm

   1: #import "SDK_7659.h"

   2: #define SDKEvent "RecieveEventObjName"

   3: @implementation SDK_7659

   4:  

   5: -(void)XSDKCheckUpdateCallBack

   6: {

   7:     NSLog(@"XSDKCheckUpdateCallBack!!!!!!");

   8:     UnitySendMessage(SDKEvent, "eventXSDKCheckUpdateCallBack", "");

   9: }

  10: -(void)XSDKLoginCallBack:(NSString *)tokenKey

  11: {    

  12:     NSLog(@"XSDKLoginCallBack___tokenKey : %@", tokenKey);    

  13:     UnitySendMessage(SDKEvent, "eventXSDKLoginCallBack", [tokenKey UTF8String]);

  14: }

  15:  

  16: -(void)XSDKLogOutCallBack:(NSString *)guid

  17: {

  18:     NSLog(@"XSDKLogOutCallBack___guid:%@", guid);

  19:     UnitySendMessage(SDKEvent, "eventXSDKLogOutCallBack", [guid UTF8String]);

  20: }

  21:  

  22: -(void)XSDKGameLoginCallback:(NSString *)username password:(NSString *)password resultBlock:(void (^)(NSString * typeMessage))resultBlock

  23: {

  24:     NSLog(@"XSDKGameLoginCallback__usernam:%@, passward:%@", username, password);    

  25: }

  26:  

  27: -(void)XSDKGameLoginSuc

  28: {

  29:     NSLog(@"XSDKGameLoginSuc");

  30: }

  31:  

  32: -(void)XSDKPayCallback:(BOOL)isClientSuccess

  33: {

  34:     NSLog(@"XSDKPayCallback ___ %d", isClientSuccess ? 1 : 0);

  35: }

  36: @end

  37:  

  38: static SDK_7659* g_SDK7659 = nil;

  39: extern "C"

  40: {

  41:     void Init_7659(char* appKey)

  42:     {

  43:         NSLog(@"进入Init_7659~~~~~~~");

  44:         [[XSDK instanceXSDK] setAppKey:[NSString stringWithUTF8String:appKey]];    

  45:         if (g_SDK7659 == nil)

  46:         {

  47:              g_SDK7659 = [[SDK_7659 alloc] init];

  48:              [[XSDK instanceXSDK] setXsdkDelegate:g_SDK7659];

  49:         }

  50:         [[XSDK instanceXSDK] setISSupportGameNo:NO];

  51:         [[XSDK instanceXSDK] setOnlySupportIPhone:NO];

  52:         [[XSDK instanceXSDK] checkUpdate];

  53:         //[[XSDK instanceXSDK] login];    

  54:         //[[XSDK instanceXSDK] setGameContact:@"找回密码吗?"];

  55:     }    

  56:  

  57:     void ShowLogin_7659()

  58:     {

  59:         [[XSDK instanceXSDK] login];

  60:     }

  61:  

  62:     void Logout_7659()

  63:     {

  64:         [[XSDK instanceXSDK] logout];

  65:     }

  66: }

为Unity3D增加广告

0

目前算是上线的只有一款《蛋碎了》的游戏,这款游戏核心开发只有2天时间,但给它加上广告搞上线,却搞了一个多月,主要就花在增加广告上面了。
(百度应用:http://as.baidu.com/a/item?docid=6319904
(安智市场:http://www.anzhi.com/soft_1530639.html
所以这里总结一下,万一某天谁遇到了这样的问题,尤其是和我一样对Eclipse不是很熟悉的,可以给点参照。多说一句,我是为安卓平台开发的,IOS估计也差不多的。

首先,无论是什么广告SDK,为U3D增加广告的流程基本都是一样的,所以这里我就不举具体的例子了。
其次,为U3D增加广告有两种方法,一种是将U3D工程输出为安卓工程,在安卓工程里添加相关广告代码,再输出APK;另一种是先建空的安卓工程,在工程里添加广告代码后再导入到U3D中。

一、从U3D到Eclipse

先说第一种方法。将你要增加广告的工程输出为安卓工程。
但是首先,你要在PlayerSetting中设置你的工程名字、包名、图标等内容:
image
然后开始导出:File->BuildSetting…打开下图界面,首先你的工程是安卓平台的,然后右侧选择“Google Android Project”,就看到下面原来的“build”变为“Export”了,点击后导出为安卓工程。
image

导出后使用ADT Eclipse打开这个工程
image
File->New->Other 选择Android Project From Exitsting Code, 在界面中选择导出的根文件夹,也就是你在PlayerSetting的ProductName的名称的文件夹,我这里是“蛋碎了”:
image
点Finish完成。

这个时候只要按照你所使用的广告的网站的使用教程就可以了,一般步骤如下:
1. 把SDK放到libs文件夹中,然后刷新工程目录(工程右键->Refresh)以加载进来。
2. src文件夹里面只有一个文件,UnityPlayerNativeActivity,可以把广告的初始化放到它的OnCreate中。
3. 修改AndroidManifest.xml。要修改根目录下的这个xml,bin目录下面也有一个,但这个是前者的复制品,编译时会被替换。
4. OK,可以生成APK了。工程右键->Run As->Android Application
生成过程中可能会需要你签名什么的,你只要根据提示生成属于你自己的ID与密码,最好记住,保存这个秘钥文件。
完成后在bin文件夹下就会生成APK,就可以测试使用了。

需要注意的是,我曾经成功显示了广告条,但点击却没有反应,搞了两天,换了最新的U3D版本(4.3.4f1), 发现生成的AndroidManifest.xml中会有两行:

<meta-data android:name=”unityplayer.UnityActivity” android:value=”true” />
<meta-data android:name=”unityplayer.ForwardNativeEventsToDalvik” android:value=”false” />

把第二行中的false改为true,OK , 可以点击了。

另外,这样的方法的弊端就是你不能控制广告什么时候显示什么时候隐藏,在游戏进入的时候它就开始显示了。如果你想要对广告进行控制,则下一种方法比较好。

二、从Eclipse到U3D

这种方法网上例子有很多了,比如大名鼎鼎的雨松MOMO就可以参考:
http://www.xuanyusong.com/archives/667
如果你想要看针对性比较强的,我上传一份有米广告的U3D设置教程,这是我从有米的客服那里拿到的,如果你在使用其他的广告,可以问下他们的客服有没有相关教程,但我估计都差不多的,流程都一样,这是下载地址:
http://pan.baidu.com/s/1sjDCWot

在doc中有详细说明。
另外如果广告条点击不了的话,别忘了使用最新的u3d版本,在xml中增加我上面提到的两个meta。

NGUI显示常用汉字

4

NGUI怎么显示汉字可以搜到很多教程,一般都是使用bmfont工具生成字体png与txt然后,在NGUI中CreateFont。
如果要将bmfont中所有字符导出是不实际的,而且会导致文件很大,所以在使用字符集时是将要显示的字符先事先用utf8格式保存到txt中,然后使用bmfont的“select chars from file”,但要知道自己用哪些字符又是不好统计的一件事,所以我就从网上找了份常用汉字表,将表中的文字导入到bmfont中,还好,不是很大。我下面会将这份字符表贴出来,谁想用可以直接复制下去,其中我也加了几个汉字的符号,有其他需要大家可以再加,但要注意保存时要用utf8格式。
制作这份常用汉字的字体和一般步骤是相同的,但导出参数要改一下:
image_thumb.png

主要是尺寸那里改为2048X2048的,小的话会生成多个png文件,nGUI好像是不支持的。

为了让字体好看些,可以找些好看的字体,个人非商业应用一般是可以的,我找了个萝莉体。。
下载下字体后将字体文件保存到 系统盘:\Windows\Font中,Windows会自动安装字体,然后在bmfont的FontSetting中就会出现这个字体了:

image_thumb.png

 

其中的 size(字号) 可能要多调试几次才能得到好的效果。OK,看下我的效果图,哈哈:

image.png

 

下面是常用汉字表,其中一些符号是我自己打上的,在实际使用中可能还会用到其他的字,那就只能一边调试一边使用了..

■啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱碱拣捡简俭剪减荐槛鉴践贱见键箭件健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利僳例俐痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座幔侃?。!,《》“”:;、【】——¥

转载:【风宇冲】Unity3D教程宝典之 FX Maker

0
FX Maker
FX Maker是Unity3d一款非常流行的效果制作插件。不但有超过300种效果预制体, 还可以自己制作效果。包含Mesh Effect 和Particle Effect。
优点:资源库大,可以将消耗资源非常多的粒子效果 转换为帧动画效果。当然也可以直接用不转帧动画的效果,这种效果是画面最好的,但是对显卡开销大。帧动画显卡开销小,占内存大,适合移动平台。Fx Maker还能自动保存。
使用步骤:
一:导入包
二:打开主场景sceneFXMaker
1
三:运行
运行界面如下,注意不要选全屏运行,要在运行时至少同时有Game界面和Inspector界面。
2
当前运行的效果对应 _CurrentObject下面的物体。既可以对下图左侧的UI界面操作,亦可以对Hierarchy下面的物体进行直接操作。
3
EffectMesh
网格动画,主要是平面的网格动画,Mesh_Ring和Mesh_Virtical有特殊形状的形状片的动画。
4
EffectParticle
粒子效果,其中最后的Shuriken里包含的是新的Shuriken粒子系统,其他全是旧的粒子系统。
5
EffectSample
效果样例展示
6
Resources
包含一些资源,其中最重要的是Animation的曲线效果 和 Mesh下的网格
7
四:做简单的帧动画效果
1.选第一个Project文件夹,新建一个空效果
8
2.从已有的效果拷贝物体过来
选一个已有效果,对着FX Maker UI里的物体点击右键,Copy
9
3.运行看看效果
4.做成帧动画(精灵动画)
先点击Sprite
10
在出现下图左侧的Build Sprite界面时,用鼠标滚轮调整视口,如右侧红框,使之刚好涵盖效果区域。
接着可以直接点“Build Sprite”按钮
11
5.导出
之后就生成了新的效果,名字是 原名+_1 之类的,就在原效果旁边。
对着新效果点右键,Export。 之后就生成了一般的Unity Package。
包括了所有这个效果需要用到的资源。
12          13
五:使用导出的效果
直接导入使用即可。效果路径和原工程下的路径完全一样。
14
六 加入其他东西Build Sprite
并不一定要FxMaker的效果才可以拿来Build Sprite。任何东西,只要相机看得见就可以放进去Build Sprite。并且可以和FxMaker的混合Build。
1.
将东西加到效果下,这里是将Unity包里的Constructor放到效果 NewEffect1里。
15
2.
正常Build Sprite
3.
Build好后把新效果里的NcBillboard去掉,或者NcBillboard里的Front Axis设置为 Axis_Back。不然方向会颠倒。
由于使用的是Particle下的Addictive Shader,所以是与背景混合的半透明效果。
所以只适合拿来做效果。
至于真实物体的3D转2D,有兴趣的朋友可以自己去研究。
16
注意:
帧数起码要在FPS20以上,否则卡顿感太明显。
帧动画虽然不消耗显卡,但是贴图占内存还是比较大的。所以用完一定要释放内存。