• 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
help get component
#1
Ciao ragazzi ,,vi chiedo un immenso auto in quanto pur spulciando la documentazione ufficiale ed i vari forum ufficiali, non ho ancora capito ocme poter fare a prelevare valori o variabili da altri scripts..


io mi ritrovo ad avere 2 scripts

FirstPersonController.cs (personalizzato)
Player.cs (lo scirpt principale del mio player  con tutti i calori di vita etc)

in pratica io devo prelevare il valore m_onladder (bool) dallo script FirstPersonController.cs
 in modo tale da farlo utilizzare dallo script Player.cs che nel caso il valore sia true deve disabilitare il Valore FallDistance
 
Rispondi
#2
Ciao, la soluzione è piuttosto semplice infatti ti basterà dichiarare come public la bool "m_onladder" (se non lo è già), per fare ciò basterà aggiungere la parola "public" prima della dichiarazione della variabile.

Esempio:
Codice:
bool var = false;
Diventa
Codice:
public bool var = false;

Per prendere il valore della variabile da un altro script basterà chiamarla con il GetComponent.

Esempio(in questo esempio si presuppone che i 2 script siano attaccati allo stesso GameObject):
Codice:
this.gameObject.GetComponent<NomeScript> ().NomeVariabile

Nel tuo caso al posto di "NomeScript" metterai "FirstPersonController" e al posto di "NomeVariabile" metterai "m_onladder".
Per controllare se lo stato della variabile è "true" puoi fare così:

Codice:
if(this.gameObject.GetComponent<NomeScript> ().NomeVariabile == true)
{
  //istruzioni
}

Se hai altre difficoltà non esitare a chiedere  Smile
 
Rispondi
#3
ciao e grazie per la risposta ed il tuo tempo ma non va..
e nel mio caso i due script (Player.cs e FirstPersonControler.cs) sono entrambi attaccati allo stesso gameobject

ho fatto come hai detto tu..ossia

nello script FirstPersonController ho impostato

public bool m_onLadder = false; (anche se lo avevo già fatto)

poi nello script Player.cs ho inserito ..in alto....oppure va inserita da un altra parte?

this.gameObject.GetComponent<FirstPersonController>().m_onLadder;

ma il compilatore mi da questi errori..

Assets/MyScripts/Player.cs(96,56): error CS1519: Unexpected symbol `(' in class, struct, or interface member declaration


Assets/MyScripts/Player.cs(96,70): error CS1519: Unexpected symbol `;' in class, struct, or interface member declaration


Severity Code Description Project File Line Suppression State
Error CS0103 The name 'GetComponent<FirstPersonController>' does not exist in the current context. L.O.S.T. Pre Alpha v0.1.CSharp C:\Users\Peppe\Documents\L.O.S.T. Pre Alpha v0.1\Assets\MyScripts\Player.cs 96 Active

Severity Code Description Project File Line Suppression State
Error CS0103 The name 'm_onLadder' does not exist in the current context. L.O.S.T. Pre Alpha v0.1.CSharp C:\Users\Peppe\Documents\L.O.S.T. Pre Alpha v0.1\Assets\MyScripts\Player.cs 96 Active

Severity Code Description Project File Line Suppression State
Error CS0103 The name 'gameObject' does not exist in the current context. L.O.S.T. Pre Alpha v0.1.CSharp C:\Users\Peppe\Documents\L.O.S.T. Pre Alpha v0.1\Assets\MyScripts\Player.cs 96 Active
 
Rispondi
#4
"this.gameObject.GetComponent<FirstPersonController>().m_onLadder;" non va inserito in alto in quanto è solo una variabile, quello era solo un esempio che mostrava come ottenere il valore della variabile "m_onLadder".
Nel tuo caso inserisci:
Codice:
if(this.gameObject.GetComponent<FirstPersonController>().m_onLadder == true)
{

}
nella funzione dove vuoi che venga controllato se il valore della variabile "m_onLadder" è true o false.
 
Rispondi
#5
perfetto grandissimo... funziona alla grande!!

ma questo metodo vale solo per valori e variabili di scripts che sono attaccati allo stesso gameobject giusto?

e se bisogna far interagire scritps che si trovano in gameobject diversi ??

cmq ne approfitto per un altra domanda...

che funzione devo usare per rimuovere i footsteps..

in pratica vorrei che sott'acqua i passi ovviamente non si sentissero..

io sto provando con

this.gameObject.GetComponent<FirstPersonController>().m_FootstepSounds. = false;

ma dopo FootstepSounds non so che identifier mettere per disattivare i footsteps quando in acqua e poi riattivarli quando la tag non è più water..
 
Rispondi
#6
Allora per quanto riguarda prendere componenti da script diversi basta che fai
gameobject this = gameobject.findgameobjectwithtag ("Coso");
int live = this . getcomponent<Nomescript>().Nome variabile;
E stai apposto...previamente devi impostare il tag nell'oggetto sennò non lo troverà mai...
Ciao a presto
 
Rispondi
#7
Sì, attualmente lo script funziona solo se i due script sono nello stesso GameObject.
Per far interagire due script che sono in gameobject diversi puoi richiamare il gameobjet in due maniere:
  1. Utilizzando la funzione FindGameObjectWithTag()
  2. Utilizzando la funzione Find()
La prima funzione ti consentirà di trovare il gameobject cercandolo attraverso il tag.
La seconda ti consentirà di trovarlo cercandolo per nome.

Esempio(usando la prima funzione):
Codice:
GameObject.FindGameObjectWithTag("TagOggetto").GetComponent<NomeScript> ().NomeVariabile
Esempio(usando la seconda funzione):
Codice:
GameObject.Find("NomeOggetto").GetComponent<NomeScript> ().NomeVariabile

Per quanto riguarda la seconda domanda potresti modificare lo script "FirstPersonController" aggiungendo una variabile(che servirà per determinare se il player è in acqua), per poi modificare la funzione "PlayFootStepAudio()" andando ad aggiungere la variabile nell'if.

Esempio:
Codice:
private void PlayFootStepAudio()
       {
           if (!m_CharacterController.isGrounded || NomeVariabile)
           {
               return;
           }

            /* altre funzioni*/
        }

Questa nuova variabile, per come è impostato lo script, sarà attiva quando il player sarà in acqua.
Per attivare questa variabile potresti aggiungere un box collider, impostato come trigger, sotto l'acqua, attivando la variabile con la funzione "OnTriggerEnter" e disattivandola con la funzione "OnTriggerExit".
 
Rispondi
#8
grazie ad entrambi per lwe rispsote ed il vostro tempo..cmq riguardo la questione footstep sott'acqua io ho inserito la variable "inwater" nel FirstPerson Controller.cs dopo avviamente averla resa pubblica nello script swim.cs
ed infine sempre nello script FirstPesonController.cs ho inserito questo

private void PlayFootStepAudio()
{
if (!m_CharacterController.isGrounded || inwater = true);
{
return;
}
m_FootstepSounds.enabled = false
}

ma ho i seguenti errori

Severity Code Description Project File Line Suppression State
Error CS0121 The call is ambiguous between the following methods or properties: 'FirstPersonController.PlayFootStepAudio()' and 'FirstPersonController.PlayFootStepAudio()' L.O.S.T. Pre Alpha v0.1.CSharp.Plugins C:\Users\Peppe\Documents\L.O.S.T. Pre Alpha v0.1\Assets\Standard Assets\Characters\FirstPersonCharacter\Scripts\FirstPersonController.cs 209 Active


Severity Code Description Project File Line Suppression State
Error CS0111 Type 'FirstPersonController' already defines a member called 'PlayFootStepAudio' with the same parameter types L.O.S.T. Pre Alpha v0.1.CSharp.Plugins C:\Users\Peppe\Documents\L.O.S.T. Pre Alpha v0.1\Assets\Standard Assets\Characters\FirstPersonCharacter\Scripts\FirstPersonController.cs 230 Active
 
Rispondi
#9
Non dovevi inserire la funzione "PlayFootStepAudio" in quanto è gia presente nello script, perciò cancella quella che hai scritto e modifica quella già presente. Inoltre non serve inserire "m_FootstepSounds.enabled = false".
Per modificare la funzione "PlayFootStepAudio", ti basterà inserire all'interno dell' if "|| inwater == true"(come avevi fatto nella tua funzione, però con due segni uguale).

Per completezza ti spiego cosa ti dicono quegli errori nel log.
Il primo ti dice che la chiamata alla funzione "PlayFootStepAudio" è ambigua perchè nello script ci sono due funzioni chiamate "PlayFootStepAudio".
Il secondo ti dice che nello script "FirstPersonController" c'è già la definizione di un membro chiamato "PlayFootStepAudio".

Se hai dubbi chiedi pure Smile
 
Rispondi
#10
ho fatto come dici
if (!m_CharacterController.isGrounded || inwater == true);

ma mi da questo errore

Severity Code Description Project File Line Suppression State
Error CS0103 The name 'inwater' does not exist in the current context L.O.S.T. Pre Alpha v0.1.CSharp.Plugins C:\Users\Peppe\Documents\L.O.S.T. Pre Alpha v0.1\Assets\Standard Assets\Characters\FirstPersonCharacter\Scripts\FirstPersonController.cs 214 Active

perchè la variable non è dichiarata all'interno del firstpersoncontroller.cs giusto?

ma la variabile si trova nello script Swim.cs come t iavevo scritto in alcuni post fa..
allora ho provato a fare come per gli altri script con il Getcomponent cosi:

if (!m_CharacterController.isGrounded || this.gameObject.GetComponent<Swim>().inwater == true)


ma mi viene dato l'errore

Severity Code Description Project File Line Suppression State
Error CS0246 The type or namespace name 'Swim' could not be found (are you missing a using directive or an assembly reference?) L.O.S.T. Pre Alpha v0.1.CSharp.Plugins C:\Users\Peppe\Documents\L.O.S.T. Pre Alpha v0.1\Assets\Standard Assets\Characters\FirstPersonCharacter\Scripts\FirstPersonController.cs 214 Active
 
Rispondi
#11
L'errore ti dice che Unity non trova il namespace "Swim", ovvero non trova lo script.
Lo script è stato aggiunto al GameObject che ha lo script "FirstPersonController" ?
 
Rispondi
#12
si lo script è aggiunto al gameobject player al quale è attaccato sia lo script Player.cs che ovviamente FirstPersonController.cs e che cmq non dovrebbe avere probemi in quanto l'ho richiamato già diverse volte dallo script Player.cs senza problemi dopo tua delucidazione sulla funzione GetComponent.
 
Rispondi
#13
Prova ad apportare queste modifiche al file "FirstPersonController", crea una nuova variabile, impostala al valore della variabile inwater dello script Swim nella funzione "Update"(utilizzando il GetComponent), e poi aggiungi nell'if il controllo sulla nuova variabile.
 
Rispondi
  


Vai al forum:


Browsing: 1 Ospite(i)