• 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
Prendere e Tirare " Palla "
#1
Salve ragazzi, dopo varie idee , sono arrivata alla definitiva e sto sviluppando il mio primo gioco 2D con UNITY.
E' il mio primo gioco con esso, prima usavo il Cry Engine.
Il gioco che sto facendo è formato da Sprite, Box Collider, Circle Collider e RigidBody.
Ho un problema con uno script.
Devo fare uno script che prende un oggetto chiamato palla lo posiziona a destra e a sinistra del personaggio a seconda della sua direzione e poi premendo un tasto il personaggio tira la palla.
Come teoria ho pensato di mettere un Trigger al Personaggio , quando il Trigger tocca la palla, al personaggio viene aggiunta essa, il problema e che non so aggiungere sta ***** di " palla ". Mi sto dannando.
Ho provato vari metodi.

L'ultimo è questo.

public class Grab : MonoBehaviour {
private GameObject player;
void OnTriggerEnter2D (Collider2D Ball) {


if (GameObject.FindWithTag ("Ball"))

GetComponent<Ball> ();
}

}

Siccome GetComponent prende solo GameObject, ho creato un file chiama Ball con semplicemente questo e assegnato alla palla.
public class Ball : MonoBehaviour {

private GameObject ball;
// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}
}
Mi aiutate per piacere?
 
Rispondi
#2
Adesso finalmente sono riuscito ad agganciarlo al personaggio.
Era la ***** di variabile che doveva essere pubblica, quella *****. XD XD.
Ho il problema che non lo segue, rimane li.
Come faccio?
Devo posizionare la palla a destra o sinistra del personaggio a seconda della sua direzione.

Questo accade perchè la palla ha un RigidBody2D , precisamente è formata in questo modo.
1) http://i.gyazo.com/4f894e3dc8ed9bb5f3b7cff11f50956a.png
2) http://i.gyazo.com/b23dd176a6fada82efdaecdf632ebda6.png


UPDATE : Ho cercato di risolvere in questo modo.
1) http://i.gyazo.com/99f89f0441f12d10bb85943e3283f837.png
2) http://i.gyazo.com/142f93048578c0cc9af1327206345fbe.png

Ora il primo problema è risolto, ma è uscito un altro problema.
Unity assegna con lo Script la Palla solo con Circle Collider al Personaggio, ma rimane la Palla con RigidBody2D e Circle Collider, e quando tocco questo oggetto ora invisibile sono sottoposto alla sua massa e alla sua fisica.


P.S
E non sto pensando ancora a lanciare la palla.
Credo che per tirare la palla, deve avere un RigidBody2D.
Quindi sarà un altro problema.
Ma sto andando a STEP.

Ok, penso di aver risolto il problema, in questo modo
Code (CSharp):
public class Grab : MonoBehaviour {
public GameObject player;
public GameObject BallDestroyed;

void OnTriggerEnter2D (Collider2D other)
{
if (other.CompareTag ("Ball"))
{
other.transform.parent = player.transform;
Destroy (BallDestroyed);

// might want to set ball rigidbody to kinematic here also
}
}

}
Ora la palla con il RigidBody2D e Circle Collider viene eliminato quando prendo la Palla.
Ora devo metterla a destra e la sinistra del personaggio.
Come faccio?
 
Rispondi
#3
Sei sottoposto alla fisica dell'oggetto genitore, per evitare questo problema si crea una variabile, dopo ti memorizzi la posizione della palla e da li fai tutti i calcoli necessari..

Crea una variabile di questo tipo:
Public Transform Ball;

Nella funzione Start o Awake (Dipende quale usi) inserisci questa piccola istruzione:
Ball = Gameobject.Find("Palla").transform;
(In questo modo abbiamo assegnato alla variabile Ball, l'oggetto nella scena che si chiama "Palla")

Dopo di che vai Update e inserisci questa istruzione:
transform.position = Ball.transform.position;
(In questo modo l'oggetto in cui è attaccato questo script avrà coordinate nella scena pari a quelle di Ball)

Per mettere un oggetto accanto ad un altro puoi fare così:
transform.position = Ball.transform.position + new Vector3(5,0,0);
(In questo modo questo oggetto avrà le stesse coordinate di Ball ma sarà traslato di 5 nell'asse X)

Basta mettere un if che controlla la rotazione e hai finito ^^

Questo è un piccolo esempio che puoi gestirti molto facilmente..
 
Rispondi
#4
(20-02-2015, 03:46 PM)Ardito Ha scritto: Sei sottoposto alla fisica dell'oggetto genitore, per evitare questo problema si crea una variabile, dopo ti memorizzi la posizione della palla e da li fai tutti i calcoli necessari..

Crea una variabile di questo tipo:
Public Transform Ball;

Nella funzione Start o Awake (Dipende quale usi) inserisci questa piccola istruzione:
Ball = Gameobject.Find("Palla").transform;
(In questo modo abbiamo assegnato alla variabile Ball, l'oggetto nella scena che si chiama "Palla")

Dopo di che vai Update e inserisci questa istruzione:
transform.position = Ball.transform.position;
(In questo modo l'oggetto in cui è attaccato questo script avrà coordinate nella scena pari a quelle di Ball)

Per mettere un oggetto accanto ad un altro puoi fare così:
transform.position = Ball.transform.position + new Vector3(5,0,0);
(In questo modo questo oggetto avrà le stesse coordinate di Ball ma sarà traslato di 5 nell'asse X)

Basta mettere un if che controlla la rotazione e hai finito ^^

Questo è un piccolo esempio che puoi gestirti molto facilmente..


Ho risolto nello stesso giorno dopo 3-4 ore la creazione di questo Thread con un algoritmo ancora migliore.
Si può chiudere.
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Aiuto pong rimbalzo palla samuele55598@gmail.com 1 362 17-04-2017, 11:36 AM
Ultimo messaggio: carloss

Vai al forum:


Browsing: 1 Ospite(i)