首先看效果吧
模型动画的前期制作步骤跟《Unity制作AR图片和视频展示》里面的做法一致,包括从vuforia官网得到license key和识别图的Unitypackage包,并且导入到Unity中,下面讲一些不一样的做法。
1:设置好ARCamera和ImageTarget后,将带有动画的马的模型导入到unity中,格式为fbx(也可以直接导入maya的ma和mb格式,Unity软件会自动打开一个maya的窗口,并且将文件自动转换成fbx的文件),导入正确是能够在unity的预览窗口中预览动画的
2:导入正确后,马只能走一个有限的时间,要让动画一致循环走下去,首先我在maya里面就把这个马的动画调成了一个可循环走动的,有了这个基础,在unity中,选择马的文件,进入到Animation选项下面,勾选上Loop Time 和Loop Pose,这样,马就循环“走”下去
3:设置好之后,运行,发现马根本就不动,没有动画,这是因为没有将马的这个走路的动画设置为它的默认状态,在Assets窗口中,右键,选择create-Animation Controller,为改物体创建一个动画控制器
4:选择创建的这个Animation Controller,双击就能打开Animator的窗口,将Assets中的马的文件拖入到这个Animator窗口中,并选择Entry浮窗,右键,选择Set StateMachineDefaultState,弹出的白色链接线,连接到马的文件上,点击运行,马就能无限“运动”了
5:做好了动画,接下来为这个场景添加阴影,首先新建一个Directional Light,开启它的阴影开光,然后新建一个plane(这都是基础的操作,百度有讲解),然后将这个plane也放到ImageTarget层级下,运行,这样就能看到马在这个Plane上面无限“行走”。
6:但是,参考视频中可以看到,我们只需要阴影,而要这个plane透明,看不到它,这里就需要给这个Plane新建一个shader,所以,在Assets窗口中,新建一个shader,再新建一个material材质球,将这个shader赋予这个material材质球,再将这个material材质球赋予Plane模型
7:双击刚才新建的shaer,在MonoDevelop编辑器或者vs中输入一下代码:
Shader "NewSurfaceShader(这里的名字要跟你在Assets窗口中,给这个shader命名一样)" {
Properties{
_Color("Main Color", Color) = (1,1,1,1)
_MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
_Cutoff("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader{
Tags{ "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" }
LOD 200
Blend Zero SrcColor
CGPROGRAM
#pragma surface surf ShadowOnly alphatest:_Cutoff
fixed4 _Color;
struct Input {
float2 uv_MainTex;
};
inline fixed4 LightingShadowOnly(SurfaceOutput s, fixed3 lightDir, fixed atten)
{
fixed4 c;
c.rgb = s.Albedo*atten;
c.a = s.Alpha;
return c;
}
void surf(Input IN, inout SurfaceOutput o)
{
fixed4 c = _Color;
o.Albedo = c.rgb;
o.Alpha = 1;
}
ENDCG
}
Fallback "Transparent/Cutout/VertexLit"
}
8:最后,运行,即可得到正确的透明的但是能接受阴影的Plane,就像参考视频中的那样。