Estou desenvolvendo um jogo educativo no qual o objetivo é ensinar a logica de programação…
Eis que veio o problema, criei uma classe em c# que gera um tabuleiro no qual o personagem deve andar,
só que de bloco em bloco, porém não faço ideia de como poderei estar usando a classe jogador, a minha classe que gera terreno até consegue devolver um Transform[] com todos os cubos e suas posições para que a classe do jogador possa usar para se locomover, mas não consigo fazer com que o jogador o receba por construtor etc…
classe Terreno.cs:
using UnityEngine;
using System.Collections;
public class Terreno : MonoBehaviour {
public GameObject bloco ;
public GameObject jogador;
protected GameObject blocoAux;
protected int[,] matrizTabuleiro;
protected int x = 10 ;
protected int y = 4 ;
protected Vector3 localizacaoCamera;
protected Vector3 localizacaoTerreno;
//protected Jogador jog;
protected Transform[] t;
// Use this for initialization
void Start ()
{
print (x + " : " + y);
matrizTabuleiro = new int[x, y];
localizacaoCamera = new Vector3 ();
localizacaoCamera.x = -0.46f;
localizacaoCamera.y = 2.06f;
localizacaoCamera.z = -13.78f;
transform.position = localizacaoCamera;
localizacaoTerreno = new Vector3();
localizacaoTerreno.x =0;
localizacaoTerreno.y =1;
localizacaoTerreno.z = -7;
t = new Transform[x*y]; // gera um vetor que vai alocar as posicoes dos bloco
instanciaTabuleiro (matrizTabuleiro);
}
public Transform[] getTransform()
{
return this.t;
}
// Update is called once per frame
void Update ()
{}
void instanciaTabuleiro(int[,] tabuleiro)
{
int xx,zz,contador=0;
for (xx = 0; xx < tabuleiro.GetLength (0); xx++)
{
for (zz = 0; zz < tabuleiro.GetLength (1); zz++)
{
blocoAux = Instantiate(bloco,localizacaoTerreno-
bloco.transform.lossyScale.x*tabuleiro.GetLength(0)/2*transform.right+
bloco.transform.lossyScale.z*tabuleiro.GetLength(1)/10*transform.forward-
bloco.transform.lossyScale.y*3*transform.up+
bloco.transform.lossyScale.x*xx*bloco.transform.right+
bloco.transform.lossyScale.z*zz*bloco.transform.forward, transform.rotation)as GameObject;
blocoAux.name = (xx + zz) + "S" + "X" + xx + "Z" + zz + ", cubo" + contador;
t [contador] = blocoAux.transform;
print (t[contador].position);
contador++;
if ((xx + zz) % 2 == 0)
{
blocoAux.GetComponent<Renderer> ().material.color = Color.black;
}
}
}
//jog = new Jogador (t, jogador);
}
}
classe jogador:
using UnityEngine;
using System.Collections;
public class Jogador : MonoBehaviour {
public GameObject jogador;
protected int casaAtual;
public Transform[] casas = new Transform[20];
// Use this for initialization
void Start () {
casaAtual = 5;
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown ("s")) {
if (casaAtual == 19)
print ("voce ganhou");
else {
casaAtual = casaAtual - 5;
Vector3 novaPos = new Vector3 (casas [casaAtual].transform.position.x, casas [casaAtual].transform.position.y + 0.7f, casas [casaAtual].transform.position.z);
jogador.transform.position = novaPos;
}
}
if (Input.GetKeyDown ("w")) {
if (casaAtual == 19)
print ("voce ganhou");
else {
casaAtual = casaAtual + 5;
Vector3 novaPos = new Vector3 (casas [casaAtual].transform.position.x, casas [casaAtual].transform.position.y + 0.7f, casas [casaAtual].transform.position.z);
jogador.transform.position = novaPos;
}
}
if (Input.GetKeyDown ("a")) {
if (casaAtual == 19)
print ("voce ganhou");
else {
casaAtual--;
Vector3 novaPos = new Vector3 (casas [casaAtual].transform.position.x, casas [casaAtual].transform.position.y + 0.7f, casas [casaAtual].transform.position.z);
jogador.transform.position = novaPos;
}
}
if (Input.GetKeyDown ("d")) {
if (casaAtual == 19)
print ("voce ganhou");
else {
Vector3 novaPos = new Vector3 (casas [casaAtual + 1].transform.position.x, casas [casaAtual + 1].transform.position.y + 0.7f, casas [casaAtual + 1].transform.position.z);
jogador.transform.position = novaPos;
casaAtual++;
}
}
}
}
tentei até um construtor na classe jogador mas não consigo chamar na classe terreno ;-;