【发布时间】:2016-08-07 06:25:51
【问题描述】:
我正在为 Google Cardboard 构建一个 VR 迷宫游戏,其中 https://github.com/JuppOtto/Google-Cardboard/blob/master/Autowalk.cs 作为移动玩家的脚本。到目前为止,我还没有找到任何对我有帮助的东西,我尝试过处理物理材料、冻结/解冻刚体的约束、将角阻力设置为无穷大等。
据我所知,问题应该是我的刚体穿透了上面有网格碰撞器的墙壁,它被推回,导致了这种奇怪的“有弹性的行为”。几乎感觉就像刚体角色一直试图穿过墙壁,即使它做不到。
在大多数情况下,这不是什么大问题,但游戏中的某些角落有其他较小的物体,上面也有网格碰撞器,如果玩家进入这些物体和墙壁之间,他们只会被推(弹跳)出游戏区域并完全穿过墙壁。
这是负责我的角色移动的部分,我认为必须将其更改为其他内容:
if (isWalking)
{
Vector3 direction = new Vector3(head.transform.forward.x, 0, head.transform.forward.z).normalized * speed * Time.deltaTime;
Quaternion rotation = Quaternion.Euler(new Vector3(0, -transform.rotation.eulerAngles.y, 0));
transform.Translate(rotation * direction);
}
以下是关于我的设置的一些信息:
具有运动脚本的角色有一个胶囊碰撞器和一个质量为:1 的刚体;阻力和角度阻力:0;使用重力,不是运动学的,插值设置为无,碰撞检测设置为离散。位置未冻结,但旋转适用于所有 X、Y 和 Z 坐标,因此不会倒下。
墙壁(3D 模型)上有一个简单的网格碰撞器,仅此而已。
我想我还应该提到我不希望角色在与墙壁碰撞时停下来,因此我不认为使用触发器是个好主意。完全停止只有在玩家正面面对墙壁时才可以接受,但如果有角度,我希望玩家沿着墙壁“滑动”。
【问题讨论】: