赞
踩
最近入手了一套vr设备,舍不得买商店里的游戏,再看看自己不就是程序员嘛。随手开发一个来玩吧
先找找csdn看看有没有开源的,找了一阵,全都是2d的简单东西,没有参考价值。还得靠自己,也给后人留点资料。
整个过程有几个重要部分,
1.场景搭建,物体尺寸一定要和真实世界1:1比例,因为在VR世界里一旦有偏差就会显得不真实
2.物理世界模拟,球、球拍、桌子的弹性,弹性损失,轨迹,碰撞后的速度变化
3.AI部分设计,挥拍速度,挥拍角度如何计算
4.计分系统和其他细节
其实为什么没有资料很好理解,民用VR还没有特别普及,普通程序员天天996哪有空买那么贵个鸡肋玩具。键盘鼠标操作的游戏对真实场景模拟再到位用户也感受不到。当然,得益于unity物理引擎对真实世界的模拟,我们可以节省很多工作量。
废话少说,进入正题。
空白场景加入一个地面,乒乓球桌,球拍,球。模型自行百度,有免费的按标准比例建好的模型,只是球我嫌他的不够圆用的简单的sphere。考虑到第一人称视角直接就看到后面的天空了,太不舒服,加了一面后墙。
然后给参与运动的物体添加组件,首先是球,有碰撞体、刚体、声音、还有物理材质,物理材质可以决定弹性。
调整尺寸、重量、移动和碰撞检测全部设置为最高。
然后是球桌,在桌面和球网上添加Box Collider,物理材质不同,桌面弹性是0.9,球网弹性是0,这样球在接触球网以后会直接停下。运行起来,球会落在桌面上,弹跳几下,然后静止。
这里要注意,理论上如果两面弹性都为1,球会原地弹跳永不停止,实际上由于某些原因球会越跳越高,弹性设置成0.969999就得到预期效果了。具体参考https://answer.uwa4d.com/question/5d45357727d7e5590f6cd850
https://answers.unity.com/questions/736091/how-to-get-a-perfect-bouncing-ball.html
我的弹性用0.9是拍脑门写的,实测球会弹4下(与高度有关)
然后是球拍,rigibody和mesh collider,设置好质量就ok,因为要受手柄或AI控制,所以去掉重力
现在拖入VR的SDK,让球拍随着手柄移动,把球做成perfab。
实例化一个球再给一个推力就算发球。可以打包安装到机器里体验一下了。Unity自带的物理引擎相当不错,挥拍击球的感觉很真实,特别是球的轨迹,快速挥拍球就快,慢速挥拍球就慢,削球的时候球就有旋转(感觉在转,速度和轨迹像,这个很惊喜)
关于代码,下一篇再写。
ps:
1.看到评论有人问可不可以引用我的东西,其实写出来就是为了分享,随便引用。
2.有人猜测我毕业了,故做神秘,反正还会偶尔写点东西。
3.有人问一些学术问题,不想回复,除非正想写的东西刚好能提到。因为学术问题不是一句两句能说清的,我的观点和方法也不一定对,这些要你自己收集资料,自己分析,自己思考。我写出来的东西,只是一份资料。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。