• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Problemi di assi su Unity
#1
Wink 
Carissimi, ho un piccolo grande problema. Allora su Unity mi capita spesso che quando metto due oggetti nelle stesse coordinate appaiono in due posizioni diverse(Ovviamente oggetti non imparentati fra loro). Il che è fastidioso, per esempio provando ad usare un gameobject vuoto come spawn di un proiettile sulla bocca della canna di un fucile il proiettile viene istanziato a 10 - 20m traslato in tutti e tre gli assi? Qualcuno mi può aiutare?
 
Rispondi
#2
Possibile che il proiettile abbia un pivot spostato (e quindi non impostato al centro della mesh)? Oppure è un problema tra posizioni locali (quindi relative al parent) e globali?
 
Rispondi
#3
io credo sia globale perchè oggetti con stesse coordinate hanno posizioni diverse non penso sia un problema della mesh perchè qualche volta ha funzionato che spawnasse giusto poi niente sempre sbagliato e non so cosa possa creare questo problema
 
Rispondi
#4
Per istanziare il proiettile usi come coordinate spawner.transform.position (in cui spawner deve essere il GameObject da dove partirà il proiettile, quindi diciamo che potrebbe essere un gameobject vuoto alla fine della canna del fucile) ?
 
Rispondi
#5
Puoi postare il codice in cui instanzi il proiettile?
 
Rispondi
#6
Si allora vi mando il codice. Si Davi esattamente


using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Spar_Caspiterina : MonoBehaviour {
public Rigidbody Bullet;
public Rigidbody Boss , Rel_;
public Transform Boss_spawn;
public Transform Spawn;
private int CurrentCartridge = 8;
private int CurrentAmmo = 32;
private int MaxCartridge = 8;
private Animation Anima;
public string Fire , Rel , End_Fire;
public GameObject Bull;
public bool Ended;
public AudioClip Reload;
public Transform Aim_Pos , Normal_pos;
public float A , B;
public ParticleSystem Fires;
public GameObject Garand;
private Rigidbody BulletInstance;
private Rigidbody BossInstance;
private Rigidbody RelInstance;
void Start ()
{
Fires.Stop ();
}

// Update is called once per frame
void Update ()
{
//Aim ();
Fuoco();
Ricarica ();
}
void Aim()
{
if (Input.GetMouseButton (1)) {
Garand.transform.localPosition = Vector3.Lerp (transform.localPosition, Aim_Pos.position, 0.1f);
Garand.transform.localRotation = Quaternion.Slerp (transform.localRotation, Aim_Pos.rotation, 0.1f);
}
else
{
Garand.transform.localPosition = Vector3.Lerp (transform.localPosition, Normal_pos.position, 0.1f);
Garand.transform.localRotation = Quaternion.Slerp (transform.localRotation, Normal_pos.rotation, 0.1f);
}
}
void Fuoco()
{
if (Input.GetMouseButtonDown (0) && CurrentCartridge > 0 && Garand.GetComponent<Animation>().isPlaying==false)
{PlayerPrefs.SetInt("Fire" , 1);
Fires.Play();
CurrentCartridge --;
BulletInstance = Instantiate(Bullet, Spawn.position, Spawn.rotation) as Rigidbody;
BulletInstance.AddForce(Spawn.forward * 5000);
print(BulletInstance.position.ToString());
BossInstance = Instantiate(Boss, Boss_spawn.position, Boss_spawn.rotation) as Rigidbody;
BossInstance.AddForce(Boss_spawn.forward * 5);
print(BossInstance.position.ToString());
Anima = Garand.GetComponent<Animation>();
Anima.Play(Fire);
StartCoroutine(DSTR());

}

if (Input.GetMouseButtonDown (0) && CurrentCartridge == 0 && Ended == false)
{
PlayerPrefs.SetInt("Fire" , 0);
Ended = true;
Anima = Garand.GetComponent<Animation>();
Anima.Play(End_Fire);
BossInstance = Instantiate(Boss, Boss_spawn.position, Boss_spawn.rotation) as Rigidbody;
BossInstance.AddForce(Boss_spawn.forward * 5);
StartCoroutine(Spwn());
}

}
void Ricarica()
{
if (Input.GetKeyDown(KeyCode.R) && CurrentCartridge == 0 && CurrentAmmo >0)
{
Garand.GetComponent<AudioSource>().clip = Reload;
Garand.GetComponent<AudioSource>().Play();
Anima = Garand.GetComponent<Animation>();
Anima.Play(Rel);
Ended = false;
if(CurrentAmmo < (MaxCartridge - CurrentCartridge))
{
CurrentCartridge = CurrentCartridge + CurrentAmmo;
CurrentAmmo = 0;

}
else

{
CurrentAmmo = (CurrentCartridge - MaxCartridge) + CurrentAmmo;
CurrentCartridge = MaxCartridge;

}

}
}
IEnumerator Spwn()
{
yield return new WaitForSeconds (0.9f);
RelInstance = Instantiate(Rel_, Boss_spawn.position, Boss_spawn.rotation) as Rigidbody;
RelInstance.AddForce(Boss_spawn.forward * 5);
}
void OnGUI()
{
GUI.Label(new Rect(A, B, 200, 190) , CurrentCartridge.ToString() + " | " + CurrentAmmo.ToString());
}
IEnumerator DSTR()
{
yield return new WaitForSeconds(5);
Destroy(BulletInstance);
Destroy(BossInstance);
}
}
 
Rispondi
#7
Prova con spawn.localrotation comunque per i proiettili e consigliato usare dei raycast invece di instanziare gameobject
 
Rispondi
#8
Ok grazie mille provo e ti faccio sapere
 
Rispondi
#9
Senza indentazione la leggibilità muore, così come gli occhi di chi cerca di leggere.
Perché non ci riprovi, magari adoperando l'apposito tag code?

Codice:
int main()
{
  return 0;
}
 
Rispondi
#10
Ah Ok Scusa :p
Codice:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Spar_Caspiterina : MonoBehaviour {
public Rigidbody Bullet;
public Rigidbody Boss , Rel_;
public Transform Boss_spawn;
public Transform Spawn;
private int CurrentCartridge = 8;
private int CurrentAmmo = 32;
private int MaxCartridge = 8;
private Animation Anima;
public string Fire , Rel , End_Fire;
public GameObject Bull;
public bool Ended;
public AudioClip Reload;
public Transform Aim_Pos , Normal_pos;
public float A , B;
public ParticleSystem Fires;
public GameObject Garand;
private Rigidbody BulletInstance;
private Rigidbody BossInstance;
private Rigidbody RelInstance;
void Start ()
{
Fires.Stop ();
}

// Update is called once per frame
void Update ()
{    
//Aim ();
Fuoco();
Ricarica ();
}
void Aim()
{
if (Input.GetMouseButton (1)) {
Garand.transform.localPosition = Vector3.Lerp (transform.localPosition, Aim_Pos.position, 0.1f);
Garand.transform.localRotation = Quaternion.Slerp (transform.localRotation, Aim_Pos.rotation, 0.1f);
}
else
{
Garand.transform.localPosition = Vector3.Lerp (transform.localPosition, Normal_pos.position, 0.1f);
Garand.transform.localRotation = Quaternion.Slerp (transform.localRotation, Normal_pos.rotation, 0.1f);
}
}
void Fuoco()
{
if (Input.GetMouseButtonDown (0) && CurrentCartridge > 0 && Garand.GetComponent<Animation>().isPlaying==false)
{PlayerPrefs.SetInt("Fire" , 1);
Fires.Play();
CurrentCartridge --;
BulletInstance = Instantiate(Bullet, Spawn.position, Spawn.rotation) as Rigidbody;
BulletInstance.AddForce(Spawn.forward * 5000);
print(BulletInstance.position.ToString());
BossInstance = Instantiate(Boss, Boss_spawn.position, Boss_spawn.rotation) as Rigidbody;
BossInstance.AddForce(Boss_spawn.forward * 5);
print(BossInstance.position.ToString());
Anima = Garand.GetComponent<Animation>();
Anima.Play(Fire);
StartCoroutine(DSTR());

}

if (Input.GetMouseButtonDown (0) && CurrentCartridge == 0 && Ended == false)
{
PlayerPrefs.SetInt("Fire" , 0);
Ended = true;
Anima = Garand.GetComponent<Animation>();
Anima.Play(End_Fire);
BossInstance = Instantiate(Boss, Boss_spawn.position, Boss_spawn.rotation) as Rigidbody;
BossInstance.AddForce(Boss_spawn.forward * 5);
StartCoroutine(Spwn());
}

}
void Ricarica()
{
if (Input.GetKeyDown(KeyCode.R) && CurrentCartridge == 0 && CurrentAmmo >0)
{
Garand.GetComponent<AudioSource>().clip = Reload;
Garand.GetComponent<AudioSource>().Play();
Anima = Garand.GetComponent<Animation>();
Anima.Play(Rel);
Ended = false;
if(CurrentAmmo < (MaxCartridge - CurrentCartridge))
{
CurrentCartridge = CurrentCartridge + CurrentAmmo;
CurrentAmmo = 0;

}
else

{
CurrentAmmo = (CurrentCartridge - MaxCartridge) + CurrentAmmo;
CurrentCartridge = MaxCartridge;

}

}
}
IEnumerator Spwn()
{
yield return new WaitForSeconds (0.9f);
RelInstance = Instantiate(Rel_, Boss_spawn.position, Boss_spawn.rotation) as Rigidbody;
RelInstance.AddForce(Boss_spawn.forward * 5);
}
void OnGUI()
{
GUI.Label(new Rect(A, B, 200, 190) , CurrentCartridge.ToString() + " | " + CurrentAmmo.ToString());
}
IEnumerator DSTR()
{
yield return new WaitForSeconds(5);
Destroy(BulletInstance);
Destroy(BossInstance);
}
}
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Panoramica sulla parte grafica per la creazione di un vg in Unity Peas 3 558 05-12-2016, 01:36 PM
Ultimo messaggio: Blackg96
  Unity lentissimo su maos yosemite antolepore 1 479 25-09-2016, 10:24 AM
Ultimo messaggio: antolepore
  Due problemi con Unity 93sunderland 6 799 19-04-2016, 09:06 AM
Ultimo messaggio: 93sunderland
Sad Problemi nel build del gioco MrCraft99x5 1 572 19-02-2016, 09:06 AM
Ultimo messaggio: Master Gabriel
  Errore nell'importazione di un FBX creato con Cinema4D in Unity SteeBono 4 972 22-10-2015, 12:28 PM
Ultimo messaggio: SteeBono
  Luci pesanti su gioco VR per Android con Unity Refref1990 1 884 13-08-2015, 11:20 PM
Ultimo messaggio: eoasier
  Teletrasportare un oggetto su unity 3d? zodanilbello 25 2,965 04-01-2015, 10:25 PM
Ultimo messaggio: zodanilbello
  Problemi con personaggio catun22 6 1,478 21-12-2014, 11:05 AM
Ultimo messaggio: Master Gabriel
  Come potrei creare dialoghi su Unity 3D? Biagino 3 1,402 13-09-2014, 01:08 PM
Ultimo messaggio: Chip
  Domanda su animazioni in Unity.. Biagino 5 1,716 07-09-2014, 02:20 PM
Ultimo messaggio: Blackg96

Vai al forum:


Browsing: 1 Ospite(i)