Travar movimento pra frente
2 participantes
Página 1 de 1
Travar movimento pra frente
Fala gente blz?
venho de novo mais noob do que nunca pedir um help ^^
estou fazendo um projeto parecido com legend of grimrock, com enorme dificuldade to conseguindo um mínimo avanço ^^
tenho script do movimento do player funcionando ele ta com character controller e se move de 1 em 1 cubo
detecta o inimigo a 4 a frente... ate ai tudo bem problema que ele atravessa o inimigo se eu ir pra cima '-'
queria uma solução(gambiarra mesmo) de fazer ele não avançar somente pra frente do inimigo
vou deixar o código só pra tentar uma noção pq ta tudo bagunçado ainda ^^
quem puder dar uma luz agradeço des de já
venho de novo mais noob do que nunca pedir um help ^^
estou fazendo um projeto parecido com legend of grimrock, com enorme dificuldade to conseguindo um mínimo avanço ^^
tenho script do movimento do player funcionando ele ta com character controller e se move de 1 em 1 cubo
detecta o inimigo a 4 a frente... ate ai tudo bem problema que ele atravessa o inimigo se eu ir pra cima '-'
queria uma solução(gambiarra mesmo) de fazer ele não avançar somente pra frente do inimigo
vou deixar o código só pra tentar uma noção pq ta tudo bagunçado ainda ^^
quem puder dar uma luz agradeço des de já
- Código:
using UnityEngine;
using System.Collections;
public class PlayerMove : MonoBehaviour {
public float movSpeed = 4.0f;
Vector3 pos;
public Transform tr ;
bool moving = false;
bool rotating = false;
public float rotSpeed = 360f;
float rotDegrees = 0f;
Quaternion rotToAngle ;
void Start () {
pos = transform.position;
}
void Update () {
if (Physics.Raycast (transform.position, transform.forward, 4)) {
Debug.Log ("Achou inimigo");
}
if (!moving && !rotating) {
if (Input.GetKey(KeyCode.D) && tr.position == pos) {
pos += transform.right;
moving=true;
} else if (Input.GetKey(KeyCode.A) && tr.position == pos) {
pos += -transform.right;
moving=true;
} else if (Input.GetKey(KeyCode.W) && tr.position == pos) {
pos += transform.forward;
moving=true;
} else if (Input.GetKey(KeyCode.S) && tr.position == pos) {
pos += -transform.forward;
moving=true;
} else if (Input.GetKey(KeyCode.Q) && tr.position == pos) {
rotDegrees -= 90f;
rotToAngle = Quaternion.Euler(0, rotDegrees, 0);
rotating = true;
} else if (Input.GetKey(KeyCode.E) && tr.position == pos) {
rotDegrees += 90f;
rotToAngle = Quaternion.Euler(0, rotDegrees, 0);
rotating = true;
}
}
if (moving) {
if (Vector3.Distance(transform.position,pos) < 0.01f){
transform.position = pos;
moving=false;
} else {
transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * movSpeed);
}
}
if (rotating) {
if (Quaternion.Angle(transform.rotation,rotToAngle) <10f) {
transform.rotation = rotToAngle;
rotating=false;
} else {
transform.rotation = Quaternion.RotateTowards(transform.rotation, rotToAngle, rotSpeed * Time.deltaTime);
}
}
}
/*void OnTriggerStay (Collider other) {
}*/
}
speedluk- Avançado
- PONTOS : 2677
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Travar movimento pra frente
Oi, voltei aos meus estudos recentemente, e pensei em uma gambiarra que possa te ajudar:
crie uma bool chamada inimigonafrente.
crie um detector ontrigger (talvez com tag do tipo do/de inimigo) ao entrar ele vai alterar essa bool para true.
antes do movimento de ir pra frente faça o script perguntar se essa bool está false. // se estiver true não libera o movimento de ir pra frente.
no final dos script de movimento faça a bool voltar ao padrão para n travar o boneco pra sempre.
crie uma bool chamada inimigonafrente.
crie um detector ontrigger (talvez com tag do tipo do/de inimigo) ao entrar ele vai alterar essa bool para true.
antes do movimento de ir pra frente faça o script perguntar se essa bool está false. // se estiver true não libera o movimento de ir pra frente.
no final dos script de movimento faça a bool voltar ao padrão para n travar o boneco pra sempre.
Nightos- Iniciante
- PONTOS : 1827
REPUTAÇÃO : 0
Respeito as regras :
Re: Travar movimento pra frente
estou limitado a essa sugestão por falta de conhecimento, talvez haja outras soluções ;D abrç.Nightos escreveu:Oi, voltei aos meus estudos recentemente, e pensei em uma gambiarra que possa te ajudar:
crie uma bool chamada inimigonafrente.
crie um detector ontrigger (talvez com tag do tipo do/de inimigo) ao entrar ele vai alterar essa bool para true.
antes do movimento de ir pra frente faça o script perguntar se essa bool está false. // se estiver true não libera o movimento de ir pra frente.
no final dos script de movimento faça a bool voltar ao padrão para n travar o boneco pra sempre.
Nightos- Iniciante
- PONTOS : 1827
REPUTAÇÃO : 0
Respeito as regras :
Re: Travar movimento pra frente
boa noite Nightos muito obrigado por essa sugestão ate funciona em um certo modo mas tentei isso em uma das vezes que estava queimando a cabeça mas funciona igual a bool do moving que tentei também setar para false com inimigo entrar na trigger mas ai trava em geral os movimentos e não anda pra trás e nem rotaciona =/
mais de madrugada vou queimar a ideia mais um pouco e talvez ate refazer um outro código mas creio que será com menos sucesso também ^^ pois meu conhecimento e extremamente limitado ainda também
mas de qualquer forma muito obrigado
mais de madrugada vou queimar a ideia mais um pouco e talvez ate refazer um outro código mas creio que será com menos sucesso também ^^ pois meu conhecimento e extremamente limitado ainda também
mas de qualquer forma muito obrigado
speedluk- Avançado
- PONTOS : 2677
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Tópicos semelhantes
» Travar movimentação/rotação de um child.
» Travar animação
» Travar a camera do FirstPersoController
» [RESOLVIDO] Travar o Objeto
» Executar dois jogos ao mesmo tempo sem travar uma das janelas
» Travar animação
» Travar a camera do FirstPersoController
» [RESOLVIDO] Travar o Objeto
» Executar dois jogos ao mesmo tempo sem travar uma das janelas
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos