VR/AR场景 中给人物添加血条 双面显示/ UI显示两个的处理


今天在开发中需要给人物添加姓名和血条,让我们UI哥哥给了适合项目的字体,交代字体大小之后。便开始一顿乱敲键盘。用户名称+头顶小云彩一气呵成,没问题。测试小哥闲的无聊,刚上手就指出了一个BUG~~~

如图所示,这是BUG出现的情况,VR/AR相机面向 人物角色时候,UI出现,没毛病。然而,当相机转到玩家背面时候,又出现了人物的姓名和头顶的气泡!!!

角色明明没有在相机视野,怎么可能会这样呢?经过猜测可能是相机的叠加。也就是说相机可能是双面的,正面能照射到,反面也照射到。这样的BUG当然不能忍,在Scene视图下考虑了很久,决定判断相机和主角是不是在同一象限,(备注 :我这里相机是000点),如果相机和主角在同一个象限,他们的X或者Z轴都是同大于0或者同小于0,这样的判断就没问题了。于是在Update里面进行检测~~当摄像机拍摄范围和主角不在一个象限,关闭掉UI中的血条和头顶气泡显示,测试没问题。

当然,这还不算完成。在update里面的检测非常消耗资源,同屏角色达到30+个时,帧率急速下降。我这里加载了携程,携程死循环来做循环,这样做性能基本没什么损耗。部分代码如下:


	IEnumerator  CheckPos()
	{
		while (true) {
			yield return new WaitForSeconds (2f);

			Vector3 pt = Camera.main .WorldToScreenPoint (userNamePos.transform.position );
			userNameUI.transform .position = pt;
			//血条超出屏幕就不显示  
			if (pt.x > Screen.width || pt.x < 0 || pt.y > Screen.height || pt.y < 0)  
			{  
				userNameUI.gameObject.SetActive(false);  
			}  
			else  
			{  
				userNameUI.gameObject.SetActive(true);  
			} 
			//如果和摄像机观察的位置不一样 也关闭




			Vector3 pt2 = Camera.main.WorldToScreenPoint (userChatPos.transform.position );
			userChatUI.transform.position = pt2;

			if (pt2.x > Screen.width || pt2.x < 0 || pt2.y > Screen.height || pt2.y < 0)  
			{  
				userChatUI.gameObject.SetActive(false);  
			}  
			else  
			{  
				userChatUI.gameObject.SetActive(true);  
			} 



			if ((_CheckPos.transform.position.x > 0 && this.gameObject.transform.position.x < 0) || (_CheckPos.transform.position.x < 0 && this.gameObject.transform.position.x > 0)) {
				userChatUI.gameObject.SetActive(false);  
				userNameUI.gameObject.SetActive(false);  
			}
			else {
				Debug.Log ("当前的相机正在拍照到物体!");
			}
		}
	}



好了。希望能给做AR/VR出现 UI双面的同学给一个解决问题的思路,如果不懂可以私信我。另外,用携程里面写死循环,延迟调用,时间的话可以自己控制,比在update里面进行检测 高效得多。这点大家可以借鉴。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值