Unity:Climb Ladder

时间:2013-04-10 23:24:11

标签: unity3d unityscript

我一直在Unity上玩第一人称游戏,并且遇到了我想添加的功能:爬梯子。但是,到目前为止我没有成功编码(顺便说一句,我使用的是javascript)。下面是我必须测试与梯子碰撞的脚本,这不起作用:

function OnCollisionEnter(collider:Collision){
    if(collider.gameObject.name=="ladder"){
        Debug.Log("hit ladder");
    }
}

从技术上讲,这应该会在与梯子碰撞时显示调试消息“hit ladder”......但事实并非如此。

有谁知道为什么这不起作用,或者我如何解决它?感谢。

4 个答案:

答案 0 :(得分:1)

派对可能有点晚了,但我到了。

当控制器向前移动时,你总是可以制作一个基于触发器的梯子,它可以向上移动。

我发布了一篇博客文章,解释了(没有代码)我如何在旧的演示视频中实现简单的梯子,这也是在帖子上可见的。

http://www.lazr.pw/2014/02/unity-trigger-based-ladders.html

希望这有助于某人。

答案 1 :(得分:0)

由于这个脚本正在寻找与梯子的碰撞,我假设脚本在角色内。如果剧本在你的阶梯内,那么......就是问题:P

在任何情况下,如果这是在你的角色中,并且你可能正在使用CharacterController移动他,那么OnCollisionEnter将不会触发。您需要使用OnControllerColliderHit(collider:Collision) { ... }并将碰撞检测结果放在其中。

答案 2 :(得分:0)

我可以告诉你两件事。

  1. 使用CharacterController.OnControllerColliderHit作为Steven Mills的建议,但请注意,传递给该函数的参数实际上是ControllerColliderHit
  2. 不是检查对撞机的名称,而是比较Tag的{​​{1}}。您要做的就是为每个GameObject分配相同的标签,让我们说“Ladder”。
  3. 以下是您的C#示例:

    GameObject

    我建议您查看上面的链接以获取更多信息。这是因为您可能希望执行其他检查,例如玩家与梯子发生碰撞的位置。这是因为你可能不希望能够从梯子的两侧爬梯子(当然,除非梯子绳子或类似的东西)。你还需要一种方法来告诉玩家已经完成了爬梯的上升/下降。当你的脚在它的顶部之上时,你可能不想仍然爬梯子;)。希望这有帮助!

答案 3 :(得分:0)

  1. 使用OnTriggerEnter(Collider)代替(不要忘记将梯形图设置为触发器!)
  2. 使用Rigidbody(非运动的)代替角色控制器。文件说“只有在其中一个碰撞器还附有非运动刚体的情况下才会发送碰撞事件。”