Змейка [Хвост]
|
|
teta | Дата: Вторник, 12 Июня 2018, 17:53 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Код public GameObject SnakeBody; private int c = 0; private int s = 0; private int i = 0; private List<GameObject> Tail = new List<GameObject>();
void Start () { Tail.Clear (); for(int i = 0; i < 3; i++)AddTail(); }
//передвижение
void Update () { //головы i = PlayerPrefs.GetInt ("Click"); if (i == 0) { transform.Translate (Time.deltaTime * PlayerPrefs.GetFloat ("Power"), 0f, 0f); } else if (i == 1) { transform.Translate (0f, Time.deltaTime * PlayerPrefs.GetFloat ("Power"), 0f); } else if (i == 2) { transform.Translate (-Time.deltaTime * PlayerPrefs.GetFloat ("Power"), 0f, 0f); } else if (i == 3) { transform.Translate (0f, -Time.deltaTime * PlayerPrefs.GetFloat ("Power"), 0f); } else if (i == -1) { transform.Translate (0f, 0f, 0f); } //выз.хвост SnakeTailMove (); }
//передвижение хвоста public void SnakeTailMove(){ if (Tail.Count > 0) { Tail [0].transform.position = this.transform.position;
for (int i = Tail.Count - 1; i > 0; i--) { Tail [i].transform.position = Tail [i - 1].transform.position;
} } }
//добавление хвоста public void AddTail(){ Vector3 Position = transform.position;
if (Tail.Count > 0) { Position = Tail [Tail.Count - 1].transform.position; }
GameObject Body = Instantiate (SnakeBody, Position, Quaternion.identity) as GameObject;
Tail.Add (Body); }
Моя проблема в том, что у меня при движение - все части хвоста на голове. Как сделать так, что бы это как бы был хвост? Темный квадрат - хвост. Белая голова - голова.
Когда узнал?
Сообщение отредактировал teta - Вторник, 12 Июня 2018, 17:53 |
|
| |
DQUODwyPO | Дата: Вторник, 12 Июня 2018, 18:17 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| teta, у меня картинка не отображается.
Код public void AddTail(){ Vector3 Position = transform.position;
if (Tail.Count > 0) { Position = Tail [Tail.Count - 1].transform.position; }
GameObject Body = Instantiate (SnakeBody, Position, Quaternion.identity) as GameObject;
Tail.Add (Body); } Так вот у тебя написаны координаты хвоста. Если ты даешь им координаты головы и говоришь появляться там. Непонятно, как они двигаться должны в таком случае. Я, конечно, новичок в Unity. Думаю, здесь еще нужно учитывать поворот головы и от нее скакать к каждой части.
Добавил. Что делает переменная Tail.Count? Где она объявлена?
Сообщение отредактировал DQUODwyPO - Вторник, 12 Июня 2018, 18:19 |
|
| |
teta | Дата: Вторник, 12 Июня 2018, 18:32 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| DQUODwyPO, Tail.Count - кол-во объектов в списке Tail. Объявлена в "private List<GameObject> Tail = new List<GameObject>();" И извините, что выше не написал. Я знаю, что я указал координаты головы и я пытался передать значение добавляя еще дистанцию и у меня то ли ошибка, то ли не возможно.
Когда узнал?
Сообщение отредактировал teta - Вторник, 12 Июня 2018, 18:32 |
|
| |
DQUODwyPO | Дата: Вторник, 12 Июня 2018, 19:21 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| teta, я полистал в интернете. Думаю надо сделать так. Если у тебя голова по-умолчанию смотрит вверх, то берешь вектор, координаты которого указывают на его хвост, пусть это будет (0,-1,0). Когда у тебя голова поворачивается, тебе надо использовать функцию поворота вектора (вообще функция должна всегда вызываться получается). Здесь вроде есть решение. Ну а расчет следующей части хвоста берется относительно предыдущей части. Хотя не уверен, что в примере это будет выглядеть идеально. Скорее всего это будет прямая линия которая поворачивается синхронно.
Добавил. Если смотреть, голова поворачивается в определенном месте. И часть хвоста должна поворачиваться только в этой точке, когда достигнет ее.Добавлено (12 Июня 2018, 19:21) --------------------------------------------- Ну вот хвост получилось пока пришить. А вот чтобы он нормально двигался ( с поворотами) пока нет.
Сообщение отредактировал DQUODwyPO - Вторник, 12 Июня 2018, 18:46 |
|
| |