Messaggi: 17
Discussioni: 4
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Sep 2016
Reputazione:
0
Ciao.. ho un problema, creando + oggetti e associandovi lo stesso script, in game se cambia ad esempio una variabile da vera a falsa per un oggetto.. si riflette su ogni altro oggetto a cui lo script è associato.. ho provato a metterla privata.. ma non capisco.. e purtroppo non parlando bene inglese non resco a reperire informazioni adeguate a superare il problema.
Qualcuno può aiutarmi? Grazie
Messaggi: 813
Discussioni: 74
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2012
Reputazione:
4
è ovvio lo script è uno ed è condiviso per tutti basta che da una parte si attivi e si attiva su tutti ti conviene fare più booleane una per oggetto
Messaggi: 17
Discussioni: 4
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Sep 2016
Reputazione:
0
Grazie, ma non dovrebbe esserci un modo per renderle legate all'oggetto al quale lo script è associato ?
Messaggi: 365
Discussioni: 28
Thanks Received:
8 in 8 posts
Thanks Given: 0
Thanks Received:
8 in 8 posts
Thanks Given: 0
Registrato: Jun 2011
Reputazione:
6
Ciao, il problema che hai è molto strano perchè, cambiando lo stato di una variabile dello script di un gameobject cambia solo lo stato della variabile per quel gameobject e non per tutti quanti, a meno che non si vada a modificare lo script.
Per cambiare lo stato della variabile stai usando un altro script o l'inspector ?
Messaggi: 1,519
Discussioni: 235
Thanks Received:
6 in 5 posts
Thanks Given: 0
Thanks Received:
6 in 5 posts
Thanks Given: 0
Registrato: Jan 2014
Reputazione:
8
Tutto dipende dal capire cosa intendi quando dici "creando + oggetti e associandovi lo stesso script".
Cosa c'è in questo script? Che genere di oggetti sono? Ne hai fatto dei prefabs? Ogni oggetto dovrebbe avere un suo script. Questa variabile è public? Si vede nell'inspector?
Messaggi: 17
Discussioni: 4
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Sep 2016
Reputazione:
0
Ciao, semplifico la cosa, allora ho 2 plane creati trascinando un prefab, ho un cubo creato solo sull'area di gioco (nessun prefab)
A questi tre gameObject attacco lo stesso script :
[attivatore.cs]
using UnityEngine;
using System.Collections;
public class attivatore : MonoBehaviour {
void Update () {
if (Input.GetMouseButtonDown (0)) {
Debug.Log (transform.position + "/n/r");
}
}
}
[fine file]
Qualsiasi oggetto clicco, lui mi stampa a console la posizione di tutti e tre gli oggetti :
(0.7, 1.0, 5.7)/n/r
UnityEngine.Debug:Log(Object)
(0.0, 0.0, 0.0)/n/r
UnityEngine.Debug:Log(Object)
(0.0, 0.0, 3.67)/n/r
UnityEngine.Debug:Log(Object)
Insomma.. qualsiasi cosa faccio nello script viene applicato a ogni oggetto a ci lo script è attaccato. Scusate l'ignoranza.. ma non riesco a trovare materiale didattico in italiano.. e a volte quindi mi perdo su quelle che sono fesserie magari.
Grazie molto.
Messaggi: 17
Discussioni: 4
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Sep 2016
Reputazione:
0
Ok .. aggiornamento.. devo usare il raycast per selezionare l'oggetto..
ma il problema nn si risolve.. la variabile è condivisa.. cioè io ho una variabile bool "attiva"
se clicco sul primo.. essa passa a false, se clicco sul secondo.. essa risulta già false
...
Allego il codice
using UnityEngine;
using System.Collections;
public class rilevaCollisione : MonoBehaviour {
public Material[] Materiali;
private bool attivo = true;
void Update(){
if (Input.GetMouseButtonUp (0)) {
RaycastHit hit;
Ray raggio = Camera.main.ScreenPointToRay (Input.mousePosition);
Debug.DrawRay (raggio.origin, raggio.direction * 10, Color.yellow);
if (Physics.Raycast (raggio,out hit)) {
Debug.Log (hit.collider.name + " > " + attivo);
if (attivo) {
hit.collider.GetComponent<Renderer>().sharedMaterial = Materiali [0];
attivo = false;
} else {
hit.collider.GetComponent<Renderer>().sharedMaterial = Materiali [1];
attivo = true;
}
}
}
}
}