标签:
</pre>个人感觉vr游戏或者展示类程序的灵魂就是真实感以及身临其境的感觉,如果场景中加入了大量的ui会破坏真实感,影响感觉,因此我觉得ui这种东西在vr里应该尽量转化为现实物体,比如显示屏,按钮等,一来增加了交互,二来也在增加真实感的同时也实现了ui的功能。<span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"> 以上是废话,意思就是ui最好做成3d的,个人感觉。。。。。。<br style="word-wrap:break-word" /></span></span></span><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"> htc vive 在steam上有款游戏叫HoverJunkers,个人感觉是目前所有htc viveFPS游戏里的顶端作品了,沉浸感很强,虽然是虚构出来的科幻的末世风格,枪械手感做的也非常有感觉,感觉这款游戏里的换枪功能做的手感不错,所以用自己的思路模仿着做了一下,大体实现了功,界面简陋,代码写的也太嫩,有很多需要优化的地方,因此仅仅提供一个思路,不仅仅可以换钱,也可以当做其他的功能使用,算是抛砖引玉,大家有体验更好的这类交互希望也一起分享一下.</span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong>题外:我的微博 “ </strong></span><span style="color:rgb(105,105,105); line-height:25px; font-size:32px; word-wrap:break-word; font-family:'microsoft yahei'"><strong><span style="word-wrap:break-word"><span style="color:red; word-wrap:break-word">黑石铸造厂厂长</span></span></strong></span><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong> ”,想要个大 v粉丝不够啊 ,大家互粉一下呗</strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong><img src="http://img.manew.com/data/attachment/forum/201606/15/113709t3cxxl1ss1k9s2uy.jpg" alt="" /></strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong><img src="http://img.manew.com/data/attachment/forum/201606/15/113704bo1yskwrrfmlm321.jpg" alt="" /></strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px">这就是hoverjunkers的换弹功能,按住手柄上的menu键(就是圆盘上面那个键),就会弹出一个3d的ui,手柄指向选择的武器松开menu键就会获得选择的武器(选中武器高亮)</span><br style="word-wrap:break-word; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px" /><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px">现在就通过我的思路简单实现一下以上功能</span></strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><img src="http://img.manew.com/data/attachment/forum/201606/15/115549fvk577erhjv5kr75.jpg" alt="" /></span></strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><img src="http://img.manew.com/data/attachment/forum/201606/15/115550ukpk5yy65qkdenof.jpg" alt="" /></span></strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><img src="http://img.manew.com/data/attachment/forum/201606/15/115551mwtbge0wow0debsz.jpg" alt="" /></span></strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><strong><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><img src="http://img.manew.com/data/attachment/forum/201606/15/115551bbtti6jj6o4teo2t.jpg" alt="" /></span></strong></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); font-weight:bold; line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px">这就是制作demo的效果</span><br style="word-wrap:break-word; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px" /><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word">原理就是事先绑好武器与手柄,布置好3d的武器列表,做成什么效果看美工了(调整格子外貌,normal材质和高亮材质等工作),从手柄发射一个ray,ray碰撞武器列表里的格子,碰到对应的格子激活对应的武器,其他的取消激活。</span></span><br style="word-wrap:break-word; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px" /><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word">说到这里好像做了个很low的东西,毕竟效果是实现了,新手就是这么容易满足,当做笔记吧, 哈哈哈哈哈</span></span><br style="word-wrap:break-word; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px" /><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word">主要的代码贴一下:</span></span><br style="word-wrap:break-word; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px" /><span style="font-size:24px; word-wrap:break-word; color:rgb(105,105,105); font-family:'microsoft yahei'; line-height:25px"><span style="word-wrap:break-word; font-weight:700">我是新手,我会努力学习规范代码优化代码的,所以大家先凑合看</span></span></span></span></span></span></span></p><p><span style="font-family:黑体; word-wrap:break-word; color:rgb(105,105,105); font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word"><span style="word-wrap:break-word; font-weight:700"><span style="color:rgb(105,105,105); font-weight:bold; line-height:25px; word-wrap:break-word; font-family:'microsoft yahei'; font-size:16px"><span style="word-wrap:break-word; font-weight:700; color:rgb(105,105,105); font-family:'microsoft yahei'; font-size:16px; line-height:25px"><span style="font-size:24px; word-wrap:break-word; color:rgb(105,105,105); font-family:'microsoft yahei'; line-height:25px"><span style="word-wrap:break-word; font-weight:700"></span></span></span></span></span></span></span></p><pre name="code" class="csharp">using UnityEngine; using System.Collections; public class chooseWeapon : MonoBehaviour { //手柄 SteamVR_TrackedObject trackdeObjec; //武器列表 public GameObject weaponMenu; //武器列表中的枪选项 public GameObject weaponMenuGun; //武器列表中的刀选项 public GameObject weaponMeunKnife; //手上的武器:刀 public GameObject kinfe; //手上的武器:枪 public GameObject gun; //从手柄发出射线来选择武器 //射线起始位置 public Transform rayStart; //射线方向 public Transform rayTarget; //列表起始颜色 Color menuNormalColor; //列表高亮颜色 Color menuHighlightColor; // void Awake() { //获取手柄上的这个组件 trackdeObjec = GetComponent<SteamVR_TrackedObject>(); //刀取消激活 kinfe.SetActive(false); //武器列表取消激活 weaponMenu.SetActive(false); } // Use this for initialization void Start () { //获取武器列表选项初始颜色 Material orignMaterial = weaponMenuGun.GetComponent<Renderer>().material; menuNormalColor = orignMaterial.color; //制作高亮颜色 menuHighlightColor = menuNormalColor + Color.grey; } // Update is called once per frame void Update () { } void FixedUpdate() { //获取vive手柄输入 var device = SteamVR_Controller.Input((int)trackdeObjec.index); //实时获取激光起点 Vector3 rayStartPos = rayStart.position; //实时获取激光方向 Vector3 rayDirdctionn = rayTarget.position; //激光方向 Vector3 rayFinDirection = (rayDirdctionn - rayStartPos).normalized; //发射射线 Ray ray = new Ray(rayStartPos, rayFinDirection); RaycastHit hitInfo = new RaycastHit(); //打印射线 Debug.DrawRay(ray.origin, ray.direction * 100, Color.green); if (device.GetTouch(SteamVR_Controller.ButtonMask.ApplicationMenu)) { //按下菜单键激活武器列表 weaponMenu.SetActive(true); //如果激光接触物体(列表) if (Physics.Raycast(ray, out hitInfo)) { if (hitInfo.collider != null) {//射线选中了武器列表哪个选项的格子,哪个格子就会高亮,射线离开取消高亮恢复颜色; if (hitInfo.collider.gameObject.tag == "gun") { weaponMenuGun.GetComponent<Renderer>().material.color = menuHighlightColor; } else { weaponMenuGun.GetComponent<Renderer>().material.color = menuNormalColor; } if (hitInfo.collider.gameObject.tag == "knife") { weaponMeunKnife.GetComponent<Renderer>().material.color = menuHighlightColor; } else { weaponMeunKnife.GetComponent<Renderer>().material.color = menuNormalColor; } } } } //如果在枪这里松开了菜单按钮,就会激活枪,取消激活刀和菜单 if (device.GetTouchUp(SteamVR_Controller.ButtonMask.ApplicationMenu)) { //如果激光接触物体(列表) if (Physics.Raycast(ray, out hitInfo)) { //这里我把枪选项的格子tag设为了gun,刀选项的格子tag设为了knife if (hitInfo.collider.gameObject.tag == "gun") { Debug.Log("选中了枪"); gun.SetActive(true); kinfe.SetActive(false); } if (hitInfo.collider.gameObject.tag == "knife") { //道理同上 Debug.Log("选中了刀"); gun.SetActive(false); kinfe.SetActive(true); } } weaponMenu.SetActive(false); } } }
demo下载地址:
http://download.csdn.net/detail/ystistheking/9550100
htc vive 游戏切换武器功能思路以及demo(unity,c#)
标签:
原文地址:http://blog.csdn.net/ystistheking/article/details/51680362