2013-04-10 2 views
2

Я работаю в Unity в игре первого человека и натолкнулся на функцию, которую хочу добавить: лазание по лестницам. Тем не менее, я был неудачным в кодировании этого до сих пор (кстати, я использую javascript). Ниже приведен сценарий, я должен проверить столкновение с лестницей, которая не работает:Единство: Поднимитесь по лестнице

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

Технически, это должно показать сообщение отладки «ударил по лестнице» при столкновении с лестницей ... но это Безразлично «т.

Кто-нибудь знает, почему это не работает, или как я могу это исправить? Благодарю.

+1

Просто выбросьте это, но C# намного лучше для Unity. – AlienWebguy

+0

да, так что я слышал. Знаете ли вы, как я мог сделать это в C#? на самом деле, я чувствую, что это не код ... как-то неправильно настроено. но im not sure –

+1

Технически, это UnityScript, а не JavaScript. – Joetjah

ответ

0

Поскольку этот скрипт ищет столкновение с лестницей, я предполагаю, что скрипт находится внутри персонажа. Если сценарий находится внутри вашей лестницы, ну ... есть проблема: P

В любом случае, если это у вас в персонаже, и вы, вероятно, используете CharacterController для его перемещения, то OnCollisionEnter не будет запускать , Вам нужно использовать OnControllerColliderHit(collider:Collision) { ... } и поместить в него обнаруженные столкновения.

0

Здесь я могу сказать две вещи.

  1. Использование CharacterController.OnControllerColliderHit, как Стивен Миллс предложил, но обратите внимание, что параметр передается в функцию на самом деле ControllerColliderHit.
  2. Вместо проверки имени коллайдера сравните TagGameObject. Все, что вам нужно сделать, это назначить один и тот же тег, скажем, «Лестница», для каждого GameObject, что вы хотите иметь эту функцию.

Вот C# пример для вас, а также:

void OnControllerColliderHit(ControllerColliderHit hit) { 
    if (hit.collider.CompareTag("Ladder")) { 
     //Climbing 
    } 
} 

Я бы рекомендовал смотреть на ссылку выше для получения дополнительной информации. Это связано с тем, что вы, вероятно, захотите выполнить дополнительные проверки, например, когда игрок сталкивается с лестницей. Это связано с тем, что вы не можете подниматься по лестницам со стороны лестницы (если, конечно, если лестница является каналом или что-то в этом роде). Вам также понадобится способ сказать, что игрок закончил подниматься/опускаться по лестнице. Вы, вероятно, не хотите, чтобы все еще поднимались по лестнице, когда ваши ноги выше ее;). Надеюсь это поможет!

1

Возможно, немного поздно на вечеринку, но здесь я иду.

Вы всегда можете создать лестницу с триггером, которая применяет движение вверх, когда контроллер движется вперед.

Я опубликовал запись в блоге, объясняющую (без кода), как я начал реализовывать простые лестницы в старом демонстрационном видео, которое также видно на этом посту.

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

Надеется, что это поможет кому-то.

0
  1. Использование OnTriggerEnter (Collider) вместо (не забудьте установить лестницу в качестве триггера!)
  2. Используйте Rigidbody (не кинематической один) вместо символов контроллера.Документация гласит: «События коллизии отправляются только в том случае, если один из коллайдеров также имеет некинематический жесткий диск».

 Смежные вопросы

  • Нет связанных вопросов^_^