[Ajuda] Preciso de ajuda para controlar e alterar o valor de Lerp de varios objetos
3 participantes
Página 1 de 1
[Ajuda] Preciso de ajuda para controlar e alterar o valor de Lerp de varios objetos
Estou fazendo um jogo de carta e estou com problemas para posicionar as cartas na mão uma do lado da outra, na verdade fiz esses scripts com muito esforço e ate que esta funcionando meio que na raça mas com alguns problemas, porem queria arrumar uma forma mais certa pra se alterar o Lerp dos objetos, porque ja imagino que possa causar mais problemas conforme eu for avançando no projeto se ficar assim, sou amador mas ja aprendi muito, porem ja tentei de tudo que eu sei, mas nao consegui fazer um bom sistema entao queria ver se a galera mais pró me ajuda com talvez uma ideia melhor, o script em parte ta funcional entao podemos focar na void SelectCarta onde estou tendo problemas, a ideia chave é a seguinte: o player clica e seleciona a carta que é removida da lista mao, e depois disso acontecer uma variavel modifica o valor do Lerp em x de todas as cartas com um indice maior q o indice eliminado de forma que cada uma fique do lado da outra, a void Sort foi feita para esse efeito mas nao funcionou nao sei porque, vou postar os scripts abaixo
e esse é o script que vai nas cartas
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CardsDeck : MonoBehaviour {
public List<GameObject> deck = new List<GameObject>();
public List<GameObject> cards = new List<GameObject>();
public List<GameObject> mao = new List<GameObject>();
private int cardsSacado = 0;
private bool showReset = false;
public List<Transform> CartasM = new List<Transform>();
GameObject[] Cartas;
public List<bool> Usado = new List<bool>();
private Vector3 acaoMouse;
public GameObject ObjetoSelecionado;
public bool selecionar = false;
public bool turnoPlay = false;
public Camera kamera;
public int index = -1;
public int auxIndice ;
public Vector3 distance;
float leque = 15.0f;
public float auxLeque;
Transform CartasT;
int nextIndice;
public float juntaCard,Soma;
void ResetDeck()
{
cardsSacado = 0;
for (int i = 0; i < mao.Count; i++) {
Destroy(mao[i]);
Usado[i] = false;
}
CartasM.Clear();
mao.Clear();
cards.Clear();
cards.AddRange(deck);
showReset = false;
index = -1;
}
GameObject SacaCard (){
if(cards.Count == 0)
{
showReset = true;
return null;
}
int card = Random.Range(0, cards.Count - 1);
GameObject go = GameObject.Instantiate(cards[card]) as GameObject;
cards.RemoveAt(card);
index = index + 1;
if(cards.Count == 0) {
showReset = true;
}
return go;
}
void Start () {
ResetDeck();
auxLeque = leque;
Sort();
juntaCard = 1.5f;
}
// Update is called once per frame
void Update () {
SelectCarta ();
if (!showReset) {
if(Input.GetKeyDown(KeyCode.PageUp))
{
MoveOrdenaCard();
auxLeque = auxLeque - 1.5f;
}
}
else {
// Reset button
if(Input.GetKeyDown(KeyCode.Home))
{
ResetDeck();
auxLeque = leque;
}
}
// GameOver button
if(Input.GetKeyDown(KeyCode.PageDown))
{
GameOver();
}
}
void GameOver()
{
cardsSacado = 0;
for (int m = 0; m < mao.Count; m++) {
Destroy(mao[m]);
Usado[m] = false;
}
CartasM.Clear();
mao.Clear();
cards.Clear();
cards.AddRange(deck);
index = -1;
}
public void SelectCarta ()
{
if(Input.GetMouseButtonDown (0)){
RaycastHit hit;
if(Physics.Raycast(kamera.ScreenPointToRay(Input.mousePosition),out hit, LayerMask.GetMask("Carta")))
{
if (hit.collider.gameObject.tag == "Cartas" && Input.GetMouseButtonDown (0)) {
ObjetoSelecionado = hit.transform.gameObject;
auxIndice = ObjetoSelecionado.GetComponent<Card>().indice;
mao.Remove(ObjetoSelecionado);
Usado[auxIndice] = false;
nextIndice = auxIndice +1;
nextIndice = Mathf.Clamp (nextIndice,0, mao.Count-1);
mao [nextIndice].transform.position = ObjetoSelecionado.transform.position;
for(int i = nextIndice; i< mao.Count; i++){
mao [i].transform.position = mao [nextIndice].transform.position;
Soma = juntaCard;
mao [i].GetComponent<Card>().juntar = true;
//mao [i].GetComponent<Card>().direction = new Vector3 (auxLeque + Soma, -14, -24);
}
Debug.Log(ObjetoSelecionado);
Debug.Log(auxIndice);
index = index - 1;
auxLeque = auxLeque + 1.5f;
selecionar = true;
return;
}
}
}
}
void MoveOrdenaCard()
{
GameObject newCard = SacaCard();
// check card is null or not
if (newCard == null) {
Debug.Log("Out of Cards");
showReset = true;
return;
}
mao.Add(newCard); // add card to hand
Usado[cardsSacado] = true;
cardsSacado ++;
Cartas = GameObject.FindGameObjectsWithTag("Cartas");
for(int i = 0; i<Cartas.Length; i++){
CartasT = Cartas[i].GetComponent<Transform> ();
}
CartasM.Add(CartasT);
}
void Sort()
{
Vector3 startPos = new Vector3(distance.x * (CartasM.Count / 2), distance.y * (CartasM.Count / 2),distance.z * (CartasM.Count / 2));
Vector3 direction = startPos;
direction.y = 0;
for (int i = 0; i < CartasM.Count; i++)
{
CartasM[i].GetComponent<Card>().direction = direction;
direction.x += distance.x;
if (i >= (CartasM.Count / 2))
direction.x -= startPos.x;
else
direction.x += startPos.x;
}
}
}
e esse é o script que vai nas cartas
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Card : MonoBehaviour {
public int ID, indice;
public string Nome;
public Texture2D imagem;
// Animator anim;
// public bool CartaAtivada = false;
public GameObject deck;
public static int IndIST;
int auxx;
public bool juntar = false;
float somado;
public Vector3 direction = new Vector3();
public float FLeque ;
float novaPosic;
void Start () {
deck = GameObject.FindWithTag("Deck");
IndIST = deck.GetComponent<CardsDeck>().index;
indice = IndIST;
// anim = GetComponent<Animator>();
FLeque = deck.GetComponent<CardsDeck>().auxLeque;
direction = new Vector3 (FLeque, -14, -24);
}
// Update is called once per frame
void Update () {
auxx = deck.GetComponent<CardsDeck>().auxIndice;
if(juntar == false){
transform.position = Vector3.Lerp (transform.position, direction, 3 * Time.deltaTime);
}
}
if(juntar == true){
somado = deck.GetComponent<CardsDeck>().Soma;
novaPosic = FLeque + somado;
direction = new Vector3 (novaPosic, -14, -24);
transform.position = Vector3.Lerp (transform.position, direction, 3 * Time.deltaTime);
juntar = false;
FLeque = novaPosic;
}
}
}
Ronmaster- Membro
- PONTOS : 2520
REPUTAÇÃO : 4
Respeito as regras :
Re: [Ajuda] Preciso de ajuda para controlar e alterar o valor de Lerp de varios objetos
teria como postar o projeto?
Re: [Ajuda] Preciso de ajuda para controlar e alterar o valor de Lerp de varios objetos
Bom nesse vídeo você pode ver como esta o funcionamento momentâneo, por exemplo tem umas coisas que não estão me agradando como no caso, quando eu clico na carta e "ativo" algumas vezes fica um espaço entre as cartas o que justamente queria evitar, sem falar que não tenho o controle do efeito e as carta ficam alterando o valor do lerp sem controle, queria que o efeito fosse automático e que não ficasse cartas sobrepostas e nem espaços entre elas, quando uma for removida é desejável que elas se reagrupem.
Ronmaster- Membro
- PONTOS : 2520
REPUTAÇÃO : 4
Respeito as regras :
Re: [Ajuda] Preciso de ajuda para controlar e alterar o valor de Lerp de varios objetos
Se as cartas que estiverem na mão tiverem um determinado limite, voce poderia criar gameObjects empty e usar a posicao deles para a carta ser movida.
Re: [Ajuda] Preciso de ajuda para controlar e alterar o valor de Lerp de varios objetos
Bom na verdade se possivel nao queria limitar as cartas que o player iria segurar, porem ainda estou procurando uma forma de controlar e acessar os valores do lerp da carta, ou verificar a distancia entre as cartas, pra tentar fazer uma função de reagrupar mais eficiente do que essa atual, então posso testar o que voce sugeriu, teria como voce detalhar mais essa ideia pra eu poder fazer um teste?Manawydan escreveu:Se as cartas que estiverem na mão tiverem um determinado limite, voce poderia criar gameObjects empty e usar a posicao deles para a carta ser movida.
Ronmaster- Membro
- PONTOS : 2520
REPUTAÇÃO : 4
Respeito as regras :

» Ajuda para controlar luz, Unity 5
» Preciso de ajuda em um script para o trabalho do meu estágio.
» Preciso de ajuda para sound effects!
» Eu preciso de ajuda para um impulso de pinball
» [AJUDA]Preciso de ajuda em um script relacionado ao vídeo Sistema de escolha de personagen
» Preciso de ajuda em um script para o trabalho do meu estágio.
» Preciso de ajuda para sound effects!
» Eu preciso de ajuda para um impulso de pinball
» [AJUDA]Preciso de ajuda em um script relacionado ao vídeo Sistema de escolha de personagen
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos