失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Unity使用Cardboard MojingSDK等VR插件的3DUI(UGUI)凝视效果的实现

Unity使用Cardboard MojingSDK等VR插件的3DUI(UGUI)凝视效果的实现

时间:2022-04-17 10:02:23

相关推荐

Unity使用Cardboard MojingSDK等VR插件的3DUI(UGUI)凝视效果的实现

Cardboard是我接触VR开发最初接触到的SDK,因为对硬件和开发的要求比较低,所以很多的VR小游戏和应用(观影为主)都会基于Cardboard进行开发,但由于硬件设备的限制在用户交互上都会使用凝视的方式进行交互,SDK里自带的凝视方式使用不是很灵活,效果也比较单一,所以就自己从新按照需求实现了凝视的交互方式,用到的都是射线碰撞和UGUI的基础知识,实现的方法也比较简单。

首先我们要实现的效果是,当使用者在虚拟场景中看向某各3DUI时出现一个图标,并出现加载的效果,在加载完成后执行相应的操作,这里我用UGUI来实现。

第一步,在场景中创建一个Canvas并且把渲染模式设置为WorldSpace,这样你的UI对象将在场景中进行渲染,你可以把它拖动到你需要的位置

创建一个image,添加按钮相应的贴图,这里我要实现的是一个圆形的贴图,凝视后开始加载,并且在凝视的部位出现一个光标

接下来再添加一个image作为这个按钮的遮罩,将遮罩image的类型设置为filed,fill method方式设置为360度旋转填充

然后在当前按钮image上添加一个2D的碰撞器(其实3D的压扁也可以),用来执行后面的碰撞检测

最后在场景中创建一个红色的小球作为凝视的光标,位置啥的不重要,只要大小合适够醒目就行,反正一开始就要被隐藏掉

接下来就是代码部分了

public GamObject headCamera;

public GameObject cursor ;

publicImage button_ui_bg;

private int targetMask;

void Start()

{

cuisor.SetActive(false);

targetMask = LayerMask.GetMask("Ray");

print(targetMask);

}

从外部获取从SDK中添加的头部摄像机,按钮以及小球,设置一个层蒙版用作射线检测,只有碰撞到UI物体的时候才出现光标

接下来在update函数中实现碰撞检测,当射线碰撞到UI物体上的·碰撞器时遮罩image开始加载,加载完成后执行相应操作

void Update()

{

Ray ray = new Ray(camera_1.transform.position, headCamera.transform.forward);

if (Physics.Raycast(ray, out hit, 1000f, targetMask))

{

qui.SetActive(true);

qui.transform.position = hit.point;

GazeUI(hit.collider.gameObject.name);

}

else

{

qui.SetActive(false);

button_ui_bg.fillAmount = 0;

}

}

public void GazeUI(string name)

{

if (name == "button_01")

{

button_ui_bg.fillAmount += Time.deltaTime;

if (button_ui_bg.fillAmount >= 1f)

{

SceneManager.LoadScene("Loading");

}

}

else

{

button_ui_bg].fillAmount = 0;

}

}

这样就基本完成了,如果你需要不同的效果,也可以选择不同的UI物体

如果觉得《Unity使用Cardboard MojingSDK等VR插件的3DUI(UGUI)凝视效果的实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。