Creare Videogiochi - Game Developer
Script basilare per il movimento tramite fisica - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Unity3D Italia (https://www.making-videogames.net/giochi/Forum-Unity3D-Italia)
+--- Forum: Richieste di Aiuto per Unity 3D (https://www.making-videogames.net/giochi/Forum-Richieste-di-Aiuto-per-Unity-3D)
+--- Discussione: Script basilare per il movimento tramite fisica (/thread-Script-basilare-per-il-movimento-tramite-fisica)



Script basilare per il movimento tramite fisica - samuele55598@gmail.com - 19-11-2015

Sempre il solito imbecille di ritorno alle basi delle basi, muovere uno sprite in alto e basso, ma per ora ho scritto un codice che dovrebbe essere corretto, ma non fa ciò che voglio
[Immagine: 335fekm.png]
[Immagine: 2mmi73r.png]


RE: Script basilare per il movimento tramite fisica - Chip - 20-11-2015

Perché aggiungi la forza? Poi quanto è la massa del corpo rigido? Non era meglio lavorare con la velocity del corpo rigido?

Codice:
GetComponent<Rigidbody2D>().velocity = new Vector2(0, walk_speed);



RE: Script basilare per il movimento tramite fisica - samuele55598@gmail.com - 21-11-2015

Altre volte usavo la forza, e modificando un pò la massa del gameobject funzionava, ora no. Con velocity inserito nel codice di sopra, al posto di addForce, l'oggetto comincia a muoversi alla pressione di w ma continua (logicamente) quindi velocity nel mio caso non va bene, nello specifico sto cercando di muovere una "piattaforma" e come nella realtà si ferma quando io smetto di premere il bottone. E poi se ho la piattaforma e il muro di sopra, dovrebbero collidere in quanto entrambi hanno collider e rigidbody (entrambi kinematici perchè non devono cadere per effetto della gravità) ma nulla si compenetrano -.-


RE: Script basilare per il movimento tramite fisica - Chip - 21-11-2015

Per i muri basta che gli dai un box collider, il rigidbody non è necessario visto che non li muovi.
L'unica cosa che dovrebbe avere un rigidbody sono la palla e le racchette, ovvio anche queste dovranno avere una collisione, la palla un circle_collider, le racchette un'altro box collider.

Il pong si può fare in molti modi, sfumature diverse, in base a quanto vuoi gestire tu la fisica o lasciarla gestire a unity.

Vedo un 1 sulle Gravity Scale?


RE: Script basilare per il movimento tramite fisica - Master Gabriel - 22-11-2015

Ma fare un
Codice:
if(Input.GetKeyUp("w")
{
rigidbody2D.velocity.y = 0;
}
per fermare la racchetta quando smetti di premere il tasto?


RE: Script basilare per il movimento tramite fisica - samuele55598@gmail.com - 22-11-2015

Beh ora ci ho pensato un pò e credo che non serva utilizzare la fisica. Un tranform.translate credo andrà bene in fondo è un gioco per me che non dovrò rilasciare, in più parliamo di 2 rettangoli che dovranno muoversi mentre la palla sarà l'unica affetta dalla fisica


RE: Script basilare per il movimento tramite fisica - samuele55598@gmail.com - 30-12-2015

Ricreato per la...non so 30a volta, il pad si muove e la palla pure, anche se non nella direzione voluta, avevo pensato ad un 50/50 tra spingerla a sinistra e giu (quindi Vector.Lerp credo), ma il problema è un pò prima e più importante, con rigidbody.AddForce, al solito non funziona, ho provato con un infinità di modi moltiplicando per Time.deltaTime e per una variabile che ho portato fino a 5000 ma niente da fare, la palla ha rigidbody e collider perchè ricordo che in unity 4 dovevano esserci entrambi affinche il collider funzionasse, non voglio usare velocity perchè esiste addForce e con quella posso spingere la palla in diagonale anziche solo dritta, il codice della palla è questo:
Codice:
using UnityEngine;
using System.Collections;

public class ballBehaviour : MonoBehaviour {

    public float ball_Init_Force=5f;
    //Vector3 startPosition=new Vector3(-0.123f,-0.21f,0.0f);

    void Start () {
        //Spinta della palla
        Rigidbody2D rig=GetComponent<Rigidbody2D>();
        rig.AddForce(Vector2.left*ball_Init_Force*Time.deltaTime);
    }

}
mentre quello del pad è questo (ma credo non abbia molta importanza):
Codice:
using UnityEngine;
using System.Collections;

public class playerMove : MonoBehaviour {

    public float force=5f;
    
    // Update is called once per frame
    void Update ()
    {
        if(Input.GetKey(KeyCode.UpArrow))
            moveUp();

        if(Input.GetKey (KeyCode.DownArrow))
            moveDown();
    }

    void moveUp()
    {
        transform.position+=(Vector3.up*force*Time.deltaTime);
    }

    void moveDown()
    {
        transform.position+=(Vector3.down*force*Time.deltaTime);
    }
}
Sto impazzendo è assurdo, sono riuscito a far spawnare oggeti con i raycast in 3d che credevo fossi impossibile far funzionare i raycast e mi blocco con queste cavolate -.-

Per ora si muove con add force ci sono riuscito, ho messo gravity scale a 0 is kinect false (a quanto pare is kinect non permette il movimento tramite metodi del rigidbody, probabilmente è ovvio ma non per me) ma la variabile moltiplicata (force) ha valore 3000 ed è ancora un pò lenta...