Unity3D: Trail Renderer для неподвижного объекта

В моей игре мой игрок (мяч) не движется по оси x. Мяч просто может прыгать (ось Y).

Уровень всегда перемещается по оси x и дает игроку ощущение движения мяча.

Мой вопрос: возможно ли добавить средство визуализации следов (или что-то в этом роде) к моему шару? Чтобы усилить ощущение движения мяча?

Как изображение ..: эффект, который я хочу получить
(источник: barouch.fr)

Благодарю вас!


person ababab5    schedule 21.07.2014    source источник


Ответы (1)


Да, вы можете, и я доказал, что это возможно.

введите здесь описание изображения

Как вы можете видеть на изображении, я рекурсивно вложил 5 сфер, каждая из которых имеет Z + 1 своего родителя.
Вам понадобится rigidbody для каждой из их, потому что мы собираемся AddForce к ним.

А вот и важная часть — скрипты.
У меня есть 3 скрипта с именами HeadScript, BodyScript, TailScript (что-то вроде игры в змейку, поэтому я их так и называю)

Заголовок:

void Update () {
    if(Input.GetKeyDown(KeyCode.Space)){
        rigidbody.AddForce(new Vector3(0, 6, 0), ForceMode.Impulse);
        GameObject child = transform.FindChild("Sphere").gameObject;
        BodyScript childScript = child.GetComponent<BodyScript>();
        childScript.ChildJump();
    }
}

HeadScript прикреплен только к голове (крайняя правая сфера), ему нужно определить нажатие клавиши (для прыжка), затем мы добавляем силу к себе (только вверх), чтобы он выглядел так, как будто он прыгает. После этого получите дочерний объект (мяч слева от него) и вызовите функцию ChildJump, которая находится внутри BodyScript.

БодиСкрипт:

public void ChildJump(){
    Invoke ("Jump", 0.1f);
}

void Jump(){
    rigidbody.AddForce(new Vector3(0, 6, 0), ForceMode.Impulse);
    GameObject child = transform.FindChild("Sphere").gameObject;
    if(child.GetComponent<BodyScript>() == null){
        TailScript childScript = child.GetComponent<TailScript>();
        childScript.ChildJump();
    }
    else {
        BodyScript childScript = child.GetComponent<BodyScript>();
        childScript.ChildJump();
    }
}

BodyScript прикреплен к каждой сфере, кроме первой и последней. Родительские объекты вызывают функцию ChildJump, которая содержит только 1 функцию, Invoke.

Invoke используется для вызова функции после определенной задержки. В этом коде задержка составляет 0,1 с.

Сам Jump вызовет функцию ChildJump своего потомка (шар слева). Теперь вы понимаете, почему это своего рода рекурсия.

Мы добавили условие if, чтобы не было ошибок при получении компонента BodyScript из последней сферы, которой там нет. Последний скрипт имеет только TailScript.

Хвостовой скрипт:

public void ChildJump(){
    Invoke ("Jump", 0.1f);
}

void Jump(){
    rigidbody.AddForce(new Vector3(0, 6, 0), ForceMode.Impulse);
}

Окончательный сценарий, TailScript, содержит только AddForce, потому что у него нет дочерних элементов.

Каждая сфера (кроме головы) после задержки в 0,1 с отскочит от своего родителя, став тем, что вы называете, визуализатором следа.

Теперь осталось просто добавить альфа-материал для каждого из них, чтобы они стали более прозрачными, и вуаля! Работа сделана!

person Jay Kazama    schedule 22.07.2014
comment
Привет спасибо!! Я проверю это завтра утром (я во Франции). Спасибо 1000 раз ;) - person ababab5; 23.07.2014