Вторник, 21 Мая 2024, 21:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » 9 дорожек в раннер - Нужна помощь! (как Сабвей Серф)
9 дорожек в раннер - Нужна помощь!
GrimerdieДата: Вторник, 24 Июня 2014, 14:14 | Сообщение # 1
был не раз
Сейчас нет на сайте
У меня возникла проблема, я делаю раннер на Android, как Сабвей Серф. В общем, все бы ничего, код управления написал, но возникла проблема: у меня по задумке должно быть не 3 дорожки, как в Сабвее, а 9. Как три дорожки сделать я додумал, а вот как сделать больше трех голову ломаю все утро. Можете наводку дать, как добавить еще дорожек?

Цитата
using UnityEngine;
using System.Collections;

public class Movent : MonoBehaviour {
public GameObject Player; //Объявляем игрока
int Speed = 2; //Объявляем скорость
bool Alive; //Мы живы?
Vector3 Damp = new Vector3(0.0f,0.0f,0.0f);

void Awake(){
Alive = true;
}

void Update () {

if(Alive)
{
Player.transform.position += Player.transform.forward * Speed * Time.deltaTime;
}

if(Alive && Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
{
if(touchDeltaPosition.x > 8.0 && transform.position.x >= -0.5)
{
Player.transform.position = new Vector3(1.4f, transform.position.y, transform.position.z);
}
if(touchDeltaPosition.x > 8.0 && transform.position.x <= -0.5)
{
Player.transform.position = new Vector3(0.0f, transform.position.y, transform.position.z);
}
if(touchDeltaPosition.x < -8.0 && transform.position.x >= 0.5)
{
Player.transform.position = new Vector3(0.0, transform.position.y, transform.position.z);
}

if(touchDeltaPosition.x < -8.0 && transform.position.x <= 0.5)
{
Player.transform.position = new Vector3(-1.4f, transform.position.y, transform.position.z);

}

}
}

}
void OnCollisionEnter()
{
Speed = 0;
}
void OnCollisionExit()
{
Speed = 2;
}
}


Сообщение отредактировал Grimerdie - Вторник, 24 Июня 2014, 14:16
allodsДата: Вторник, 24 Июня 2014, 15:09 | Сообщение # 2
почти ветеран
Сейчас нет на сайте

Эта игра?
И на сколько я смог понять, ты просто жмешь влево и право чтоб менять дорожку? Если да то не понятно чем это отличается от 3 или более дорожек? Я не понимаю что именно ты не можешь сделать, ведь ты уже можешь передвигаться на 3х
GrimerdieДата: Вторник, 24 Июня 2014, 15:24 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата allods ()
И на сколько я смог понять, ты просто жмешь влево и право чтоб менять дорожку? Если да то не понятно чем это отличается от 3 или более дорожек? Я не понимаю что именно ты не можешь сделать, ведь ты уже можешь передвигаться на 3х

Да, эта игра. Просмотри код внимательно, и узри, как происходит проверка того, на какой дорожке ты в данный момент, и поймешь, в чем моя проблема.
allodsДата: Вторник, 24 Июня 2014, 15:27 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
я так понимаю это transform.position.x >= -0.5

Добавлено (24.06.2014, 15:27)
---------------------------------------------
каждые 1,5 у тебя дорожка так ?

GrimerdieДата: Вторник, 24 Июня 2014, 15:31 | Сообщение # 5
был не раз
Сейчас нет на сайте
Цитата allods ()
каждые 1,5 у тебя дорожка так ?

Почти что, 1,4. Проблема в том, что как бы и 2.8, и 4.2 тоже больше 0.5, поэтому, кроме добавления еще одной переменной (что весьма сомнительно) я ничего не придумал.
allodsДата: Вторник, 24 Июня 2014, 15:43 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Код
int path; /// количество дорожек
float height;/// расстояние между дорожками
int currentPath;///на какой дорожке находится игрок
float speed;/// скорость движения

if(touchDeltaPosition.x > 8.0)
{
   if(currentPath<path)
   {
     currentPath+=1;
   }
}

if(touchDeltaPosition.x < -8.0)
{
   if(currentPath>0)
   {
     currentPath-=1;
   }
}

Player.transform.position.x=Mathf.Lerp(Player.transform.position.x,currentPath*height,speed*Time.deltaTime); или

Player.transform.position.x=Mathf.MoveTowards(Player.transform.position.x,currentPath*height,speed*Time.deltaTime);

Добавлено (24.06.2014, 15:43)
---------------------------------------------
должно работать

Сообщение отредактировал allods - Вторник, 24 Июня 2014, 15:42
GrimerdieДата: Вторник, 24 Июня 2014, 15:43 | Сообщение # 7
был не раз
Сейчас нет на сайте
Цитата allods ()
Mathf

Точно! Как же я про него забыл, спасибо большое)
allodsДата: Вторник, 24 Июня 2014, 15:44 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
с этим скриптом по идее ты можешь задать хоть 200 дорожек
GrimerdieДата: Вторник, 24 Июня 2014, 15:52 | Сообщение # 9
был не раз
Сейчас нет на сайте
P.S.
Цитата
Player.transform.position.x

Этож сишарп, тут так не катит)
allodsДата: Вторник, 24 Июня 2014, 16:00 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
float playerX;

playerX=Player.transform.position.x;//пихать в старт

playerX=Mathf.Lerp(playerX,currentPath*height,speed*Time.deltaTime);

Player.transform.position=Vector3(playerX,0,0);
GrimerdieДата: Вторник, 24 Июня 2014, 16:54 | Сообщение # 11
был не раз
Сейчас нет на сайте
Сорри за приставучесть, но как сделать, чтобы перескакивал персонаж на другую дорожку единожды? Т.е., сейчас выходит так, что если провести пальцем и ударживать, то движение идет практически бесприрывно. Возможно ли сделать задержку, либо 1 линия по тач скрину - 1 смена дорожки?

Сообщение отредактировал Grimerdie - Вторник, 24 Июня 2014, 17:27
allodsДата: Вторник, 24 Июня 2014, 17:41 | Сообщение # 12
почти ветеран
Сейчас нет на сайте
сделай таймер
как только проведешь пальцем wait=1;

float wait;

if(wait>0)
wait-=1*Time.delatTime;

if(wait<=0)
if(touchDeltaPosition.x > 8.0)
{
wait=1;
твой код
}


Сообщение отредактировал allods - Вторник, 24 Июня 2014, 17:42
GrimerdieДата: Среда, 25 Июня 2014, 17:44 | Сообщение # 13
был не раз
Сейчас нет на сайте
В общем, отталкиваясь от кода выше, я написал свой, с кусками другого) Короче, проблема в том, что после перехода на другую дорожку, персонаж еще скользит какое-то время по направлению движения, как кубик льда.
И да, когда я в провожу по экрану, то действие выполняется, но стоит мне оторвать пальцы, как персонаж прекращает движение, будто я через while делаю (хотя у меня именно через if и Вектор3.Лерп).

UPD: Либо сделать проверку на то, чтобы между переходами на дорожки была проверка, был ли убран палец с тачскрина, или нет.

Код


Сообщение отредактировал Grimerdie - Среда, 25 Июня 2014, 18:33
allodsДата: Четверг, 26 Июня 2014, 03:12 | Сообщение # 14
почти ветеран
Сейчас нет на сайте
playerX=Player.transform.position.x;//пихать в старт

playerX=Mathf.Lerp(playerX,currentPath*height,speed*Time.deltaTime);

Player.transform.position=Vector3(playerX,0,0);

чем этот метод не угодил , ну вы и намудрили с кодом, та можно в 5 строчек уложиться

Добавлено (26.06.2014, 03:12)
---------------------------------------------
завтра будет время, напишу скрипт сам и проверю, если работает скину

GrimerdieДата: Четверг, 26 Июня 2014, 22:46 | Сообщение # 15
был не раз
Сейчас нет на сайте
Цитата allods ()
завтра будет время, напишу скрипт сам и проверю, если работает скину

Ваш скрипт хорош, но в своем я с помощью такой подробности пытался достичь четкости в смене дорожек. Увы, но не вышло=(


Сообщение отредактировал Grimerdie - Четверг, 26 Июня 2014, 22:47
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » 9 дорожек в раннер - Нужна помощь! (как Сабвей Серф)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг