• Benvenuto in Making Videogames!
  • Condividi la tua passione!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati



Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Title: Problema variabile (facile) con script e gameobject [RISOLTO]
Modi discussione
#1
Ciao a tutti
Forse quello che sto per scrivere sembrerà stupido, ma non vedo soluzioni...
Quello che devo fare è semplice, ma non so come farlo, vi spiego.

Allora, ad esempio vuoi creare un variabile (variabile pubblica, in cui poi dall'editor colleghi il gameobject desiderato).
Ecco, la domanda è la seguente...
Come faccio a fare la stessa cosa, ma dentro un script?

Cioè, dall'editor la variabile ovviamente appare vuota, e per metterci il gameobject dentro devo trascinare, ma se voglio collegare il gameobject non dall'editor, ma solo da script?


Tutto qui, non credo sia una cosa difficile come ho scritto, ma mi sfugge il modo in cui posso farlo...
Ah lavoro con Java non C#

Spero possiate aiutarmi, ciao!  °-°
 
Reply
#2
Cerco di riassumere perché non ho capito cosa cerchi:
Tu hai un oggetto, ad esso è associato uno script e dentro c'è una variabile public di tipo oggetto (per es un nemico che deve sapere il player da inseguire, preso da manuale)

Codice:
public class Enemy : MonoBehaviour {
    public GameObject player;
    
    void Start() {
        // Start the enemy ten units behind the player character.
        transform.position = player.transform.position - Vector3.forward * 10f;
    }
}

.. che ovviamente sarà visibile dall'inspector
[Immagine: GameObjectPublicVar.png]

Vuoi associare/vedere da un oggetto qualsiasi cosa c'è in quella variabile? Oppure metterci un'altra cosa (il player stesso ma anche un albero) a runtime?

Iniziamo dicendo che ogni script è comunque un oggetto di classe Script e come tale ha attributi e metodi (non chiamiamoli variabili e funzioni). Ogni oggetto può essere cercato per tipo, per nome e una volta raggiunto istanziando una variabile ad hoc è possibile col "." raggiungere i suoi attributi (le variabili) e i metodi (le funzioni).
https://docs.unity3d.com/ScriptReference/Object.html
https://www.youtube.com/watch?v=XeOzp6KJ1j8
Codice:
//lo trovo
    GameObject theEnemy = GameObject.Find("Enemy");
    //lo aggancio con una variabile ad hoc
    PlayerScript enemyScript = theEnemy.GetComponent<PlayerScript>();
    //accedo alla sua roba
    enemyScript.Energia -= 10.0f;
Aggiungo però che smanazzare liberamente negli attributi di altri oggetti non è proprio il massimo, se è previsto che ciò accada spesso allora sarebbe il caso di impostare dei metodi getNomeAttributo (per leggerli/riceverli) e setNomeAttributo (per impostarli).. così il tuo oggetto fornirà agli altri la possibilità di essere "gestito" così come invocheresti Enemy.Muori potresti anche avere un Enemy.setEnergia(nuovo valore) o ancora meglio più mirato Enemy.ToglieEnergia(-1).. volendo questo metodo potrebbe al suo interno verificare se hai superato la soglia della vita e chiamare lui "Muori" permettendo di morire solo per abbassamento dell'energia.. questi comunque sono spunti di OOdesign e dipendono molto da quello che uno vuole fare.
 
Reply
#3
Ciao Chip, grazie intanto per la risposta
Perdonami se possibilmente scrivo cavolate, ma sono ancora alle prime armi ahah

Comunque quello che voglio fare deve succedere prima che parte la scena, quindi usando la funzione Awake.

Allora, ci sono 2 gameobject in questione.
- player
- cubomovimento

Su player non devo assegnare nulla.
Su cubomovimento c'è uno script, con una variabile public di tipo Transform (e che quindi se non assegno nulla, nell'ispector appare vuota, dandomi poi la possibilità di assegnare il transform di un gameobject).
In questa variabile public devo assegnare il transform del gameobject di nome player tramite lo script di cubomovimento.

EDIT: ho trovato il modo di fare quello che volevo, ti scrivo la riga di codice almeno si capisce subito.
Questa riga di codice è dentro cubomovimento


Codice:
function Awake() {
player = GameObject.FindGameObjectWithTag("Giocatore").transform;
}


Anche se qui ho usato la tag, quello che volevo fare è questo, tutto qui, sicuro mi sono sbagliato io nel spiegare il problema e mi scuso, ma purtroppo sono ancora inesperto nello scripting...

Grazie comunque per l'aiuto Smile
 
Reply
#4
Oh beh funziona anche così, non mi piaciono i tag Tongue il concetto è simile, l'importate è che ti ricordi di assegnare quel tag univocamente perché il find con il tag si ferma al primo che trova. In particolare la tua chiamata potrebbe restituirti una lista di oggetti con quel tag. Il mio metodo invece utilizzava il tipo di oggetto da usare.

Stiamo parlando comunque in entrambe i casi dei metodi statici del GameObject (infatti li invochi usando come dominio il nome della classe.qualcosa e non dell'oggetto  istanziato da essa), il Find, il FindGameObjectsWithTag e il FindWithTag

Come sempre consiglio di rifarsi da zero i tutorials di almeno Roll-a-Ball, Space Shooter e il Survival; se li riuscite a capire tutti siete un bel pezzo avanti. Nel tuo caso specifico anche il corso sullo Scripting Tongue
 
Reply
#5
(21-11-2018, 10:11 PM)Chip Ha scritto: Oh beh funziona anche così, non mi piaciono i tag Tongue il concetto è simile, l'importate è che ti ricordi di assegnare quel tag univocamente perché il find con il tag si ferma al primo che trova. In particolare la tua chiamata potrebbe restituirti una lista di oggetti con quel tag. Il mio metodo invece utilizzava il tipo di oggetto da usare.

Stiamo parlando comunque in entrambe i casi dei metodi statici del GameObject (infatti li invochi usando come dominio il nome della classe.qualcosa e non dell'oggetto  istanziato da essa), il Find, il FindGameObjectsWithTag e il FindWithTag

Come sempre consiglio di rifarsi da zero i tutorials di almeno Roll-a-Ball, Space Shooter e il Survival; se li riuscite a capire tutti siete un bel pezzo avanti. Nel tuo caso specifico anche il corso sullo Scripting Tongue

Scusa la risposta in ritardo...

Per quello che mi serviva mi basta anche usare la tag o  non, il tipo di oggetto che sto creando è ancora in sviluppo diciamo.

Comunque si, mi serve decisamente un corso sullo scripting, inizio col roll a ball, poi vedrò
Grazie ancora Smile

PS: (piccolo off topic, sto creando un gioco per android e tra non molto voglio rilasciare una versione prova, posso creare una discussione a riguardo?)
 
Reply
#6
Citazione: (piccolo off topic, sto creando un gioco per android e tra non molto voglio rilasciare una versione prova, posso creare una discussione a riguardo?)

Certo qui, http://www.making-videogames.net/giochi/...ti-Unity3D
 
Reply
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Problema con APK Google Play Console LvKA95 0 445 25-06-2019, 06:27 PM
Ultimo messaggio: LvKA95
  [RISOLTO]Problema WWWForm js/php su Android 9 AlessioGe 0 505 19-12-2018, 11:29 AM
Ultimo messaggio: AlessioGe
  Problema con Caricamento Scene BeppeGame 3 500 04-11-2018, 01:06 PM
Ultimo messaggio: springofdajuwn
  Script - richiamare variabili/ statistiche da altri script 3RazeR3 5 718 11-10-2018, 11:21 AM
Ultimo messaggio: DarkTy
  Problema script c# Animator controller Damadaress 4 603 25-07-2018, 06:46 PM
Ultimo messaggio: Damadaress
Information Strano problema col rendering forward [RISOLTO] LvKA95 4 479 15-04-2018, 09:16 PM
Ultimo messaggio: Blackg96
  problema con unity non spara thespeedkiller01 0 488 21-05-2017, 10:15 PM
Ultimo messaggio: thespeedkiller01
  Problema con variabile jacomucchio 6 966 12-12-2016, 04:42 PM
Ultimo messaggio: alessiobb3b
  Script condiviso tra + gameobject Almiotti79 7 1,002 22-09-2016, 11:45 AM
Ultimo messaggio: Almiotti79
  GameObject.Find 93sunderland 9 1,386 14-04-2016, 01:59 PM
Ultimo messaggio: Blackg96

Vai al forum:


Browsing: 1 Ospite(i)