TEM CURSO DE UNITY AQUI KKK...VOU TENTAR TE AJUDAR, MAS GOSTAVA QUANDO A UNITY USAVA JAVASCRIPT.
VAMOS LÁ
void Update()
{
if(Input.GetButtonDown("Fire1")){
Instantiate(Bala, CanoDaArma.transform.position, CanoDaArma.transform.rotation);
}
}
Esse é o código da arma, ele está certo. Ele instancia a bala em um determinado local com uma posição e uma determinada rotacao. O seu Instantiate está certo, entretanto o tranform.rotation que está fazendo referencia a arma pode ser mudado para tranform.Quaternion.identity, creio que seja assim.
Tenta:
Instantiate(Bala, CanoDaArma.transform.position, CanoDaArma.Quaternion.Identity);
public float Velocidade = 20;
// Update is called once per frame
void FixedUpdate()
{
GetComponent<Rigidbody>().MovePosition
(GetComponent<Rigidbody>().position + transform.forward * Velocidade * Time.deltaTime);
}
Esse acima é o seu código.
No caso acima você está pegando o componente Rigidbody e acessando a posição do objeto. Isso é ótimo, dessa forma você tem uma maior colisão dos objetos, mas se você está tendo problemas, você pode tentar isso de outras maneiras já que o script vai estar na bala .Ex.:
private Vector 3 mypos;
void Start(){
}
void Update(){
mypos = transform.position;
mypos.x += 5*Time.deltaTima; // nesse caso a bala só anda no eixo x
transform.position = mypos;
}
Um outro jeito é :
private float velocidade = 35;
void Update(){
transform.Translate(35*Time.deltaTime,0,0); // Esse meio é muito usado, mas tem suas complicações. Aqui ele vai andar 35 metros por segundo. O Time.deltaTime calcula a distância com relação ao tempo e não com relação ao pulso processador.
}
transform.Translate(x , y ,z );
Ok, isso ajuda quando o tira não está saindo em uma direção fixa. Ex. : Quando queremos que uma bala seja instanciada no eixo X da arma, ela será instanciada no eixo X, mas se a arma mudar de posição a bala não muda. Isso ocorre em algumas versões do unity.
Sendo assim, você pode criar uma referencia para a bala. Sabe lá em cima onde você edita as tags para colição, então do lado tem um botão parecido chamado Layer. Nele podemos criar uma tag especial que diz para a engine que certo objeto não colide com outro.
O que pode estar acontecendo é que a bala ta encostando na arma na hora de instanciar. Dependendo da programação que você fizer a bala pode ser destruída só por tocar na arma.
Agora se a bala continuar girando, o problema pode ser no RigidyBody da bala. Na função rigidybody que você adiciona no corpo da bala, você tem uma setinha para baixo, um campo irá se abrir com as funções de posição e rotação. Na rotação desmarque tudo e na direção desmarque o eixo Y para fazer um teste.