• 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
Collider....che non collide
#1
Ciao a tutti, beh vi sembrerà strano ma è così, non è la prima volta che mi succede ed è mooolto strano, ma non ho toccato molte impostazioni di collider e rb del player. Beh se il player va "troppo veloce" quest'ultimo trapassa il muro (non solo quello di sinistra ma anche quello di destra). Sto lavorando in 2d comunque quindi collider e rb 2d ovviamente non so da cosa possa esser dato, le collisioni funzionano ma non se va troppo veloce, e come se lo attraversa tutto insieme senza poter fare tipo mezzo fuori e mezzo dentro, ma lo attraversa tutto insieme ecco.
 
Rispondi
#2
Potresti fare uno script che arrivato ad una certa transform.position (o quando entra in un trigger) ferma l'oggetto ad esempio impostando la velocità del rb a 0 (ovviamente dipende dalle circostanze nella quale serve ciò quindi magari non ti è nemmeno molto utile come cosa)
 
Rispondi
#3
beh ma è molto strano comunque, e non cerco una soluzione in codice ma una soluzione al problema, in quanto lo considero un bug, ma comunque grazie Smile
 
Rispondi
#4
Ah, allora in tal caso hai provato a rendere più grande il collider nella direzione nella quale l'oggetto lo oltrepassa?

Inviato dal mio GT-I9301I utilizzando Tapatalk
 
Rispondi
#5
???Sono un pò perplesso:
1: In che senso nella direzione in cui lo oltrepassa
2: più grande come parlo di collider 2d può essere solo più o meno largo e più o meno alto. Solo con 2d<->2d se si prova a far collidere un 2d con un 3d non funziona, e viceversa Sad
 
Rispondi
#6
Sì, probabilmente non mi sono spiegato bene.
Intendevo dire che se il player o chi per lui oltrepassa il collider lo oltrepassa per le coordinate x o y.
Tu dunque vai ad allargare in quella direzione (nello stesso verso, nella x o nella y) il collider e vedi come si comporta.

Inviato dal mio GT-I9301I utilizzando Tapatalk
 
Rispondi
#7
Controlla nel collider che non funziona che la spunta di check trigger non sia attiva
 
Rispondi
#8
Molto probabilmente il player si muove talmente veloce che, in un solo frame, passa da un lato a l'altro del collider.
Hai provato ad usare Rigidbody2D.MovePosition per il movimento?
Se puoi, posta qui lo script che usi per il movimento del player così da poterti aiutare di più.
 
Rispondi
#9
Lo dava anche a me lo stesso problema, dipendeva da che comando usavo per muovere il player.
 
Rispondi
#10
Ok allora ecco a voi:
Codice:
using UnityEngine;
using System.Collections;

public class player1Move : MonoBehaviour {
    //Public:
    public float force=5f;
    public float force_up=10f;

    //Private:
    Rigidbody2D pl1Rig;

    // Use this for initialization
    void Awake()
    {
        pl1Rig=GetComponent<Rigidbody2D>();
    }
    
    // Update is called once per frame
    void Update ()
    {
        if(Input.GetKey(KeyCode.LeftArrow)||Input.GetKey(KeyCode.A))
            move("left");

        else if(Input.GetKey(KeyCode.RightArrow)||Input.GetKey(KeyCode.D))
            move ("right");

        else if(Input.GetKey(KeyCode.UpArrow)||Input.GetKey(KeyCode.W))
            move ("up");


    }

    void move(string dir){
        switch(dir)
        {
        case "left":
            pl1Rig.AddForce(Vector2.left*force,ForceMode2D.Impulse);
            break;

        case "right":
            pl1Rig.AddForce(Vector2.right*force,ForceMode2D.Impulse);
            break;

        case "up":
            pl1Rig.AddForce(Vector2.up*force_up,ForceMode2D.Impulse);
            break;
        }
    }
}

(04-01-2016, 01:06 PM)Snaptrex Ha scritto: Controlla nel collider che non funziona che la spunta di check trigger non sia attiva

No no, magari fosse così semplice...va be che non sono un esperto di unity ma non arrivo a questi livelli fino ad ora Big Grin
 
Rispondi
#11
Prova a mettere lo switch con gli addforce nel FixedUpdate,la parte di codice riguardante la fisica va sempre messa nel FixedUpdate e mai nell'update altrimenti non viene nemmeno presa in nota
 
Rispondi
#12
Non ha molto senso, forse intendi i se, nel fixedUpdate, perchè fare come dici tu non lo muove proprio se prendo cosa hai detto alla lettera, quindi
Codice:
//tutte le libreria di unity

public class playerMove : MonoBehaviour{
     void Update(){
          if(Input.GetKey(KeyCode.LeftArrow)||Input.GetKey(KeyCode.A))
            move("left");

        else if(Input.GetKey(KeyCode.RightArrow)||Input.GetKey(KeyCode.D))
            move ("right");

        else if(Input.GetKey(KeyCode.UpArrow)||Input.GetKey(KeyCode.W))
            move ("up");
     }

     void FixedUpdate(){
           switch(dir)
        {
        case "left":
            pl1Rig.AddForce(Vector2.left*force,ForceMode2D.Impulse);
            break;

        case "right":
            pl1Rig.AddForce(Vector2.right*force,ForceMode2D.Impulse);
            break;

        case "up":
            pl1Rig.AddForce(Vector2.up*force_up,ForceMode2D.Impulse);
            break;
        }
     }
}
Non ha un senso logico, in quanto non funziona
 
Rispondi
#13
Hai provato ad allargare il collider?

O prova quello o prova a fare uno script che fermi la sfera una volta arrivata ad una certa posizione.
 
Rispondi
#14
Sostituisci void Update() con void FixedUpdate()
 
Rispondi
#15
(04-01-2016, 08:41 PM)davidecreatoreapp Ha scritto: Hai provato ad allargare il collider?

O prova quello o prova a fare uno script che fermi la sfera una volta arrivata ad una certa posizione.

Perchè dovrei farlo? La possibilità di poter collidere con il muro è una prerogativa obbligatoria in quanto rappresenta parte integrante del concept :/ se creo qualcosa per fermarlo prima, che tra parentesi per me si tradurrebbe in un raycast verso la direzione di movimento e in questo momento sto impazzendo non poco per il raycast di mira, ma per non andare troppo off topic, è una soluzione che non va bene per questo caso, e generalmente se non posso collidere direttamente che senso ha?
 
Rispondi
#16
Probabilmente non sono in grado di spiegarmi, non importa, rinuncio. Comunque in caso ti serviva proprio di fermarti alla collisione poteva anche essere tramite un oncollisionenter2d e non tramite la posizione.
 
Rispondi
#17
il problema è che credo che non dovrebbe accadere, ho modificato e messo le chiamate nel FixedUpdate, stesso problema, posso provare a cambiare e spostare l'oggetto tramite rigidbody.velocity
 
Rispondi
#18
Ho fatto una scena di prova e anche a mè dava il tuo problema. l'ho risolto cambiando il Collision Detection del rigidbody del player da Discrete a Continuous.
Questo è lo script che ho usato per il movimento del player:
Codice:
using UnityEngine;
using System.Collections;

public class player1Move : MonoBehaviour {
    //Public:
    public float force=5f;
    public float force_up=10f;
    
    //Private:
    Rigidbody2D pl1Rig;
    
    // Use this for initialization
    void Awake()
    {
        pl1Rig=GetComponent<Rigidbody2D>();
    }
    
    void FixedUpdate ()
    {
        if(Input.GetKey(KeyCode.LeftArrow)||Input.GetKey(KeyCode.A))
            move("left");
        
        else if(Input.GetKey(KeyCode.RightArrow)||Input.GetKey(KeyCode.D))
            move ("right");
        
        else if(Input.GetKey(KeyCode.UpArrow)||Input.GetKey(KeyCode.W))
            move ("up");
        
        
    }
    
    void move(string dir){
        switch(dir)
        {
        case "left":
            pl1Rig.AddForce(Vector2.left*force,ForceMode2D.Impulse);
            break;
            
        case "right":
            pl1Rig.AddForce(Vector2.right*force,ForceMode2D.Impulse);
            break;
            
        case "up":
            pl1Rig.AddForce(Vector2.up*force_up,ForceMode2D.Impulse);
            break;
        }
    }
}
 
Rispondi
#19
Risolto, solo che se mi dovesse ricapitare, e fixo in questo modo, il ciclo di polling per le collisioni in questo modo risulta più frequente-> ho paura che in progetti grandi potrebbe influire sulle performanche. E l'unica soluzione che funziona per ora quindi ok si può chiudere, nonostante ciò concludo: tu cosa ne pensi @Zettamax quanto potrebbe influire sulle performance?
 
Rispondi
#20
In questo modo avrai un grosso impatto sulle performance, infatti il consiglio è quello di utilizzare il Collision Detection impostato su Discrete, e di cambiarlo solo se si verificano dei problemi(come in questo caso).
Se solo il player ha il Collision Detection come Continuous non dovresti avere grossi problemi di performance.
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Domanda sul lag dei collider RoxaSlayer 12 1,472 23-07-2015, 08:00 PM
Ultimo messaggio: WilSoft90
  Problema con controllo per vedere se il tocco è nel collider davidecreatoreapp 4 1,184 17-07-2015, 04:18 PM
Ultimo messaggio: davidecreatoreapp
  Problemuccio con i collider Master Gabriel 2 680 19-01-2015, 09:44 AM
Ultimo messaggio: Master Gabriel
  Problema collider samuele55598@gmail.com 3 852 26-11-2013, 11:06 AM
Ultimo messaggio: WilSoft90
  attivare eventi con i collider NatakuZ 5 961 13-02-2013, 11:52 AM
Ultimo messaggio: NatakuZ

Vai al forum:


Browsing: 3 Ospite(i)