• 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
Spingere altro Giocatore ( SCRIPT )
#1
Salve ragazzi.
Ho un problema con il mio Script.
Ho creato uno Script che spinge un altro Giocatore.
Il problema è che lo spinge sempre verso destra.
Ho attaccato un Circle Collider come Trigger all'oggetto, in questo caso un Player con lo Script.
Come faccio a spingerlo in tutte le direzioni a seconda di dove tocca il cerchio.

Questo è il Codice.

void OnTriggerStay2D (Collider2D other)
{ if (other.attachedRigidbody)
Meele ();

}

void Meele ()
{
if (Input.GetKey ("z")) {
Character.GetComponent<Rigidbody2D> ().AddForce (Vector2.right * throwForce);

}
}
 
Rispondi
#2
Io non sono un'esperto, ma potresti fare tanti gameObject figli di uno, con ciascuno attaccato un collider con una tag diversa, e se il player tocca il collider di destra l'oggetto andrà a sinistra e così tutti gli altri. Lo script verrebbe più o meno così:
---------------------------------------------------------------------------
void OnTriggerStay2D (Collider2D other)
{
if(other.collider.tag == "Destra")
{
Meele();
}

void Meele()
{
if (Input.GetKey ("z")) {
Character.GetComponent<Rigidbody2D> ().AddForce (Vector2.right * throwForce);
}
}
----------------------------------------------------------------------------------
Non so se è giusto, perchè come ti ho già detto prima non sono un'esperto e io di solito uso il javascript, e non il c#. Comunque prova, attacca questo script al collider di destra e prova a vedere, oppure se riesci aggiustalo prima di metterlo. Per qualsiasi problema chiedi Smile
 
Rispondi
#3
(22-02-2015, 06:39 PM)Master Gabriel Ha scritto: Io non sono un'esperto, ma potresti fare tanti gameObject figli di uno, con ciascuno attaccato un collider con una tag diversa, e se il player tocca il collider di destra l'oggetto andrà a sinistra e così tutti gli altri. Lo script verrebbe più o meno così:
---------------------------------------------------------------------------
void OnTriggerStay2D (Collider2D other)
{
if(other.collider.tag == "Destra")
{
Meele();
}

void Meele()
{
if (Input.GetKey ("z")) {
Character.GetComponent<Rigidbody2D> ().AddForce (Vector2.right * throwForce);
}
}
----------------------------------------------------------------------------------
Non so se è giusto, perchè come ti ho già detto prima non sono un'esperto e io di solito uso il javascript, e non il c#. Comunque prova, attacca questo script al collider di destra e prova a vedere, oppure se riesci aggiustalo prima di metterlo. Per qualsiasi problema chiedi Smile


Questo l'ho fatto già io.
E' il mio identico script.
Cerco qualcosa di più "elegante" , facendo con il mio script il personaggio viene tirato diciamo dritto, invece io voglio qualcosa diciamo che aggiunge la forza in modo angolare.
Che tocca un punto del Circle Collider e viene spinto in quella direzione.
Non so se mi sono spiegato.
 
Rispondi
#4
Altrochè se ti sei spiegato, solo che l'ho capito solo adesso. Però ciò supera il mio livello di codice. A questo punto o cerchi su internet o su youtube oppure chiedi a qualcuno più esperto di me in script.
 
Rispondi
#5
(22-02-2015, 07:23 PM)Master Gabriel Ha scritto: Altrochè se ti sei spiegato, solo che l'ho capito solo adesso. Però ciò supera il mio livello di codice. A questo punto o cerchi su internet o su youtube oppure chiedi a qualcuno più esperto di me in script.

Sono sfortunato in questo senso XD XD.
Non trovo nulla su Internet o Youtube riguardo il mio gioco.
Ho dovuto fare tutti gli Script io con le API davanti.
Ho trovato qualcosa di interessante.
Questa classe qui.
http://docs.unity3d.com/ScriptReference/...int2D.html

Rileva il punto della collisione e già si è tolto il problema.
Rimane il problema della spinta in direzione da quel punto.
 
Rispondi
#6
Ci dò un'occhiata, ma non garantisco niente. Però domani, adesso devo andare.
 
Rispondi
#7
(22-02-2015, 07:55 PM)Master Gabriel Ha scritto: Ci dò un'occhiata, ma non garantisco niente. Però domani, adesso devo andare.

Ho fatto questo.
Il problema che non funziona con i Trigger.
Il problema è other.contacts[].point , funziona solo se other è un Collision , Collider.
void OnCollisionStay2D(Collision2D other)
{ if (other.gameObject.CompareTag("Player"))
if (Input.GetKey ("z")) {
Character.GetComponent<Rigidbody2D> ().AddForce (other.contacts [0].point * throwForce);
}
}
 
Rispondi
#8
A me non funziona nemmeno così come l'hai fatto tu. A te funziona?
 
Rispondi
#9
(23-02-2015, 09:03 AM)Master Gabriel Ha scritto: A me non funziona nemmeno così come l'hai fatto tu. A te funziona?

Certo. Solo che il Box Collider non è un Trigger ma una collisione , quindi non è invisibile ......
 
Rispondi
#10
Ma a te lo spinge dritto o non lo spinge proprio?
 
Rispondi
#11
(23-02-2015, 03:02 PM)Blackg96 Ha scritto: Ma a te lo spinge dritto o non lo spinge proprio?

Mi sembra di aver spiegato tutto nei post Precedenti.
Con l'ultimo script lo spinge verso la direzione in cui ha toccato il Circle Collider ma il problema è che non è ISTRIGGER , perchè other.contacts[].point , funziona solo se other è un Collision.
Se non hai capito, il problema che essendo NOTRIGGER, gli elementi della mappa sono soggetti alla sua fisica.
 
Rispondi
#12
Ah! Ho capito! Solo che non so come aiutarti...
 
Rispondi
#13
void OnTriggerEnter2D(Collider2D other) {
Vector3 direction = Vector3.zero;
int randomdir = Random.Range(0, 3);
if(randomdir == 0) dir = Vector3.up; else if(randomdir == 1) dir = Vector3.down; else if(randomdir == 2) dir = Vector3.left; else if(randomdir == 3) dir = Vector3.right;
rigidbody.AddForce(dir * 1000);
}

Prova così ma non ti assicuro niente Smile
 
Rispondi
#14
(24-02-2015, 02:30 PM)Blackg96 Ha scritto: void OnTriggerEnter2D(Collider2D other) {
Vector3 direction = Vector3.zero;
int randomdir = Random.Range(0, 3);
if(randomdir == 0) dir = Vector3.up; else if(randomdir == 1) dir = Vector3.down; else if(randomdir == 2) dir = Vector3.left; else if(randomdir == 3) dir = Vector3.right;
rigidbody.AddForce(dir * 1000);
}

Prova così ma non ti assicuro niente Smile

E' molto impreciso, come miglioro la precisione?
void OnTriggerStay2D(Collider2D other) {
if (other.gameObject.CompareTag("Player"))
{ if (Input.GetKey ("z")) {
int randomdir = Random.Range(0, 3);
if(randomdir == 0) {
dir = Vector3.up; }
else if(randomdir == 1) {
dir = Vector3.down; }
else if(randomdir == 2) {
dir = Vector3.left; }
else if(randomdir == 3) {
dir = Vector3.right;}
other.GetComponent<Rigidbody2D>().AddForce(dir * throwForce);
}
}
}
 
Rispondi
#15
Ragazzi su Unity Forum mi hanno risposto di usare questo.
var Direction : Vector3 = contact.transform.position - transform.position;

Che modifiche devo fare al codice per usare quello?
Che ancora non riesco a capire.
 
Rispondi
#16
UP UP UP.
Raga il progetto l'avevo abbandonato.
Causa , PROGETTI INFORMATICA, Studio e cazzi VARI.
Tra poco lo rinizio.
Cerco anche collaboratori ...
Comunque qualcuno ha qualche idea?
 
Rispondi
#17
Quel pezzo di codice che ti hanno consigliato, fa si che quando avviene un contatto con il box collider, l'oggetto in questione viene spostato /spinto/stampato nella direzione in cui è avvenuto il contatto.
Può essere usato in molti modi, vector3 è una delle funzioni vitali a parer mio, una delle più importanti.
Ti consiglio di dare un occhio alle api di unity, è spiegato tutto molto bene e molto dettagliatamente, inoltre trovi mille esempi su come usarlo.
 
Rispondi
#18
(10-06-2015, 01:06 AM)nostopsocial Ha scritto: Quel pezzo di codice che ti hanno consigliato, fa si che quando avviene un contatto con il box collider, l'oggetto in questione viene spostato /spinto/stampato nella direzione in cui è avvenuto il contatto.
Può essere usato in molti modi, vector3 è una delle funzioni vitali a parer mio, una delle più importanti.
Ti consiglio di dare un occhio alle api di unity, è spiegato tutto molto bene e molto dettagliatamente, inoltre trovi mille esempi su come usarlo.

Potresti scrivermi l'intero Script?
 
Rispondi
#19
Ci vai pesante ehhh ahahaha potrei ma non voglio: primo perche quello che ho in mente io probabilmente non è quello che hai in mente tu, il gioco è TUO non mio, sarebbe tutto diverso. Secondo, guarda che se non cerchi e se non ti applichi con le tue forze non imparerai mai.

Ti ho detto che Unity è uno degli engine che possiede la più grande documentazione a differenza degli altri (e forse è per la sua semplicità d'uso e per questo fattore ha fatto la sua fortuna)....Cerca ci saranno più di 3 mila esempio su ogni singola API, a momenti il gioco te lo fanno loro! AHAH
 
Rispondi
#20
Lol comunque prova tracciando un vettore che ha come direzione il punto di collisione di A che va contro B (con B che deve respingere A, insomma cerca di capire xD) e poi metti un Rigidbody.addforce(come direzione il vettore prima calcolato). Non so se si possa fare è solo concettualmente ma a quanto so io un vettore può partire da un punto K a un punto J senza problemi quindi perchè non scegliere dall'oggetto B a quello A che vi collide contro?, tuttavia io la penso così: ogni idea è buona. Poi in tutto questo papiro di conversazione è anche probabile che leggendo questo messaggio tu scleri' tuttavia....prova
 
Rispondi
#21
Il papiro e lo sclero erano evitabili se avesse cercato sulle API...Tranquillo è tutto normale, poi capirai che fai più velocemente a cercarti le cose da solo, piuttosto che chiedere qui....Vedrai che il forum lo userai solo come ultima speranza poco prima dello sclero! AHAH
 
Rispondi
  


Vai al forum:


Browsing: 1 Ospite(i)