Duvida player mover
4 participantes
Página 1 de 1
Duvida player mover
galera, me desculpem abrir um topico somente pra isso, mas ja não aguento mais, tentei de tudo, o que me responderam nos topicos, pesquisei na net, olhei no scrips dos first e third person do unity, mas não encontrei algo que eu queria, seguinte...
sabe qunado vcs colocam o personagem para andar, ok tudo bem ele vai e anda normalmente com transform.translate, só que com translate ele quando bate na parede e eu continuo a apertar o W
(por exemplo) ele continua indo pra frente e kikando na parede ou objecto que esteja na frente dele, quando eu coloco rigidibody.addforce ele para de dar essas qkikadas nas paredes, mas ele meio que derrapa quando eu paro de apertar o botão ele continua indo um pouquinho pra frente e parando gradualmente, eu quero que algo pare de andar instantaneamente quando eu paro de apertar tal botão, assim como no transform.translate, mas que não fique kikando nas paredes como no addforce, entende??
e eu ja tentei um outro mdoo tambem, so que nele tem outro problema, quando eu puro e aperto para andar tudo bem ele vai para frente, mas se eu paro de apertar ele continua indo para frente (ainda pulando) quero algo como o mario faz nos jogos dele entende, eu ja fiz 4 joguinhos sempre adiando minhas outras ideias por conta desse problema que eu sempre tive, e por mais que eu pesquise ou tente eu não consigo fazer como eu quero =\ desde ja agradeço de coração...
sabe qunado vcs colocam o personagem para andar, ok tudo bem ele vai e anda normalmente com transform.translate, só que com translate ele quando bate na parede e eu continuo a apertar o W
(por exemplo) ele continua indo pra frente e kikando na parede ou objecto que esteja na frente dele, quando eu coloco rigidibody.addforce ele para de dar essas qkikadas nas paredes, mas ele meio que derrapa quando eu paro de apertar o botão ele continua indo um pouquinho pra frente e parando gradualmente, eu quero que algo pare de andar instantaneamente quando eu paro de apertar tal botão, assim como no transform.translate, mas que não fique kikando nas paredes como no addforce, entende??
e eu ja tentei um outro mdoo tambem, so que nele tem outro problema, quando eu puro e aperto para andar tudo bem ele vai para frente, mas se eu paro de apertar ele continua indo para frente (ainda pulando) quero algo como o mario faz nos jogos dele entende, eu ja fiz 4 joguinhos sempre adiando minhas outras ideias por conta desse problema que eu sempre tive, e por mais que eu pesquise ou tente eu não consigo fazer como eu quero =\ desde ja agradeço de coração...
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
use o MovePosition do rigidbody
segue o exemplo a baixo
segue o exemplo a baixo
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Move: MonoBehaviour
{
public Vector3 direction;
public float speed;
private Rigidbody rigidBody;
void Start()
{
rigidBody = GetComponent<Rigidbody>();
rigidBody.freezeRotation = true;
}
void Update()
{
CalcDirection();
}
void FixedUpdate()
{
rigidBody.MovePosition(rigidBody.position + direction * Time.deltaTime);
}
void CalcDirection()
{
Vector3 moveHorizontal = transform.right * Input.GetAxis("Horizontal");
Vector3 moveVertical = transform.forward * Input.GetAxis("Vertical");
direction = (moveHorizontal + moveVertical).normalized * speed;
}
}
Última edição por weslleyFx em Qui Abr 14, 2016 11:49 am, editado 1 vez(es)
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Duvida player mover
cara muito obrigado pela ajuda, mas pelo teste que eu fiz aqui agora, continua o que eu não queria, quando eu paro de apertar para o player andar, ele continua andando =\
eu usei esses 3 modelos ja e nada do que eu queria até agora
http://transform.Translate(0,0,velocidade*Time.deltaTime);
http://rigidBod.AddRelativeTorque (Vector3.forward * velocidade);
rigidBod.MovePosition(Vector3.forward *velocidade);
o ultimo foi o que vc passou, eu to usando JS e prefiro colocar pra mover pelos botões pois não sei converter horizontal e vertical para os ui buttons do unity para android :D
eu usei esses 3 modelos ja e nada do que eu queria até agora
http://transform.Translate(0,0,velocidade*Time.deltaTime);
http://rigidBod.AddRelativeTorque (Vector3.forward * velocidade);
rigidBod.MovePosition(Vector3.forward *velocidade);
o ultimo foi o que vc passou, eu to usando JS e prefiro colocar pra mover pelos botões pois não sei converter horizontal e vertical para os ui buttons do unity para android :D
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
- Código:
GetComponent<Rigidbody>().velocity
isto resolve todos os seus problemas
Re: Duvida player mover
marcos muito obrigado, ai caso se aperto um botão ele vai acionar o comando assim né???
rigidBod.velocity = Vector3.forward*velocidade;
ta certo? pois se tiver fica esquisito, tipo eu estou andando pra frente, se eu pular e continuar com o botão de andar segurado, ele vai indo pra frente mas vai continuar caindo beemmmm devagar, caso eu solte o botão de andar ai sim ele vai na velocidade normal =\
rigidBod.velocity = Vector3.forward*velocidade;
ta certo? pois se tiver fica esquisito, tipo eu estou andando pra frente, se eu pular e continuar com o botão de andar segurado, ele vai indo pra frente mas vai continuar caindo beemmmm devagar, caso eu solte o botão de andar ai sim ele vai na velocidade normal =\
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
Aproveitando o tema do post, Marcos tem muita diferença entre o CharacterController e o RigidBody em relação a movimentação? O que pude observar até agora, foi em relação ao rigidbody seguir a risca a direção inserida e o CharacterController seguir na direção apontada pela camera, tem algo a mais?MarcosSchultz escreveu:
- Código:
GetComponent<Rigidbody>().velocity
isto resolve todos os seus problemas
mrariel2011- Avançado
- PONTOS : 3360
REPUTAÇÃO : 6
Idade : 25
Áreas de atuação : Modelagem(Basica)
Programação js, c#
Respeito as regras :
Re: Duvida player mover
no script que estou usando esta assim...
if (Input.GetKey("w") || andarFrente == true)
{
rigidBod.velocity = Vector3.forward*velocidade;
}
e o player esta se comportando desse jeito...
https://www.youtube.com/watch?v=NLWDK4w-_v4&feature=youtu.be
para frente é do jeito que esta ai em cima
e para traz é no transform.translate masss, no translate ele fica quicando na parede
if (Input.GetKey("w") || andarFrente == true)
{
rigidBod.velocity = Vector3.forward*velocidade;
}
e o player esta se comportando desse jeito...
https://www.youtube.com/watch?v=NLWDK4w-_v4&feature=youtu.be
para frente é do jeito que esta ai em cima
e para traz é no transform.translate masss, no translate ele fica quicando na parede
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
Diga Édipo, o jogador irá se mover nas 4 direções? ou apenas para frente e para traz?
Especifique detalhadamente como você pretende fazer o movimento, e se possível, poste o script atual de movimentação, que eu ajeito ele
Especifique detalhadamente como você pretende fazer o movimento, e se possível, poste o script atual de movimentação, que eu ajeito ele
Re: Duvida player mover
mrariel2011 escreveu:Aproveitando o tema do post, Marcos tem muita diferença entre o CharacterController e o RigidBody em relação a movimentação? O que pude observar até agora, foi em relação ao rigidbody seguir a risca a direção inserida e o CharacterController seguir na direção apontada pela camera, tem algo a mais?MarcosSchultz escreveu:
- Código:
GetComponent<Rigidbody>().velocity
isto resolve todos os seus problemas
O characterController nunca deita, nunca mesmo, nem a pau
ele ficará sempre na posição vertical, jamais horizontal... E tem algumas funções interessantes desenvolvidas especificamente para o personagem do jogador, o que ajuda muito no desenvolvimento de qualquer jogo
Re: Duvida player mover
para as 4 direções Marcos, bem ficaria muito grato de vc ajeitar o script, mas sendo sincero eu quero aprender uma função que seja melhor para o que eu quero fazer no momento, no mais, ta ai meu script
#pragma strict
var velocidade = 0.0;
var rigidBod : Rigidbody;
var colisaoRayCast : RaycastHit;
static var colisaoFrente : boolean;
static var colisaoTraz : boolean;
static var colisaoDireita : boolean;
static var colisaoEsquerda : boolean;
var forcaPulo = 5000;
var colisaoChao : boolean;
static var ColiCaixa : boolean;
//static var posPlayer : Vector3;
var andarDireita : boolean;
var andarEsquerda : boolean;
var andarFrente : boolean;
var andarTraz : boolean;
var raio : Ray;
static var destroirPlayer : boolean;
function Start () {
destroirPlayer = false;
andarFrente = false;
andarTraz = false;
andarEsquerda = false;
andarDireita = false;
colisaoDireita = false;
colisaoEsquerda = false;
rigidBod = GetComponent.<Rigidbody>();
colisaoChao = false;
ColiCaixa = false;
}
function Update () {
if (destroirPlayer == true)
{
Destroy(gameObject);
}
//GetComponent.<Rigidbody>().AddForce(Vector3(0.0, -9.81, 0.0), ForceMode.Acceleration);
//posPlayer = transform.position;
/*
if (ColiCaixa == true)
{
rigidBod.AddForce(transform.up * forcaPulo/1.5);
ColiCaixa = false;
}
if (Physics.Raycast(transform.position,-transform.up,colisaoRayCast,0.95))
{
if (colisaoRayCast.collider.gameObject.tag == "caixa" )
{
}
}
if ( Physics.Raycast( transform.position, -transform.up, colisaoRayCast, 1.3 ))
{
if (colisaoRayCast.transform.gameObject.tag == "inimigo")
{
rigidBod.AddForce(transform.up * forcaPulo/2);
Destroy(colisaoRayCast.transform.gameObject,0.1);
}
}
*/
if (Physics.Raycast(transform.position,-transform.up,1.10))
{
colisaoChao = true;
}
else
{
colisaoChao = false;
}
if (Input.GetKey("w") || andarFrente == true)
{
if (colisaoFrente == false)
{
transform.Translate(0,0,velocidade*Time.deltaTime);
http://transform.Translate(0,0,velocidade*Time.deltaTime);
http://rigidBod.AddRelativeTorque (Vector3.forward * velocidade);
http://rigidBod.MovePosition(Vector3.forward *velocidade);
http://rigidBod.velocity = Vector3.forward*velocidade;
}
}
if (Input.GetKey("s") || andarTraz == true)
{
if (colisaoTraz == false)
{
transform.Translate(0,0,-velocidade*Time.deltaTime);
}
}
if (Input.GetKey("d") || andarDireita == true)
{
if (colisaoDireita == false)
{
transform.Translate(velocidade*Time.deltaTime,0,0);
}
}
if (Input.GetKey("a") || andarEsquerda == true)
{
if (colisaoEsquerda == false)
{
transform.Translate(-velocidade*Time.deltaTime,0,0);
}
}
if (Input.GetKeyDown("space") && colisaoChao == true)
{
rigidBod.AddForce(transform.up * forcaPulo);
}
var forward : Vector3 = transform.TransformDirection(Vector3(0.5,-1.1,0) ) * 0.9;
Debug.DrawRay (transform.position, forward, Color.green);
}
function OnCollisionEnter(ColiChao : Collision) {
if (ColiChao.gameObject)
{
colisaoChao = true;
}
if (ColiChao.gameObject.tag == "inimigo")
{
rigidBod.AddForce(transform.up * forcaPulo);
}
}
function OnCollisionExit(SaiColiChao : Collision) {
if (SaiColiChao.gameObject)
{
colisaoChao = false;
}
}
function Pular () {
if (colisaoChao == true)
{
rigidBod.AddForce(transform.up * forcaPulo);
}
}
//ANDAR PARA FRENTE
function AndarFrente () {
andarFrente = true;
}
function PararAndarFrente () {
andarFrente = false;
}
//ANDAR PARA TRAZ
function AndarTraz () {
andarTraz = true;
}
function PararAndarTraz () {
andarTraz = false;
}
//ANDAR PARA DIREITA
function AndarDireita () {
andarDireita = true;
}
function PararAndarDireita () {
andarDireita = false;
}
//ANDAR PARA ESQUERDA
function AndarEsquerda () {
andarEsquerda = true;
}
function PararAndarEsquerda () {
andarEsquerda = false;
}
#pragma strict
var velocidade = 0.0;
var rigidBod : Rigidbody;
var colisaoRayCast : RaycastHit;
static var colisaoFrente : boolean;
static var colisaoTraz : boolean;
static var colisaoDireita : boolean;
static var colisaoEsquerda : boolean;
var forcaPulo = 5000;
var colisaoChao : boolean;
static var ColiCaixa : boolean;
//static var posPlayer : Vector3;
var andarDireita : boolean;
var andarEsquerda : boolean;
var andarFrente : boolean;
var andarTraz : boolean;
var raio : Ray;
static var destroirPlayer : boolean;
function Start () {
destroirPlayer = false;
andarFrente = false;
andarTraz = false;
andarEsquerda = false;
andarDireita = false;
colisaoDireita = false;
colisaoEsquerda = false;
rigidBod = GetComponent.<Rigidbody>();
colisaoChao = false;
ColiCaixa = false;
}
function Update () {
if (destroirPlayer == true)
{
Destroy(gameObject);
}
//GetComponent.<Rigidbody>().AddForce(Vector3(0.0, -9.81, 0.0), ForceMode.Acceleration);
//posPlayer = transform.position;
/*
if (ColiCaixa == true)
{
rigidBod.AddForce(transform.up * forcaPulo/1.5);
ColiCaixa = false;
}
if (Physics.Raycast(transform.position,-transform.up,colisaoRayCast,0.95))
{
if (colisaoRayCast.collider.gameObject.tag == "caixa" )
{
}
}
if ( Physics.Raycast( transform.position, -transform.up, colisaoRayCast, 1.3 ))
{
if (colisaoRayCast.transform.gameObject.tag == "inimigo")
{
rigidBod.AddForce(transform.up * forcaPulo/2);
Destroy(colisaoRayCast.transform.gameObject,0.1);
}
}
*/
if (Physics.Raycast(transform.position,-transform.up,1.10))
{
colisaoChao = true;
}
else
{
colisaoChao = false;
}
if (Input.GetKey("w") || andarFrente == true)
{
if (colisaoFrente == false)
{
transform.Translate(0,0,velocidade*Time.deltaTime);
http://transform.Translate(0,0,velocidade*Time.deltaTime);
http://rigidBod.AddRelativeTorque (Vector3.forward * velocidade);
http://rigidBod.MovePosition(Vector3.forward *velocidade);
http://rigidBod.velocity = Vector3.forward*velocidade;
}
}
if (Input.GetKey("s") || andarTraz == true)
{
if (colisaoTraz == false)
{
transform.Translate(0,0,-velocidade*Time.deltaTime);
}
}
if (Input.GetKey("d") || andarDireita == true)
{
if (colisaoDireita == false)
{
transform.Translate(velocidade*Time.deltaTime,0,0);
}
}
if (Input.GetKey("a") || andarEsquerda == true)
{
if (colisaoEsquerda == false)
{
transform.Translate(-velocidade*Time.deltaTime,0,0);
}
}
if (Input.GetKeyDown("space") && colisaoChao == true)
{
rigidBod.AddForce(transform.up * forcaPulo);
}
var forward : Vector3 = transform.TransformDirection(Vector3(0.5,-1.1,0) ) * 0.9;
Debug.DrawRay (transform.position, forward, Color.green);
}
function OnCollisionEnter(ColiChao : Collision) {
if (ColiChao.gameObject)
{
colisaoChao = true;
}
if (ColiChao.gameObject.tag == "inimigo")
{
rigidBod.AddForce(transform.up * forcaPulo);
}
}
function OnCollisionExit(SaiColiChao : Collision) {
if (SaiColiChao.gameObject)
{
colisaoChao = false;
}
}
function Pular () {
if (colisaoChao == true)
{
rigidBod.AddForce(transform.up * forcaPulo);
}
}
//ANDAR PARA FRENTE
function AndarFrente () {
andarFrente = true;
}
function PararAndarFrente () {
andarFrente = false;
}
//ANDAR PARA TRAZ
function AndarTraz () {
andarTraz = true;
}
function PararAndarTraz () {
andarTraz = false;
}
//ANDAR PARA DIREITA
function AndarDireita () {
andarDireita = true;
}
function PararAndarDireita () {
andarDireita = false;
}
//ANDAR PARA ESQUERDA
function AndarEsquerda () {
andarEsquerda = true;
}
function PararAndarEsquerda () {
andarEsquerda = false;
}
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
nada galera?? =\
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
Édipo escreveu:nada galera?? =\
??
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Duvida player mover
Tipo isto??? É em C#, e o nome do script é "Movimento"
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class Movimento : MonoBehaviour {
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
private CharacterController controlador;
void Start(){
controlador = GetComponent<CharacterController>();
}
void Update() {
if (controlador.isGrounded) {
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controlador.Move(moveDirection * Time.deltaTime);
}
}
Re: Duvida player mover
humm
e como converter isso para invez de vereficiar o eixo que eu cliquei pra ele andar, ser do tipo, teclas, tipo se eu clicar d vai para direita ao invez de verificar o eixo horizontal e vertical
e como converter isso para invez de vereficiar o eixo que eu cliquei pra ele andar, ser do tipo, teclas, tipo se eu clicar d vai para direita ao invez de verificar o eixo horizontal e vertical
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
Por que quer usar inputs??? Não tem muito sentido... más basta você adaptar para pegar os Inputs ué
Re: Duvida player mover
é pq aprendi um jeito de fazer o player andar com os ui button, ai no caso pra eu mudar pra pegar os inputs eu posso fazer isso nos if mesmo?? mas e como o parâmetro vai saber o lado de ir sendo que vai estar ...
moveDirection = transform.TransformDirection(moveDirection); ????
moveDirection = transform.TransformDirection(moveDirection); ????
Édipo- MembroAvançado
- PONTOS : 4006
REPUTAÇÃO : 62
Idade : 36
Respeito as regras :
Re: Duvida player mover
Bom, os inputs horizontal e vertical são como 2 variáveis, uma com nome horizontal e outra com vertical...
ambas vão de -1 até 1
então quando você aperta A por exemplo, faça "horizontal" receber -1.
quando você aperta D, faça "horizontal" receber 1.
e ai basta aplicar o horizontal no velocity do rigidbody...
ambas vão de -1 até 1
então quando você aperta A por exemplo, faça "horizontal" receber -1.
quando você aperta D, faça "horizontal" receber 1.
e ai basta aplicar o horizontal no velocity do rigidbody...
Tópicos semelhantes
» [Duvida] Duvida Com script de mover em direção ao mouse.
» [Duvida] Script de mover objeto usando o RigidBody
» PLAYER NAO MOVER ENQUANTO ESTA ABAIXADO
» Não Acho o Erro no Script - é um script para o player se mover
» (DÚVIDA) Mover câmera com Mouse
» [Duvida] Script de mover objeto usando o RigidBody
» PLAYER NAO MOVER ENQUANTO ESTA ABAIXADO
» Não Acho o Erro no Script - é um script para o player se mover
» (DÚVIDA) Mover câmera com Mouse
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos