Achar objeto que não esta na cena
2 participantes
Página 1 de 1
Achar objeto que não esta na cena
Bom dia gente
Não ia perguntar sobre não mas isso já não é de hoje que ta me dando dor de cabeça então resolvi matar essa logo
alguém saberia me dizer como consigo acessar as variáveis de um script que esta em um prefab que não esta na cena no momento?
o que quero seria tipo .. aperto uma tecla e instancio esse prefab e com outra tecla ativo ou desativo a bool dele, só que logo no inicio já começa dando erro por não achar a referencia a ele -_-
tentei gameobject.find já ou com tag nada funciona porque todos parece achar so o que esta em cena ja
agradeço desde ja quem puder dar essa luz porque sei que isso que estou errando deve ser algo na cara.
Não ia perguntar sobre não mas isso já não é de hoje que ta me dando dor de cabeça então resolvi matar essa logo
alguém saberia me dizer como consigo acessar as variáveis de um script que esta em um prefab que não esta na cena no momento?
o que quero seria tipo .. aperto uma tecla e instancio esse prefab e com outra tecla ativo ou desativo a bool dele, só que logo no inicio já começa dando erro por não achar a referencia a ele -_-
tentei gameobject.find já ou com tag nada funciona porque todos parece achar so o que esta em cena ja
agradeço desde ja quem puder dar essa luz porque sei que isso que estou errando deve ser algo na cara.
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Achar objeto que não esta na cena
hmmm, em vez de tentar alterar o que não existe por que não a seguinte logica:
- Código:
bool valorPadrão
Se apertar (botao de instanciar)
{
instanciar obj com valorPadrão
}
Se apertar (botao de alterar)
{
se (obj existe): alterar
senao: alternar valorPadrão
}
Re: Achar objeto que não esta na cena
dessa forma tentei aqui tambem, não deu o erro de referencia mas em compensação não deu nada quando aperto a tecla
este e o script que esta no cubo, preciso acessar a gravidade das peças que ele vira quando explode com um getkey que esta no player
o problema que não consigo acessar nada da void createpiece de dentro do script do player
este e o script que esta no cubo, preciso acessar a gravidade das peças que ele vira quando explode com um getkey que esta no player
o problema que não consigo acessar nada da void createpiece de dentro do script do player
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExplosionCube : MonoBehaviour {
public float cubeSize = 0.2f;
public int cubesInRow = 5;
float cubesPivotDistance;
Vector3 cubesPivot;
public float explosionForce = 50f;
public float explosionRadius = 4f;
public float explosionUpward = 0.4f;
public float explosionUpwardMin, explosionUpwardMax;
public Color color;
public float timeToDestroy;
// Use this for initialization
void Start() {
explosionUpward = Random.Range (explosionUpwardMin, explosionUpwardMax);
cubesPivotDistance = cubeSize * cubesInRow / 2;
cubesPivot = new Vector3(cubesPivotDistance, cubesPivotDistance, cubesPivotDistance);
}
// Update is called once per frame
void Update() {
}
public void explode() {
//make object disappear
gameObject.SetActive(false);
//loop 3 times to create 5x5x5 pieces in x,y,z coordinates
for (int x = 0; x < cubesInRow; x++) {
for (int y = 0; y < cubesInRow; y++) {
for (int z = 0; z < cubesInRow; z++) {
createPiece(x, y, z);
}
}
}
//get explosion position
Vector3 explosionPos = transform.position;
//get colliders in that position and radius
Collider[] colliders = Physics.OverlapSphere(explosionPos, explosionRadius);
//add explosion force to all colliders in that overlap sphere
foreach (Collider hit in colliders) {
//get rigidbody from collider object
Rigidbody rb = hit.GetComponent<Rigidbody>();
if (rb != null) {
//add explosion force to this body with given parameters
rb.AddExplosionForce(explosionForce, transform.position, explosionRadius, explosionUpward);
}
}
}
void createPiece(int x, int y, int z) {
//create piece
GameObject piece;
piece = GameObject.CreatePrimitive(PrimitiveType.Cube);
//set piece position and scale
piece.transform.position = transform.position + new Vector3(cubeSize * x, cubeSize * y, cubeSize * z) - cubesPivot;
piece.transform.localScale = new Vector3(cubeSize, cubeSize, cubeSize);
//add rigidbody and set mass
piece.AddComponent<Rigidbody>();
piece.GetComponent<Rigidbody>().mass = cubeSize;
Destroy (piece, timeToDestroy);
Destroy (gameObject, timeToDestroy);
piece.GetComponent<MeshRenderer> ().material.color = color;
piece.GetComponent<Rigidbody> ().useGravity = false; // preciso acessar este component com um script do player
}
}
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Achar objeto que não esta na cena
esqueci de dizer tambem, o cubo com esse script não esta em cena ele é instanciado na posição do click do player
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Achar objeto que não esta na cena
speedluk escreveu:dessa forma tentei aqui tambem, não deu o erro de referencia mas em compensação não deu nada quando aperto a tecla
este e o script que esta no cubo, preciso acessar a gravidade das peças que ele vira quando explode com um getkey que esta no player
o problema que não consigo acessar nada da void createpiece de dentro do script do player
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExplosionCube : MonoBehaviour {
public float cubeSize = 0.2f;
public int cubesInRow = 5;
float cubesPivotDistance;
Vector3 cubesPivot;
public float explosionForce = 50f;
public float explosionRadius = 4f;
public float explosionUpward = 0.4f;
public float explosionUpwardMin, explosionUpwardMax;
public Color color;
public float timeToDestroy;
// Use this for initialization
void Start() {
explosionUpward = Random.Range (explosionUpwardMin, explosionUpwardMax);
cubesPivotDistance = cubeSize * cubesInRow / 2;
cubesPivot = new Vector3(cubesPivotDistance, cubesPivotDistance, cubesPivotDistance);
}
// Update is called once per frame
void Update() {
}
public void explode() {
//make object disappear
gameObject.SetActive(false);
//loop 3 times to create 5x5x5 pieces in x,y,z coordinates
for (int x = 0; x < cubesInRow; x++) {
for (int y = 0; y < cubesInRow; y++) {
for (int z = 0; z < cubesInRow; z++) {
createPiece(x, y, z);
}
}
}
//get explosion position
Vector3 explosionPos = transform.position;
//get colliders in that position and radius
Collider[] colliders = Physics.OverlapSphere(explosionPos, explosionRadius);
//add explosion force to all colliders in that overlap sphere
foreach (Collider hit in colliders) {
//get rigidbody from collider object
Rigidbody rb = hit.GetComponent<Rigidbody>();
if (rb != null) {
//add explosion force to this body with given parameters
rb.AddExplosionForce(explosionForce, transform.position, explosionRadius, explosionUpward);
}
}
}
void createPiece(int x, int y, int z) {
//create piece
GameObject piece;
piece = GameObject.CreatePrimitive(PrimitiveType.Cube);
//set piece position and scale
piece.transform.position = transform.position + new Vector3(cubeSize * x, cubeSize * y, cubeSize * z) - cubesPivot;
piece.transform.localScale = new Vector3(cubeSize, cubeSize, cubeSize);
//add rigidbody and set mass
piece.AddComponent<Rigidbody>();
piece.GetComponent<Rigidbody>().mass = cubeSize;
Destroy (piece, timeToDestroy);
Destroy (gameObject, timeToDestroy);
piece.GetComponent<MeshRenderer> ().material.color = color;
piece.GetComponent<Rigidbody> ().useGravity = false; // preciso acessar este component com um script do player
}
}
em vez de acessar diretamente o useGravity, por que não botar uma variavel public bool na classe ExplosionCube e depois apenas passar ela para o useGravity ?
Tópicos semelhantes
» É POSSIVEL ACHAR UM SCRIPT QUE ESTEJA EM ALGUM OBJETO NA CENA?
» Mudar cena ao ativar um objeto
» [Duvida] Achar mais de um objeto com o FindObjectsOfType.
» Como Clicar em um objeto em cena e ele destruir
» Tirar seleção de Objeto na Cena
» Mudar cena ao ativar um objeto
» [Duvida] Achar mais de um objeto com o FindObjectsOfType.
» Como Clicar em um objeto em cena e ele destruir
» Tirar seleção de Objeto na Cena
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos