[ajuda] Sistema de Sliding (2D)
3 participantes
Página 1 de 1
[ajuda] Sistema de Sliding (2D)
Eu sou novo na área então estou aprendendo tudo do zero, estou criando um jogo puzzle pra celular e já na 1 cena eu travei. Não consigo transcrever no script um modo de fazer ele deslizar pelo jogo, o chão é todo com uma textura de gelo, então minha ideia era fazer o Player deslizar ao apertar um dos comandos de movimento (A,S,D,W) e ele só parar quando colidir com um objeto, uma pedra de gelo, no meu caso. Vocês poderiam me ajudar? Obrigado desde já =)
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Você já tem o script básico dele se movimentar?
Stipp- Avançado
- PONTOS : 3640
REPUTAÇÃO : 102
Idade : 25
Áreas de atuação : Programação: C#, VB.NET, PHP e outras.
Modelagem: Blender.
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Stipp escreveu:Você já tem o script básico dele se movimentar?
Sim, vou mostrar.
- Script - Player:
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
public Rigidbody2D PlayerRigidbody;
public Transform IceGround;
public LayerMask IceGroundLayer;
public BoxCollider2D IceBlock;
public BoxCollider2D IceGroundSliding;
//public ConstantForce2D SlideForce;
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
//SE APERTAR ESSE BOTAO, ENTAO FAÇA ISSO
if (Input.GetKeyDown("a")){
PlayerRigidbody.MovePosition(PlayerRigidbody.position - new Vector2(1, 0));
}
else if (Input.GetKeyDown("d")){
PlayerRigidbody.MovePosition(PlayerRigidbody.position + new Vector2(1, 0));
}
else if (Input.GetKeyDown("w")){
PlayerRigidbody.MovePosition(PlayerRigidbody.position + new Vector2(0, 1));
}
else if (Input.GetKeyDown("s")){
PlayerRigidbody.MovePosition(PlayerRigidbody.position - new Vector2(0, 1));
}
}
}
OBS: Tem alguns "Public" ai que eu tentei adicionar só para tentar criar o sliding, como a IceGroundLayer, mas não consegui. O jogo é em 2D, estilo pokemon ruby, por exemplo.
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Olha este tutorial da Unity ela ensina a fazer utilizando materias de colisão:
Obs.: A partir do 3:20 ele cria;
Obs.: A partir do 3:20 ele cria;
Stipp- Avançado
- PONTOS : 3640
REPUTAÇÃO : 102
Idade : 25
Áreas de atuação : Programação: C#, VB.NET, PHP e outras.
Modelagem: Blender.
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Stipp escreveu:Olha este tutorial da Unity ela ensina a fazer utilizando materias de colisão:
Obs.: A partir do 3:20 ele cria;
Eu usei esse video como base, mas ai o objeto que colide com o gelo encosta nele por fora, no meu jogo eu fiz um grande layer de gelo como plano de fundo, e o personagem está em cima dele. Não tem como ele deslizar quando encostar se ele está dentro do boxcollider, entende? Se eu fizer isso ele não pode ficar dentro
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Stipp escreveu:Olha este tutorial da Unity ela ensina a fazer utilizando materias de colisão:
Obs.: A partir do 3:20 ele cria;
Pode mostrar no script como faz para tirar a forã de atrito? Por que se não houver atrito no chão logicamente ele vai deslizar, eu suponho, mas como o chão é um cenário de fundo.. não sei fazer, se fosse com personagem pisando no gelo, eu saberia, entende minha dificuldade? Acha melhor eu mandar foto de como esta?
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Por que não utiliza Rigidbody.AddForce ou Rigidbody.velocity para fazer os movimentos contínuos???
Re: [ajuda] Sistema de Sliding (2D)
MarcosSchultz escreveu:Por que não utiliza Rigidbody.AddForce ou Rigidbody.velocity para fazer os movimentos contínuos???
Como eu disse, ainda sou muito novo no programa e estou aprendendo tudo sozinho, eu já tentei utilizar ambos mas não soube escreve-los no script, não sei como funcionam. Poderia escrever como deveria ficar, ou um exemplo, por favor? Desculpa incomodar vocês, mas eu realmente estou querendo aprender
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Faço um exemplo sim :D más antes diga, o seu objeto é uma bola ou tem colisor quadrado em baixo???
Você está usando gravidade no rigidbody?
Você está usando gravidade no rigidbody?
Re: [ajuda] Sistema de Sliding (2D)
MarcosSchultz escreveu:Faço um exemplo sim :D más antes diga, o seu objeto é uma bola ou tem colisor quadrado em baixo???
Você está usando gravidade no rigidbody?
O meu objeto é o próprio personagem, ele não tem gravidade, pois o jogo é plano, senão ele cairia infinitamente! vou mandar uma foto de como está abaixo.
- Spoiler:
Meu objetivo é fazer um game puzzle, o jogo se passa em um cenário de gelo, por isso o sliding. Ainda tenho que procurar como criar objetivos e outras coisinhas, mas uma coisa de cada vez senão eu não dou conta, primeiro quero resolver coisas mais simples como esta. Não sei se já jogou algum jogo da franquia pokémon, mas na parte de gelo, ele vai deslizando até encontrar a saída, meu objetivo e criar um game disso, mas ta dificil. Quero fazer isso pra celular, mas primeiro quero terminar no PC e depois ajustar para manda pro celular, o que acham? hahahaha
Eu to tentando terminar menu que você ensinou também, já que não consigo avançar aqui, vou fazendo outras coisas pra n perder tempo haha
OBS: Sobre sua pergunta do RigydBody, está na imagem que mandei.
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Fiz um sisteminha básico, tente ver se serve
Qualquer parte do script que você não entenda, pode pedir :D
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
private Rigidbody2D PlayerRigidbody;
public float velocidade = 5;
public float velDeResposta = 2;
void Start() {
PlayerRigidbody = GetComponent<Rigidbody2D> ();
PlayerRigidbody.gravityScale = 0;
}
void Update() {
Vector2 proximaVelocidade = new Vector2(velocidade*Input.GetAxis("Horizontal"), velocidade*Input.GetAxis("Vertical"));
PlayerRigidbody.velocity = Vector2.Lerp (PlayerRigidbody.velocity, proximaVelocidade, Time.deltaTime*velDeResposta);
}
}
Qualquer parte do script que você não entenda, pode pedir :D
Re: [ajuda] Sistema de Sliding (2D)
MarcosSchultz escreveu:Fiz um sisteminha básico, tente ver se serve
Qualquer parte do script que você não entenda, pode pedir :D
Beleza! Primeiro passo foi dado! Agora eu preciso que isso seja automatico, por exemplo, se eu pressionar um botão de movimento (a,s,d,w) vou andar na mesma direção até colidir em algo.
Da pra usar o mesmo código mas restringindo movimento? tipo:
- Código:
if (Input.GetKeyDown("a")){
PlayerRigidbody.MovePosition(PlayerRigidbody.position - new Vector2(1, 0));
PlayerRidigbody.rotation = false
Quero usar aqueles blocos de gelo para serem os obstáculos que iram parar o meu player, além das próprias paredes, é claro. Eu ainda não fiz, mas terá uma saída, que será o objetivo, você terá que usar movimentos corretos até conseguir chegar na saída, entendeu mais ou menos como funcionará o jogo? Acho que compreendendo como eu preciso seja melhor para você me ajudar =)
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Depois que o input foi dado, o Player vai poder interferir na direção do Player denovo?
Re: [ajuda] Sistema de Sliding (2D)
MarcosSchultz escreveu:Depois que o input foi dado, o Player vai poder interferir na direção do Player denovo?
A intenção é que não seja possível, só pode interferir novamente quando colidir em um objeto ou na parede. Você entendeu o projeto mais ou menos? Eu acho que vai ficar bacana, estava precisando de um forúm desses para aprender mais =D
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Acho que isto vai servir:
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
private Rigidbody2D PlayerRigidbody2D;
public float velocidade = 5;
public float velDeResposta = 5;
private Vector2 ProximaVelocidade;
void Start() {
PlayerRigidbody2D = GetComponent<Rigidbody2D> ();
PlayerRigidbody2D.gravityScale = 0;
PlayerRigidbody2D.constraints = RigidbodyConstraints2D.FreezeRotation; //comente esta linha se quiser liberar a rotação do objeto
}
void Update() {
if(PlayerRigidbody2D.velocity.magnitude < 0.1f){
if (Input.GetKeyDown("a")){
ProximaVelocidade = new Vector2 (-velocidade, 0);
}
else if (Input.GetKeyDown("d")){
ProximaVelocidade = new Vector2 (velocidade, 0);
}
else if (Input.GetKeyDown("w")){
ProximaVelocidade = new Vector2 (0, velocidade);
}
else if (Input.GetKeyDown("s")){
ProximaVelocidade = new Vector2 (0, -velocidade);
}
}
PlayerRigidbody2D.velocity = Vector2.Lerp (PlayerRigidbody2D.velocity, ProximaVelocidade, Time.deltaTime*velDeResposta);
}
void OnCollisionEnter2D(){
ProximaVelocidade = new Vector2 (0, 0);
}
}
Re: [ajuda] Sistema de Sliding (2D)
MarcosSchultz escreveu:Acho que isto vai servir:
Ficou Perfeito! Muito Obrigado! Agora vou tentar resolver outras coisinhas, mas muito obrigado!
Se eu precisar da sua ajuda novamente eu comendo aqui (Com certeza precisarei haha)
Mas antes, pode me dar umas dicas para arrumar o cenário? Ficar tudo metricamente correto e arrumadinho para não ocorrerem bugs etc =)
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
dfop02 escreveu:MarcosSchultz escreveu:Acho que isto vai servir:
Ficou Perfeito! Muito Obrigado! Agora vou tentar resolver outras coisinhas, mas muito obrigado!
Se eu precisar da sua ajuda novamente eu comendo aqui (Com certeza precisarei haha)
Mas antes, pode me dar umas dicas para arrumar o cenário? Ficar tudo metricamente correto e arrumadinho para não ocorrerem bugs etc =)
no transform dos objetos, deixe eles em posições exatas, sem virgolas... e segure a tecla CTRL enquanto move os objetos, para deixa-los sempre em posições exatas
Re: [ajuda] Sistema de Sliding (2D)
MarcosSchultz escreveu:dfop02 escreveu:MarcosSchultz escreveu:Acho que isto vai servir:
Ficou Perfeito! Muito Obrigado! Agora vou tentar resolver outras coisinhas, mas muito obrigado!
Se eu precisar da sua ajuda novamente eu comendo aqui (Com certeza precisarei haha)
Mas antes, pode me dar umas dicas para arrumar o cenário? Ficar tudo metricamente correto e arrumadinho para não ocorrerem bugs etc =)
no transform dos objetos, deixe eles em posições exatas, sem virgolas... e segure a tecla CTRL enquanto move os objetos, para deixa-los sempre em posições exatas
Agora estou tentando utilizar um "Loadlevel" que achei na internet mas não estou entendendo essa merda direito. A deia é ativar o loadlevel quando encostar na porta que eu fiz, mas antes de ir para o próx lvl, esperar entre um e dois segundos para ativar a animação da porta abrindo. Adicionei uma BoxCollider2D nela, e nomeei de "Door" no script. Fiz a mesma coisa com a Animation da porta etc. A parte da animação eu não sei fazer, o code que eu encontrei pra isso foi esse (já está com o nome da cena correta):
- Código:
function OnCollisionEnter(other : Collision){
if(other.gameObject.name == "SomeObject"){
SceneManager.loadlevel("Stage_2");
}
if(other.gameObject.tag == "SomeTag"){
SceneManager.LoadScene("Stage_2");
}
}
Eu não substitui os outros porque não entendi, poderia me explicar, ou se estiver errado, me mostrar o certo?
Outro detalhe, a função "function" não funciona, eu procurei para saber qual o "using" para ativar isso mas não encontrei, falaram que é o using System.Collections; mas ja tinha e ela escrita e não funciona. Obrigado novamente e desculpa ficar incomodando! =s
Muito Obrigado mais uma vez por antes e por agora novamente =)
------Edit------
Eu tentei, tentei e tentei dnv e cheguei a esse resultado, eu acho que que funcionou, pois não deu erro, mas ainda assim não carregou o Stage_2 que eu tenho pronto aqui, olha (bem mais simples...) :
- Código:
//LoadLevel
if (PlayerRigidbody.IsTouching(Door)) {
SceneManager.LoadScene("Stage_2");
}
dfop02- Avançado
- PONTOS : 3259
REPUTAÇÃO : 2
Idade : 27
Respeito as regras :
Re: [ajuda] Sistema de Sliding (2D)
Bom, ai já seria uma dúvida a parte... seria interessante criar outro tópico, para separar os assuntos (facilita para os leitores novos do fórum)
E cuidado com o palavreado :D
E cuidado com o palavreado :D
Tópicos semelhantes
» [AJUDA]Preciso de ajuda em um script relacionado ao vídeo Sistema de escolha de personagen
» [Ajuda] Sistema de Chuva
» [AJUDA] Sistema de rodadas
» Ajuda com sistema de colisão
» [AJUDA] Sistema de portas
» [Ajuda] Sistema de Chuva
» [AJUDA] Sistema de rodadas
» Ajuda com sistema de colisão
» [AJUDA] Sistema de portas
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos