RAVVAR XUNAPI案例详解

附上RAVVAR Uinty风车案例包,请下载解压

RAVVAR XUNAPI案例详解.zip

1.使用过程

1.1 分解合体

点击风扇引擎位置,如图1-1。再次点击风扇引擎位置,风扇可以进行合体,效果如图1-2

image.png 

image.png 

1.2 风扇旋转

点击风扇扇翼位置,风扇可以进行旋转,如图2-1,再次点击风扇扇翼位置风扇停止旋转

image.png 

1.3 手势移动缩放旋转

在App中用手指对如图3-1位置进行操作,可以使物体移动缩放旋转,一根手指长按拖动,可以让物体跟随手指移动,两根手指拉近离远可以对物体进行缩放,两根手指同时进行平移可以对物体进行旋转

image.png 

1.4 代码

首先要给物体赋予两个代码,如图2-1,其中Lua Runner中添加一个控制器,用来管理Assets Ref中的Lua脚本,使得我们可以在Assets Ref中添加多个脚本来对同一个物体进行操作,多个脚本放在Assets Ref中的List列表里

image.png 

控制器代码

local function Control(gameObject)

     local assets = gameObject:GetComponent('AssetsRef')

     local data_WeilyControl = assets:At(0)

     local script_WeilyControl = DarAR.CreateLuaClass(gameObject, data_WeilyControl.text)

end

return Control

由于我的当前物体只有一个Lua脚本,所以只需要在Assets Ref的List列表里面添加一个Lua脚本即可。

要使物体可以同时进行移动缩放旋转,就要给物体本身添加三个组件,分别控制移动,缩放,旋转

_c.transform.gameObject:AddComponent("MoveControl");

_c.transform.gameObject:AddComponent("RotateControl");

_c.transform.gameObject:AddComponent("ZoomControl");

要使物体可以进行动画播放,首先要得到物体身上的Animator,一共有两个Animator,分别为分解合体和旋转,并且把旋转的动画的播放速度设置为0

body=_c.transform:FindChild("GameObject").gameObject

BodyAnim=body:GetComponent(UnityEngine.Animator);

yezi=_c.transform:FindChild("GameObject/blades").gameObject

YeziAnim=yezi:GetComponent(UnityEngine.Animator);

YeziAnim.speed=0;

利用射线检测检测鼠标点击位置

if UnityEngine.Input.GetMouseButtonDown(0) then

local ray = UnityEngine.Camera.main:ScreenPointToRay(UnityEngine.Input.mousePosition)

local ok, hit = UnityEngine.Physics.Raycast(ray, Slua.out)

因为物体上的BoxCollider只有3个,一个用来触发分解合体动画,一个用来触发风扇旋转,一个用来触发移动缩放旋转事件,所以只需要点击这三个BoxCollider,如果点击到其他地方就不进行任何操作

if  hit.collider.gameObject ~=nil then

if hit.transform.name=="blades" then

要事先声明一个布尔变量,用来判断风扇是否旋转或者风扇本身分解还是合体,在if......else......里对布尔变量进行判断(如果变量为true的话,就让风扇进行旋转,并且把变量设置为false,如果变量为false的话,就让风扇停止旋转,并且把变量设置为true)

 if(isZhuan) then

 YeziAnim.speed=1;

 isZhuan=false;

 --print(YeziAnim.speed);

 else

 YeziAnim.speed=0;

 isZhuan=true;

 --print(YeziAnim.speed);

 end

  end

  if hit.transform.name=="GameObject" then

(如果变量为true的话,就让风扇进行分解动画,并且把动画变量设置为false,如果变量为false的话,就让风扇进行合体动画,并且把变量设置为true)

  if(isFenjie) then

  BodyAnim:Play("fenjie",0,0);

  isFenjie=false;

  else

  BodyAnim:Play("heti",0,0)

  isFenjie=true;

  end

  End

完整代码如下

if not GameObject then

import 'UnityEngine'

end

fengshan = { }

setmetatable(fengshan, ARBase)

local _c = nil;

function fengshan:new(c)

_c = c;

local o = ARBase.new(self, c)

return o

end

local body;

local yezi;

local isFenjie=true;

local isZhuan=true;

function fengshan:Start()

  --GameObjectEX.SetLayer((gameObject,20));

_c.transform.gameObject:AddComponent("MoveControl");

_c.transform.gameObject:AddComponent("RotateControl");

_c.transform.gameObject:AddComponent("ZoomControl");

body=_c.transform:FindChild("GameObject").gameObject

BodyAnim=body:GetComponent(UnityEngine.Animator);

--BodyAnim.speed=0;

yezi=_c.transform:FindChild("GameObject/blades").gameObject

YeziAnim=yezi:GetComponent(UnityEngine.Animator);

YeziAnim.speed=0;

end

function fengshan:Update()

if UnityEngine.Input.GetMouseButtonDown(0) then

local ray = UnityEngine.Camera.main:ScreenPointToRay(UnityEngine.Input.mousePosition)

local ok, hit = UnityEngine.Physics.Raycast(ray, Slua.out)

if ok then

 if  hit.collider.gameObject ~=nil then

 if hit.transform.name=="blades" then

 if(isZhuan) then

 YeziAnim.speed=1;

 isZhuan=false;

 --print(YeziAnim.speed);

 else

 YeziAnim.speed=0;

 isZhuan=true;

 --print(YeziAnim.speed);

 end

  end

  if hit.transform.name=="GameObject" then

  if(isFenjie) then

  BodyAnim:Play("fenjie",0,0);

  isFenjie=false;

  else

  BodyAnim:Play("heti",0,0)

  isFenjie=true;

  end

  end

  end

end

end

end

return "fengshan"

2 如何导出Assetbundle包

首先要保证你的工程项目文件下有一个Assetbundle文件夹,如果没有的话可以新建一个Assetbundle文件夹。如图3-1

image.png

保证Assetbundle文件夹里没有任何文件,如果有的话使用Unity工具栏下WSTool里的清空Assetbundle,清空工程文件夹下Assetbundle里的已有Assetbundle包,也可以自己进入工程项目文件下手动删除,如图3-2

image.png

清空Assetbundle文件夹下的文件后,在Unity里的Project面板中选中你要导出Assetbundle包的Prefab文件,如图3-3,选中后在Unity工具栏下的RAVVAR中的SelectPrefab,点击Build就可以对当前选中Prefab进行导出Assetbundle包,默认路径为工程文件夹下的Assetbundle文件夹,如图3-4

image.png

image.png