movimentação por posição
4 participantes
Página 1 de 1
movimentação por posição
Quando voce ta fazendo movimentação trocando a posiçao, por exemplo
if(Input... {
transform.position += new Vector(-50, 0, 0); }
Ele vai de 50 em 50 pra esquerda, mas se tiver um objeto no lugar, como impedir de fazer esse movimento?
eu tentei aumentar o rb do objeto, mas ou o player bate e volta, ou ultrapassa o obj
if(Input... {
transform.position += new Vector(-50, 0, 0); }
Ele vai de 50 em 50 pra esquerda, mas se tiver um objeto no lugar, como impedir de fazer esse movimento?
eu tentei aumentar o rb do objeto, mas ou o player bate e volta, ou ultrapassa o obj
giowde- Avançado
- PONTOS : 2164
REPUTAÇÃO : 17
Respeito as regras :
Re: movimentação por posição
Modifique o script para que o seu player somente movimente-se se não houver um objeto na sua frente.
Você pode fazer isso por meio de uma variável do tipo Boleana (bool) e verificar se ela é verdadeira ou não, caso seja verdadeira o objeto não anda, caso não seja ele poderá mover-se.
Ponha um Collider no objeto que seja a "parede" (no caso um próprio de qualquer instância) e por meio do CallBack OnCollisionEnter naquele código do inserido no player, se ele estiver colidindo a variável é atribuída como true, caso contrário, false.
Detalhe, o player também deve ter um Collider.
Caso ninguém poste um script aqui e você ainda não tenha conseguido resolver teu problema, busco postar um código com a solução, no momento estou sem porte do meu Desktop. Espero ter ajudado.
Você pode fazer isso por meio de uma variável do tipo Boleana (bool) e verificar se ela é verdadeira ou não, caso seja verdadeira o objeto não anda, caso não seja ele poderá mover-se.
Ponha um Collider no objeto que seja a "parede" (no caso um próprio de qualquer instância) e por meio do CallBack OnCollisionEnter naquele código do inserido no player, se ele estiver colidindo a variável é atribuída como true, caso contrário, false.
Detalhe, o player também deve ter um Collider.
Caso ninguém poste um script aqui e você ainda não tenha conseguido resolver teu problema, busco postar um código com a solução, no momento estou sem porte do meu Desktop. Espero ter ajudado.
Antônio T- ProgramadorMaster
- PONTOS : 1851
REPUTAÇÃO : 21
Idade : 23
Áreas de atuação : C# (.NET Framework, Unity), Linguagens Web (Electron) e Lua (TIC 80, Löve 2D); Pixel Arte (Aseprite)
Respeito as regras :
Re: movimentação por posição
Eu tentei fazer do jeito que voce falou, mas não consegui, em seguida tentei usar linecast, porem tambem não deu certo, o player chegava no alvo e entao a bool pode mover virava false e tambem queria especificar que só não pode mover na diração onde esta o obstaculoAntônio T escreveu:Modifique o script para que o seu player somente movimente-se se não houver um objeto na sua frente.
Você pode fazer isso por meio de uma variável do tipo Boleana (bool) e verificar se ela é verdadeira ou não, caso seja verdadeira o objeto não anda, caso não seja ele poderá mover-se.
Ponha um Collider no objeto que seja a "parede" (no caso um próprio de qualquer instância) e por meio do CallBack OnCollisionEnter naquele código do inserido no player, se ele estiver colidindo a variável é atribuída como true, caso contrário, false.
Detalhe, o player também deve ter um Collider.
Caso ninguém poste um script aqui e você ainda não tenha conseguido resolver teu problema, busco postar um código com a solução, no momento estou sem porte do meu Desktop. Espero ter ajudado.
ps. instanciei a parede no target
public bool podeMover = false;
public Transform target;
void Update () {
if (Physics.Linecast(transform.position, target.position))
{
podeMover = false;
}
else podeMover = true;
if (podeMover == true) {
if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.position += new Vector3(-67, 0, 0);
giowde- Avançado
- PONTOS : 2164
REPUTAÇÃO : 17
Respeito as regras :
Re: movimentação por posição
- giowde:
- giowde escreveu:
Eu tentei fazer do jeito que voce falou, mas não consegui, em seguida tentei usar linecast, porem tambem não deu certo, o player chegava no alvo e entao a bool pode mover virava false e tambem queria especificar que só não pode mover na diração onde esta o obstaculoAntônio T escreveu:Modifique o script para que o seu player somente movimente-se se não houver um objeto na sua frente.
Você pode fazer isso por meio de uma variável do tipo Boleana (bool) e verificar se ela é verdadeira ou não, caso seja verdadeira o objeto não anda, caso não seja ele poderá mover-se.
Ponha um Collider no objeto que seja a "parede" (no caso um próprio de qualquer instância) e por meio do CallBack OnCollisionEnter naquele código do inserido no player, se ele estiver colidindo a variável é atribuída como true, caso contrário, false.
Detalhe, o player também deve ter um Collider.
Caso ninguém poste um script aqui e você ainda não tenha conseguido resolver teu problema, busco postar um código com a solução, no momento estou sem porte do meu Desktop. Espero ter ajudado.
ps. instanciei a parede no target
public bool podeMover = false;
public Transform target;
void Update () {
if (Physics.Linecast(transform.position, target.position))
{
podeMover = false;
}
else podeMover = true;
if (podeMover == true) {
if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.position += new Vector3(-67, 0, 0);
Antônio T- ProgramadorMaster
- PONTOS : 1851
REPUTAÇÃO : 21
Idade : 23
Áreas de atuação : C# (.NET Framework, Unity), Linguagens Web (Electron) e Lua (TIC 80, Löve 2D); Pixel Arte (Aseprite)
Respeito as regras :
Re: movimentação por posição
Antônio T escreveu:Interessante, no teu caso, gostaria de saber como está implementando a movimentação e que tipo de game está desenvolvendo, dependendo do naipe do jogo aquela minha ideia torna-se inútil.
- giowde:
giowde escreveu:Eu tentei fazer do jeito que voce falou, mas não consegui, em seguida tentei usar linecast, porem tambem não deu certo, o player chegava no alvo e entao a bool pode mover virava false e tambem queria especificar que só não pode mover na diração onde esta o obstaculoAntônio T escreveu:Modifique o script para que o seu player somente movimente-se se não houver um objeto na sua frente.
Você pode fazer isso por meio de uma variável do tipo Boleana (bool) e verificar se ela é verdadeira ou não, caso seja verdadeira o objeto não anda, caso não seja ele poderá mover-se.
Ponha um Collider no objeto que seja a "parede" (no caso um próprio de qualquer instância) e por meio do CallBack OnCollisionEnter naquele código do inserido no player, se ele estiver colidindo a variável é atribuída como true, caso contrário, false.
Detalhe, o player também deve ter um Collider.
Caso ninguém poste um script aqui e você ainda não tenha conseguido resolver teu problema, busco postar um código com a solução, no momento estou sem porte do meu Desktop. Espero ter ajudado.
ps. instanciei a parede no target
public bool podeMover = false;
public Transform target;
void Update () {
if (Physics.Linecast(transform.position, target.position))
{
podeMover = false;
}
else podeMover = true;
if (podeMover == true) {
if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.position += new Vector3(-67, 0, 0);
void Update ( ) {
if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.position += new Vector3(-67, 0, 0);
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
transform.position += new Vector3(67, 0, 0);
{
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
transform.position += new Vector3(0, 0, -56);
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
transform.position += new Vector3(0, 0, 56);
}
O player anda em tiles 3d, plataformas, nao sei o termo
giowde- Avançado
- PONTOS : 2164
REPUTAÇÃO : 17
Respeito as regras :
Re: movimentação por posição
Este tópico foi criado no local incorreto e foi movido. Vamos manter a organização do fórum.
JohnRambo- Moderador
- PONTOS : 5175
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: movimentação por posição
não sabia, foi malJohnRambo escreveu:Este tópico foi criado no local incorreto e foi movido. Vamos manter a organização do fórum.
giowde- Avançado
- PONTOS : 2164
REPUTAÇÃO : 17
Respeito as regras :
Re: movimentação por posição
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Teste : MonoBehaviour {
private void Update () {
// Cada IF tem uma funcao de se movimentar
// Da para reduzir a quatidade de IF's mas poderia afetar a gameplay, entao nao mudei
if (Input.GetKeyDown (KeyCode.UpArrow)) {
MovementFunction (Vector3.right * -50);
}
if (Input.GetKeyDown (KeyCode.DownArrow)) {
MovementFunction (Vector3.right * 50);
}
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
MovementFunction (Vector3.forward * -50);
}
if (Input.GetKeyDown (KeyCode.RightArrow)) {
MovementFunction (Vector3.forward * 50);
}
}
public void MovementFunction (Vector3 direction) {
// Verifica se e possivel fazer o movimento
if (!checkMovement (direction)) {
// Movimenta o jogador
transform.position += direction;
}
}
public bool checkMovement (Vector3 direction) {
// Faz um linecast para verificar se existe colisao no caminho
return Physics.Linecast (transform.position, transform.position + direction);
}
}
Como você mesmo usou o Linecast, acho que não precisa explicar o funcionamento dele.. Então, tá aí a logica do game
Última edição por NKKF em Sáb Jan 18, 2020 7:26 pm, editado 2 vez(es) (Motivo da edição : Arrumar o código (tirar o debug que eu havia colocado))
NKKF- ProgramadorMaster
- PONTOS : 4821
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: movimentação por posição
- NKKF:
- NKKF escreveu:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Teste : MonoBehaviour {
private void Update () {
// Cada IF tem uma funcao de se movimentar
// Da para reduzir a quatidade de IF's mas poderia afetar a gameplay, entao nao mudei
if (Input.GetKeyDown (KeyCode.UpArrow)) {
MovementFunction (Vector3.right * -50);
}
if (Input.GetKeyDown (KeyCode.DownArrow)) {
MovementFunction (Vector3.right * 50);
}
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
MovementFunction (Vector3.forward * -50);
}
if (Input.GetKeyDown (KeyCode.RightArrow)) {
MovementFunction (Vector3.forward * 50);
}
}
public void MovementFunction (Vector3 direction) {
// Verifica se e possivel fazer o movimento
if (!checkMovement (direction)) {
// Movimenta o jogador
transform.position += direction;
}
}
public bool checkMovement (Vector3 direction) {
// Faz um linecast para verificar se existe colisao no caminho
return Physics.Linecast (transform.position, transform.position + direction);
}
}
Como você mesmo usou o Linecast, acho que não precisa explicar o funcionamento dele.. Então, tá aí a logica do game
Antônio T- ProgramadorMaster
- PONTOS : 1851
REPUTAÇÃO : 21
Idade : 23
Áreas de atuação : C# (.NET Framework, Unity), Linguagens Web (Electron) e Lua (TIC 80, Löve 2D); Pixel Arte (Aseprite)
Respeito as regras :
Tópicos semelhantes
» A Arma mudar de posição de acordo coma movimentação
» Como transformo a posição de um objeto em outra posição?
» posição de cubos..
» Posiçao da corrida?
» Posiçao ao iniciar ?
» Como transformo a posição de um objeto em outra posição?
» posição de cubos..
» Posiçao da corrida?
» Posiçao ao iniciar ?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos