我正在为Google构建一个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的刚体: 1;拖动和角拖动: 0;使用重力,不是运动学,内插设置为无碰撞检测设置为离散。位置没有冻结,但旋转是所有的X,Y和Z坐标,这样它就不会掉下来。
墙壁(3D模型)上有一个简单的网格对撞机,仅此而已。
我想我也应该提到,我不希望角色在与墙壁碰撞时停止,因此我不认为使用触发器是个好主意。只有当玩家面对墙的时候才能完全停止,但是如果有一个角度,我希望玩家沿着墙“滑行”。
发布于 2016-11-07 20:53:00
您还可以删除Rigidbody组件,并在播放机上使用CharacterController组件,并使用SimpleMove函数而不是转换播放机。转换函数将播放器设置在一个新的向量位置上,这将使播放器与墙壁交叉,而不是与它们碰撞。
https://stackoverflow.com/questions/38811540
复制相似问题