Carro dá spawn no ar
3 participantes
Página 1 de 1
Carro dá spawn no ar
No jogo de carros que estou a desenvolver, quando aperto o play, o carro dá spawn no ar e cai e começa a rodar, mas depois para.
No Inspetor apenas tenho o Rigidbody e o scrip para movimentar.
No Rigidbody a massa está a 1200, e tenho a opção use Gravity selecionada. Já experimentei deixar tudo sem seleção mas mesmo assim o erro continua.
O que pode ser?
No Inspetor apenas tenho o Rigidbody e o scrip para movimentar.
No Rigidbody a massa está a 1200, e tenho a opção use Gravity selecionada. Já experimentei deixar tudo sem seleção mas mesmo assim o erro continua.
O que pode ser?
patriicia- Iniciante
- PONTOS : 1254
REPUTAÇÃO : 1
Idade : 22
Respeito as regras :
Re: Carro dá spawn no ar
Qual é o erro? spawnar no ar? se for isso, provavelmente você só está usando o Instantiate sem passar uma posição específica pro objeto "nascer", então ele aparece na posição 0,0,0. O que deve ser um pouco acima do seu cenário.
Num jogo de corrida, você vai querer que os carros spawnem em uma posição no grid de largada, pra isso você coloca objetos vazios nessas posições, e depois que fizer o Instantiate(), você passa a posição de um desses objetos pro carro;
Num jogo de corrida, você vai querer que os carros spawnem em uma posição no grid de largada, pra isso você coloca objetos vazios nessas posições, e depois que fizer o Instantiate(), você passa a posição de um desses objetos pro carro;
- Código:
public Transform pontoSpawn;
public GameObject prefabCarro;
private void Start()
{
GameObject carro = Instantiate(prefabCarro);
carro.transform.position = pontoSpawn.position;
carro.transform.rotation = pontoSpawn.rotation;
}
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Carro dá spawn no ar
No editor o carro está no chão, mas só quando dou play é que ele vai para o ar. Antes não o fazia.
Este é o código que estou a utilizar para o carro.
Este é o código que estou a utilizar para o carro.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class moverCarro : MonoBehaviour
{
//VARIAVEIS
public WheelCollider[] comandar; //Lista de Colliders das rodas
Gestor[] ComandarRodas;
//para guiar e acelarar
float guiar = 0f;
float acelaracao = 0f;
//controlar fisica e animação das rodas
Rigidbody _rigidbody;
public AnimationCurve curvarRoda;
//adicionar forças
public float forca;
public float forcaTravagem;
public Vector3 forcaFinal;
//velocidade e rotações
float velocidadeKM;
float rotacoes;
public float rotacaoMax;
public float rotacaoMin;
//mudanças
public float[] mudarMudanca;
int mudAtual = 0;
//Massa
public Transform massa;
void Start()
{
_rigidbody = GetComponent<Rigidbody>(); //vai buscar a fisica para podermos controlar
_rigidbody.centerOfMass = massa.position; //vai aplicar a massa numa posição
//Este evento vai alterar a forma como as rodas funcionam em diferentes solos
ComandarRodas = new Gestor[comandar.Length];
for(int i=0; i < comandar.Length; i++)
{
ComandarRodas[i] = comandar[i].GetComponent<Gestor>();
}
}
//Esta função vai colocar o carro a acelerar no eixo Vertical e a ser guiado no eixo Horizontal
void Update()
{
guiar = Input.GetAxis("Horizontal");
acelaracao = Input.GetAxis("Vertical");
}
void FixedUpdate()
{
//Evento para controlar o carro ou seja para o comandar/guiar
for (int i = 0; i < comandar.Length; i++)
{
comandar[i].steerAngle = guiar * curvarRoda.Evaluate(velocidadeKM);
comandar[i].motorTorque = 1f;
}
//VELOCIDADE E ROTAÇÕES
velocidadeKM = _rigidbody.velocity.magnitude * 3.6f;
rotacoes = velocidadeKM * mudarMudanca[mudAtual] * 15f;
//MUDANÇAS
//neste ciclo se as rotações forem maiores que o limite max, este ciclo vai fazer o carro trocar de mudança para uma mais baixa
if (rotacoes > rotacaoMax)
{
mudAtual++;
if (mudAtual == mudarMudanca.Length)
{
mudAtual--;
}
}
//neste ciclo se as rotações forem maiores que o limite max, este ciclo vai fazer o carro trocar de mudança para uma mais alta
if (rotacoes < rotacaoMin)
{
mudAtual--;
if (mudAtual<0)
{
mudAtual = 0;
}
}
//FORÇA
if (acelaracao < -0.5f)
{
_rigidbody.AddForce(-transform.forward * forcaTravagem);
acelaracao = 0;
}
forcaFinal = transform.forward * (forca / (mudAtual + 1) + forca / 1.5f) * acelaracao;
_rigidbody.AddForce(forcaFinal);
}
void OnGUI()
{
GUI.Label(new Rect(20, 20, 128, 32), rotacoes + "ROTAÇÕES");
GUI.Label(new Rect(20, 40, 128, 32), (mudAtual+1).ToString());
GUI.Label(new Rect(20, 80, 128, 32), velocidadeKM + "KM/H");
GUI.Label(new Rect(20, 60, 128, 32), forcaFinal.magnitude.ToString());
}
}
patriicia- Iniciante
- PONTOS : 1254
REPUTAÇÃO : 1
Idade : 22
Respeito as regras :
Re: Carro dá spawn no ar
Se o carro anda pelo ar, provavelmente é alguma configuração relacionada ao tamanho dos colisores, possilvemente eles estão maiores do que o modelo 3d...patriicia escreveu:No editor o carro está no chão, mas só quando dou play é que ele vai para o ar. Antes não o fazia.
Este é o código que estou a utilizar para o carro.
Tópicos semelhantes
» Como faço pro carro só se mover quando eu engra no carro?
» Rodas do carro nao ficao presas ao carro
» Duvida com spawn de IA
» Spawn SlenderMan
» Menu de Spawn
» Rodas do carro nao ficao presas ao carro
» Duvida com spawn de IA
» Spawn SlenderMan
» Menu de Spawn
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos