Messaggi: 813
Discussioni: 74
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2012
Reputazione:
4
10-01-2016, 03:44 PM
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?
Messaggi: 124
Discussioni: 8
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Mar 2015
Reputazione:
3
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?
Messaggi: 813
Discussioni: 74
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2012
Reputazione:
4
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
Messaggi: 124
Discussioni: 8
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Mar 2015
Reputazione:
3
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) ?
Messaggi: 183
Discussioni: 10
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Apr 2013
Reputazione:
0
Puoi postare il codice in cui instanzi il proiettile?
Messaggi: 813
Discussioni: 74
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2012
Reputazione:
4
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);
}
}
Messaggi: 183
Discussioni: 10
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Apr 2013
Reputazione:
0
Prova con spawn.localrotation comunque per i proiettili e consigliato usare dei raycast invece di instanziare gameobject
Messaggi: 813
Discussioni: 74
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2012
Reputazione:
4
Ok grazie mille provo e ti faccio sapere