[RESOLVIDO] Prefabs
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Prefabs
Olá pessoal, estou a dias tentando resolver isso e não sei onde estou errando.
É o seguinte:
tenho um prefab que funciona como uma plataforma, e toda vez que clico em um botão esse prefab se movimenta.
Só que quando tenho mais de um prefab na tela apenas um esta se movimentando e preciso que todos eles se movam.
O código que estou usando é este para o prefab "plataforma":
[list=csharp]
[*]bool estático público moveSabonete ;
[*]Atualização do void público ( )
[*] {
[*] if ( moveSabonete )
[*] {
[*] MoveSaboneteVoid ( 2f ) ;
[*] }
[*] }
[*] public void MoveSaboneteVoid ( float m )
[*] {
[*] var pos = isso . transformar . posição ;
[*] pos . y - = 2f ;
[*] isso . transformar . posição = pos ;
[*] moveSabonete = false ;
[*] }
[/list]
E para o botão estou usando esse para ativar o "bool":
[list=csharp]
[*]public void MoveButton ( )
[*]{
[*] SaboneteScript . moveSabonete = true ;
[*]}
[/list]
meu projeto esta travado por causa disso se alguém tiver algum link ou tutorial ou falar oque esta errado, ficarei muito grato!
É o seguinte:
tenho um prefab que funciona como uma plataforma, e toda vez que clico em um botão esse prefab se movimenta.
Só que quando tenho mais de um prefab na tela apenas um esta se movimentando e preciso que todos eles se movam.
O código que estou usando é este para o prefab "plataforma":
[list=csharp]
[*]bool estático público moveSabonete ;
[*]Atualização do void público ( )
[*] {
[*] if ( moveSabonete )
[*] {
[*] MoveSaboneteVoid ( 2f ) ;
[*] }
[*] }
[*] public void MoveSaboneteVoid ( float m )
[*] {
[*] var pos = isso . transformar . posição ;
[*] pos . y - = 2f ;
[*] isso . transformar . posição = pos ;
[*] moveSabonete = false ;
[*] }
[/list]
E para o botão estou usando esse para ativar o "bool":
[list=csharp]
[*]public void MoveButton ( )
[*]{
[*] SaboneteScript . moveSabonete = true ;
[*]}
[/list]
meu projeto esta travado por causa disso se alguém tiver algum link ou tutorial ou falar oque esta errado, ficarei muito grato!
mirdov- Iniciante
- PONTOS : 2750
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Prefabs
Use o botão script do fórum para postar o seu script de forma correta, da forma que está, fica difícil de ler porque ele foi traduzido. Mas mesmo assim deu para entender o seu problema.
Eu não usaria uma variável estática assim para controlar outros objetos dentro de uma classe de instância, eu declararia essa variável estática externamente.
Mas existe um jeito melhor para fazer o que você quer através de eventos.
Faça o seguinte: torne a variável moveSabonete como não estática e dentro do script do botāo coloque isso:
Eu não usaria uma variável estática assim para controlar outros objetos dentro de uma classe de instância, eu declararia essa variável estática externamente.
Mas existe um jeito melhor para fazer o que você quer através de eventos.
Faça o seguinte: torne a variável moveSabonete como não estática e dentro do script do botāo coloque isso:
- Código:
using System;
using UnityEngine;
public class ButtonObject : MonoBehaviour{
public delegate void ClickButtonHandler();
public static event ClickButtonHandler ActivateButton;
public void MoveButton(){
ActivateButton ();
}
}
- Código:
// Coloque esses comandos no script da Plataforma:
void Start(){
ButtonObject.ActivateButton += MoveSaboneteVoid;
}
void OnDestroy(){
ButtonObject.ActivateButton -= MoveSaboneteVoid;
}
Re: [RESOLVIDO] Prefabs
Esta dando um erro no script da plataforma (já modifiquei tanto tentando encontrar uma solução e estou achando que ferrei o código!
Vou colocar como ele está até agora!
código da plataforma(sabonete)
código do botão
Vou colocar como ele está até agora!
código da plataforma(sabonete)
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FadeOutScript : MonoBehaviour
{
SpriteRenderer rend;
public bool moveSabonete;
public void Start()
{
ButtonScript.ActivateButton += MoveSaboneteVoid;
rend = this.GetComponent<SpriteRenderer>();
Color c = rend.material.color;
c.a = 1f;
rend.material.color = c;
moveSabonete = false;
}
public void Update()
{
if(moveSabonete)
{
MoveSaboneteVoid(2f);
}
}
public void OnCollisionEnter2D(Collision2D outro)
{
if(outro.gameObject.CompareTag("Pato"))
{
StartCoroutine("FadeIn");
}
}
IEnumerator FadeIn()
{
for (float f = 1f; f >= -0.01f; f -= GameManagerScript.FO_Velocite)
{
Color c = rend.material.color;
c.a = f;
rend.material.color = c;
yield return new WaitForSeconds(0.01f);
if(f <= 0)
{
Destroy(gameObject);
}
}
}
public void MoveSaboneteVoid(float m)
{
var pos = this.transform.position;
pos.y -= 2f;
this.transform.position = pos;
moveSabonete = false;
}
void OnDestroy()
{
ButtonObject.ActivateButton -= MoveSaboneteVoid;
}
}
código do botão
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonScript : MonoBehaviour
{
public GameObject Pato;
public Transform PL, PR, R1,L1;
public Transform sabonete;
public SpriteRenderer[] saboneteSR;
public FadeOutScript outro;
public delegate void ClickButtonHandler();
public static event ClickButtonHandler ActivateButton;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void Left()
{
if (GameManagerScript.Controle)
{
Pato.transform.position = new Vector2(PL.position.x, PL.position.y);
SaboneteSystem();
}
}
public void Right()
{
if (GameManagerScript.Controle)
{
Pato.transform.position = new Vector2(PR.position.x, PR.position.y);
SaboneteSystem();
}
}
public void SaboneteSystem()
{
ActivateButton();
int positionRandom = Random.Range(1, 3);
switch (positionRandom)
{
case 1:
Instantiate(sabonete, new Vector2(R1.position.x, R1.position.y), Quaternion.identity);
break;
case 2:
Instantiate(sabonete, new Vector2(L1.position.x, L1.position.y), Quaternion.identity);
break;
}
outro.MoveSaboneteVoid(2f);
GameManagerScript.Controle = false;
}
}
mirdov- Iniciante
- PONTOS : 2750
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Prefabs
Coloque a biblioteca System nos dois Scripts.
Também no script da Plataforma retire aquele parâmetro m, uma pq ele não está sendo usado dentro do método, e depois pq ele vai dar erro com o delegate.
Também no script da Plataforma retire aquele parâmetro m, uma pq ele não está sendo usado dentro do método, e depois pq ele vai dar erro com o delegate.
Re: [RESOLVIDO] Prefabs
Funciona! Muito obrigado estava a dois dias travado nisso!
mirdov- Iniciante
- PONTOS : 2750
REPUTAÇÃO : 1
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] erro ao instanciar prefabs
» [RESOLVIDO] Prefabs caindo aleatoriamente
» [RESOLVIDO] Duvidas sobre o Canvas, preFabs e o collisor na Unity
» Array de prefabs
» Link Prefabs??
» [RESOLVIDO] Prefabs caindo aleatoriamente
» [RESOLVIDO] Duvidas sobre o Canvas, preFabs e o collisor na Unity
» Array de prefabs
» Link Prefabs??
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos