我一直在Unity上玩第一人称游戏,并且遇到了我想添加的功能:爬梯子。但是,到目前为止我没有成功编码(顺便说一句,我使用的是javascript)。下面是我必须测试与梯子碰撞的脚本,这不起作用:
function OnCollisionEnter(collider:Collision){
if(collider.gameObject.name=="ladder"){
Debug.Log("hit ladder");
}
}
从技术上讲,这应该会在与梯子碰撞时显示调试消息“hit ladder”......但事实并非如此。
有谁知道为什么这不起作用,或者我如何解决它?感谢。
答案 0 :(得分:1)
派对可能有点晚了,但我到了。
当控制器向前移动时,你总是可以制作一个基于触发器的梯子,它可以向上移动。
我发布了一篇博客文章,解释了(没有代码)我如何在旧的演示视频中实现简单的梯子,这也是在帖子上可见的。
http://www.lazr.pw/2014/02/unity-trigger-based-ladders.html
希望这有助于某人。
答案 1 :(得分:0)
由于这个脚本正在寻找与梯子的碰撞,我假设脚本在角色内。如果剧本在你的阶梯内,那么......就是问题:P
在任何情况下,如果这是在你的角色中,并且你可能正在使用CharacterController移动他,那么OnCollisionEnter
将不会触发。您需要使用OnControllerColliderHit(collider:Collision) { ... }
并将碰撞检测结果放在其中。
答案 2 :(得分:0)
我可以告诉你两件事。
ControllerColliderHit
。Tag
的{{1}}。您要做的就是为每个GameObject
分配相同的标签,让我们说“Ladder”。以下是您的C#示例:
GameObject
我建议您查看上面的链接以获取更多信息。这是因为您可能希望执行其他检查,例如玩家与梯子发生碰撞的位置。这是因为你可能不希望能够从梯子的两侧爬梯子(当然,除非梯子是绳子或类似的东西)。你还需要一种方法来告诉玩家已经完成了爬梯的上升/下降。当你的脚在它的顶部之上时,你可能不想仍然爬梯子;)。希望这有帮助!
答案 3 :(得分:0)