2013-05-24 2 views
0

Я делаю платформер в единстве, используя unityscript.Единство прыгающих столкновений - как враг поврежден

У меня есть родительский объект Player с символьным контроллером и различными дочерними объектами. У меня есть аналогичный враг с коробочным коллайдером. Я изо всех сил пытаюсь различать столкновение, когда игрок входит в противника и когда игрок прыгает и сталкивается с ним сверху.

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

if(col.transform.position.y >= transform.position.y){ killThyself(); } 

Но это тоже не сработает - должен ли я добавить высоту врага? Если да, то как мне это сделать?

Любые предложения с радостью получены.

+1

Я предлагаю вам добавить код на вопрос, иначе, чтобы получить эту работу, зависит от того, как у вас высокие враги;). – Teemu

+0

Предполагая, что вы используете OnCollisionEnter, вы можете использовать переменную 'normal' в каждом« ContactPoint », чтобы увидеть, указывает ли она вверх (и, следовательно, вы попадаете в верхнюю часть поля столкновения) –

ответ

0

Mmmm, я бы использовал переменную типа boolean. Сделать это верно, когда вы нажимаете кнопку перехода, и false, как только прыжок закончится (когда игрок коснется пола). Объявите логическое значение как переменную public. После этого в методе OnCollision проверьте значение переменной. Я рекомендую вам прочитать это, чтобы понять, как это сделать:

http://docs.unity3d.com/Documentation/ScriptReference/index.Accessing_Other_Game_Objects.html

Ну, в вашем случае я бы назначить «otherScript» (игрок скрипт), делая это в сценарии управления противника:

var player : GameObject; 
var playerScript: PlayerScript; 
//I'm assuming "PlayerScript" is the name of the control script of your player, 
//where you defined the "jump" variable. 

    function Start() 
    { 

    player = GameObject.FindGameObjectWithTag("Player"); 
    //You also can use GameObject.Find("PlayerName") 
    playerScript = player.GetComponent(PlayerScript); 
    //Get the script from the player 

    } 

    function OnCollisionEnter(col : Collision) 
    { 

    if (playerScript.jump == true) 
    { 
     killThyself(); 
    } 

    } 

Я нахожу игрока в функции «Начать», чтобы найти его только ОДИН РАЗ, на уровне загрузки. Теперь я назначаю скрипт игрока в переменную, поэтому, когда игрок попадает в противника, этот противник проверяет, прыгает ли игрок с помощью своего скрипта. Не забудьте объявить эту переменную как общедоступную переменную, иначе это не сработает. Прокомментируйте, если у вас есть какие-либо проблемы, используя этот метод =)

0

Я хотел бы использовать второй коллайдер в верхней части противника давайте назвал его headCollider. Установите isTrigger = true и, возможно, используйте специальный физический материал. Если этот headCollider является первым, с которым можно получить сигнал, вы знаете, что игровой персонаж прыгает на врага или падает на него сверху.

В OnTriggerEnter (Collider other) вы можете подготовить некоторые переменные статуса (и, возможно, таймер для сброса статуса). Также должен быть полезен для оценки текущий статус перехода, например, в предложенный V_Programmer ответ.

Поскольку Unity не позволяет вам прикреплять 2 коллайдера одного и того же типа, вам нужно использовать поле и сферу или создать пустой ребенок и использовать его.

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