前面介绍了EasyAR的单图识别,它是提前在Unity设置好图片路径的,那么如果我们的图片是存储在服务器上的,那么我们肯定不能直接把服务的图片地址填上去了。这个时候我们可以动态地创建识别图。步骤如下:
1.下载服务器上的识别图;为了避免每次都下载,我们可以根据图片名字来判断本地是否已经存在该图片了,如果不存在我们才加载;
2.复制到persistentDataPath(如果本地已经有该图片了则不需要复制)
3.创建识别图(我这里jc是一个json对象,里面主要是图片的名字,网络路径,模型名字,模型路径,视频名字,视频路径):
behaviour.Name = jc.ImageName;
behaviour.Path = Application.persistentDataPath + “/” + jc.ImageName + “.jpg”;
behaviour.Storage = StorageType.Absolute;//这个是我们识别图路径的格式,这里是绝对路径,Assest的话是代表streamingAssets路径下的相对路径
behaviour.Bind(ARBuilder.Instance.TrackerBehaviours[0]); //如果没有绑定tracker,识别图将不起作用
behaviour.Size = new Vector2(4,4);//这个尺寸我的理解是它会把它底下的模型等物体进行缩放,如果原本一个正方体大小跟识别图大小一样,设置为4,4以后,正方体移到识别图底下以后,正方体就会占识别图的1/4大小(只是指长或宽)。
4.动态创建模型 ,我这里是通过打包assestbundle来实现动态加载模型
void CreateModel(GameObject imageTarget, ImageTargetBehaviour behaviour, WWW w2)
{
GameObject go = Instantiate(w2.assetBundle.mainAsset) as GameObject;
go.transform.localScale = Vector3.one;
go.transform.localPosition = Vector3.zero;
go.transform.parent = imageTarget.transform;
behaviour.OnTargetLost(behaviour); //我们会在targetLost函数里面把识别图下面的物体给隐藏掉,所以我们创建模型以后,需要把它隐藏
}