Да, вы можете, и я доказал, что это возможно.
Как вы можете видеть на изображении, я рекурсивно вложил 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