Posiçoes dos carros
3 participantes
Página 1 de 1
Posiçoes dos carros
Bom dia amigos.
Estou tentando aqui fazer um sistema de posiçoes dos carros tipo assim tem 4 carros na pista e suas posiçoes iniciais
Carro1 posiçao1,carro2 posiçao2,carro3 posiçao3,carro4 posiçao4.
e ao colidir com varios colisores mudando suas posiçoes, tipo um rank.
Alguem tiver uma ideia,base ou tutorial vai me ajudar muito.
Obrigado a todos.
Estou tentando aqui fazer um sistema de posiçoes dos carros tipo assim tem 4 carros na pista e suas posiçoes iniciais
Carro1 posiçao1,carro2 posiçao2,carro3 posiçao3,carro4 posiçao4.
e ao colidir com varios colisores mudando suas posiçoes, tipo um rank.
Alguem tiver uma ideia,base ou tutorial vai me ajudar muito.
Obrigado a todos.
Última edição por Callyde Jr em Qui Out 05, 2017 12:21 pm, editado 1 vez(es)
Re: Posiçoes dos carros
http://answers.unity3d.com/questions/462034/logic-on-calculating-positions-in-a-race.html
Link do fórum da unity, tem a lógica e até mesmo uns scripts pra você usar como base
Link do fórum da unity, tem a lógica e até mesmo uns scripts pra você usar como base
Madness- Designer
- PONTOS : 3610
REPUTAÇÃO : 222
Áreas de atuação : Designer
Iniciante C++
Quase um programador C#
Respeito as regras :
Re: Posiçoes dos carros
cada vez que o carro colidar com o chekpoint, ou chegar no seu waypoint e so somar uma variável , despois checa quem tem mais números nessa variável, quem tiver mais vai ser o primeiro ,
vamos supor...
primeiro 20 waypoints
segundo 17 waypoints
terceiro 8 waypoints
no script...
checar quem tem mais waypoints (carro1)
checar quem e o segundo local. seria um numero menor do waypoint do carro1 e maior q zero
dará este resultado
17(carro2)
8(carro3)
agr e so checar quem tem mais (carro2)
se tiver mais carros e so repetir o processo. checar os waypoints menor de 17(carro2) e maior q zero
terá este resultado
8(carro3)
caso haja 2 ou mais carros do mesmo jeito pode botar no carro um script dizendo há quanto tempo ele já pegou aquele waypoint o que tiver mais tempo sera o primeiro a ter pegado ele
espero ter ajudado neste raciocínio :D
n sei mt como fazer esse script doidao n , mais sei q e possível, porem estou vendo que você e programador e já manja nessas coisas
vamos supor...
primeiro 20 waypoints
segundo 17 waypoints
terceiro 8 waypoints
no script...
checar quem tem mais waypoints (carro1)
checar quem e o segundo local. seria um numero menor do waypoint do carro1 e maior q zero
dará este resultado
17(carro2)
8(carro3)
agr e so checar quem tem mais (carro2)
se tiver mais carros e so repetir o processo. checar os waypoints menor de 17(carro2) e maior q zero
terá este resultado
8(carro3)
caso haja 2 ou mais carros do mesmo jeito pode botar no carro um script dizendo há quanto tempo ele já pegou aquele waypoint o que tiver mais tempo sera o primeiro a ter pegado ele
espero ter ajudado neste raciocínio :D
n sei mt como fazer esse script doidao n , mais sei q e possível, porem estou vendo que você e programador e já manja nessas coisas
Re: Posiçoes dos carros
Massa obrigado amigos,
Eu estou testando o do fórum da unity mais esta dando erros nesse script
Na linha 26,
Eu estou testando o do fórum da unity mais esta dando erros nesse script
Na linha 26,
- Código:
currentWaypoint = System.Convert.ToInt32(otherTag);//nessa parte
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Text.RegularExpressions;
public class Car : MonoBehaviour {
public int currentWaypoint;//Waypoint atual
public int currentLap;//Voltas na pista
public Transform lastWaypoint;//Waypoint chegada
public int nbWaypoint; //Set the amount of Waypoints
private static int WAYPOINT_VALUE = 100;
private static int LAP_VALUE = 10000;
private int cpt_waypoint = 0;
// Use this for initialization
public void Initialize() {
currentWaypoint = 0;
currentLap = 0;
cpt_waypoint = 0;
}
public void OnTriggerEnter(Collider other) {
string otherTag = other.gameObject.tag;
currentWaypoint = System.Convert.ToInt32(otherTag);
if (currentWaypoint == 1 && cpt_waypoint == nbWaypoint) { // completed a lap, so increase currentLap;
currentLap++;
cpt_waypoint = 0;
}
if (cpt_waypoint == currentWaypoint - 1) {
lastWaypoint = other.transform;
cpt_waypoint++;
}
}
public float GetDistance() {
return (transform.position - lastWaypoint.position).magnitude + currentWaypoint * WAYPOINT_VALUE + currentLap * LAP_VALUE;
}
public int GetCarPosition(Car[] allCars) {
float distance = GetDistance();
int position = 1;
foreach (Car car in allCars) {
if (car.GetDistance() > distance)
position++;
}
return position;
}
}
Re: Posiçoes dos carros
Esta mostrando isso.
Ja fiz assim
System..Convert.ToInt32(otherTag);
Convert.ToInt32(otherTag);
Int32.Parse(otherTag);
Coloquei nos objetos em vez de nomes coloquei so 1,2,3 nao funcionou?
- Código:
FormatException: Input string was not in the correct format
System.Int32.Parse (System.String s) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Int32.cs:629)
System.Convert.ToInt32 (System.String value) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Convert.cs:1270)
Car.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts/Car.cs:26)
FormatException: string de entrada não estava no formato correto
System.Int32.Parse (System.String s) (em /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Int32.cs:629)
System.Convert.ToInt32 (System.String value) (em /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Convert.cs:1270)
Car.OnTriggerEnter (UnityEngine.Collider outro) (em Assets / Scripts / Car.cs: 26)
Ja fiz assim
System..Convert.ToInt32(otherTag);
Convert.ToInt32(otherTag);
Int32.Parse(otherTag);
Coloquei nos objetos em vez de nomes coloquei so 1,2,3 nao funcionou?
Re: Posiçoes dos carros
Bom dia amigos.
Bom la no fórum da unity ele diz isso para usar esse sistema.
E bem simples mais so mostra esse erro quando o jogo esta rodando.
Aqui está uma nova versão dos scripts da Tomer Barkan com algumas melhorias.
1) O script do carro antigo não filtrou a direção errada e aumentaram várias voltas. 2) O script RaceManager tem uma matriz demais para armazenar as referências do carro, então eu removi o carObject!
Cada waypoint deve ter um colisor do gatilho e deve ser marcado como "1", "2", "3" ... de acordo com o número do waypoint.
Cada objeto Car deve ser atribuído com o script Car.
Você precisa definir manualmente o número total de Waypoints na variável nbWaypoint e é preferível que você configure a variável LastWaypoint no último waypoint antes de começar, então o script funcionaria antes da primeira volta e sem erros do console.
O RaceManager deve ser atribuído com o script do gerenciador de corrida, e você precisa arrastar e soltar cada jogo do carro na variável AllCars no script, então ele tem uma referência ao script de todos os carros.
O Script "Car.cs":
O Script "RaceManager.cs":
Fiz como lele disse ai mas nada?
Bom la no fórum da unity ele diz isso para usar esse sistema.
E bem simples mais so mostra esse erro quando o jogo esta rodando.
Aqui está uma nova versão dos scripts da Tomer Barkan com algumas melhorias.
1) O script do carro antigo não filtrou a direção errada e aumentaram várias voltas. 2) O script RaceManager tem uma matriz demais para armazenar as referências do carro, então eu removi o carObject!
Cada waypoint deve ter um colisor do gatilho e deve ser marcado como "1", "2", "3" ... de acordo com o número do waypoint.
Cada objeto Car deve ser atribuído com o script Car.
Você precisa definir manualmente o número total de Waypoints na variável nbWaypoint e é preferível que você configure a variável LastWaypoint no último waypoint antes de começar, então o script funcionaria antes da primeira volta e sem erros do console.
O RaceManager deve ser atribuído com o script do gerenciador de corrida, e você precisa arrastar e soltar cada jogo do carro na variável AllCars no script, então ele tem uma referência ao script de todos os carros.
O Script "Car.cs":
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class Car : MonoBehaviour {
public int currentWaypoint;//Waypoint atual
public int currentLap;//Voltas na pista
public Transform lastWaypoint;//Waypoint chegada
public int nbWaypoint; //Quantidade de Waypoints
private static int WAYPOINT_VALUE = 100;
private static int LAP_VALUE = 10000;
private int cpt_waypoint = 0;
// Use this for initialization
public void Initialize() {
currentWaypoint = 0;
currentLap = 0;
cpt_waypoint = 0;
}
public void OnTriggerEnter(Collider other) {
string otherTag = other.gameObject.tag;
currentWaypoint = System.Int32.Parse(otherTag);
if (currentWaypoint == 1 && cpt_waypoint == nbWaypoint) { // completed a lap, so increase currentLap;
currentLap++;
cpt_waypoint = 0;
}
if (cpt_waypoint == currentWaypoint - 1) {
lastWaypoint = other.transform;
cpt_waypoint++;
}
}
public float GetDistance() {
return (transform.position - lastWaypoint.position).magnitude + currentWaypoint * WAYPOINT_VALUE + currentLap * LAP_VALUE;
}
public int GetCarPosition(Car[] allCars) {
float distance = GetDistance();
int position = 1;
foreach (Car car in allCars) {
if (car.GetDistance() > distance)
position++;
}
return position;
}
}
O Script "RaceManager.cs":
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class RaceManager : MonoBehaviour {
public Car[] allCars;//Carros
public Car[] carOrder;//horde dos carros
public void Start() {
// set up the car objects
carOrder = new Car[allCars.Length];
InvokeRepeating ("ManualUpdate", 0.5f, 0.5f);
}
// this gets called every frame
public void ManualUpdate() {
foreach (Car car in allCars) {
carOrder[car.GetCarPosition(allCars) - 1] = car;
}
}
}
Fiz como lele disse ai mas nada?
Re: Posiçoes dos carros
Boa noite amigos.
Bom vim aqui no topioco por incrivel que pareça o erro estava nos collideres do carro coloquei o script em um so collisor e funcionou mais as variavez nao mudaram nao estao funcionando
Sera que tem algum erro no script Car?
Bom vim aqui no topioco por incrivel que pareça o erro estava nos collideres do carro coloquei o script em um so collisor e funcionou mais as variavez nao mudaram nao estao funcionando
- Código:
currentWaypoint = 0;
currentLap = 0;
cpt_waypoint = 0;
Sera que tem algum erro no script Car?
Re: Posiçoes dos carros
Resolvido ajustei os scripts e agora funciona.
So nao pode deixar as variavez em 0 ela nao adiciona o ++,
vejam os scripts ai.
Coloquei Text no script RaceManager para podemos ver a mudanças de posiçoes dos carros.
So nao pode deixar as variavez em 0 ela nao adiciona o ++,
vejam os scripts ai.
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class Car : MonoBehaviour {
private RaceManager rc;
public int noChecks;//Checandor colisor
public int currentWaypoint;//Waypoint atual
public int currentLap;//Volta na pista atual
public Transform lastWaypoint;//Waypoint chegada
public int nbWaypoint; //Quantidade de Waypoints
private static int WAYPOINT_VALUE = 100;
private static int LAP_VALUE = 10000;
private int cpt_waypoint = 0;
void Start() {
currentWaypoint = 1;
currentLap = 1;
cpt_waypoint = 0;
noChecks = GameObject.Find("Checkpoints").transform.childCount;
rc = GameObject.FindObjectOfType<RaceManager> ();
}
void Update () {
if(currentWaypoint > noChecks){
currentLap++;
currentWaypoint = 1;
}
if(currentLap >= nbWaypoint){//Termina corrida
Time.timeScale = 0;
}
if(currentLap >= rc.LapRace){//Acabou corrida
Debug.Log("Acabou");
}
}
// Use this for initialization
public void OnTriggerEnter(Collider other) {
if(other.name == currentWaypoint.ToString()){
currentWaypoint++;
if (currentWaypoint == 1 && cpt_waypoint == nbWaypoint) { // completed a lap, so increase currentLap;
currentLap++;
cpt_waypoint = 0;
}
if (cpt_waypoint == currentWaypoint - 1) {
lastWaypoint = other.transform;
cpt_waypoint++;
}
}
}
public float GetDistance() {
return (transform.position - lastWaypoint.position).magnitude + currentWaypoint * WAYPOINT_VALUE + currentLap * LAP_VALUE;
}
public int GetCarPosition(Car[] allCars) {
float distance = GetDistance();
int position = 1;
foreach (Car car in allCars) {
if (car.GetDistance() > distance)
position++;
}
return position;
}
}
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine.UI;
public class RaceManager : MonoBehaviour {
public int LapRace = 2;// quantidade devoltas
public Car[] allCars;//Carros
public Car[] carOrder;//horde dos carros
public Text[] texPos;
private int rcAtual;
public void Start() {
// set up the car objects
carOrder = new Car[allCars.Length];
InvokeRepeating ("ManualUpdate", 0.5f, 0.5f);
}
// this gets called every frame
public void ManualUpdate() {
if(rcAtual < carOrder.Length){
foreach (Car car in allCars) {
carOrder[car.GetCarPosition(allCars) - 1] = car;
texPos[car.GetCarPosition(allCars) - 1].text = car.ToString();
}
}
}
}
Coloquei Text no script RaceManager para podemos ver a mudanças de posiçoes dos carros.
Tópicos semelhantes
» -[SCRIPT DE POSIÇÕES ]-
» (Duvida) Instantiate e posiçoes
» apagar posicoes ao morrer
» Movimentar inimigo em posições aleatorias
» [Dúvida] posições de objetos e âncora
» (Duvida) Instantiate e posiçoes
» apagar posicoes ao morrer
» Movimentar inimigo em posições aleatorias
» [Dúvida] posições de objetos e âncora
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos