SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Nitro para Carro
Firebase (Login com facebook)
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Duvida com API Vulkan Vs OpenGL -- Unity !!!!
Procura-se equipe para jogo de puzzle em 3º Pessoa
Ajuda jogo
duvida player quicando ao descer desnivel
cliente/servidor
Animação de abrir/fechar porta mais complexa
duvida sobre essa Ui e raycast
Duvida Tamanho do Mapa unity
[Formação de Equipe] - City Driving
Graficos bugados no android Unity 5
[ASSET] Script Arma Completo Incluso Recuo. Incluso outros Scripts
Clicar em um Sprite e realizar uma ação
[TUTORIAL] FPSController nadar e mergulhar, junto com efeito submerso
Ajuda com Colisões
mudar objeto ao clicar nele
Ajuda com um script(SmoothCamera)
Duvida em Desenhar UI -- HELP
Finalização Calculadora, fazer com que o jogador tente novamente
Como colocar musicas em um app?
[Duvida] Sobre Reference Resolution -> (Canvas)
Como criar navegador próprio em app?
[RESOLVIDO] Duvida sobre Edição de texto em imagem
Da pra criar Apps na Unity?
BUG MT CHATO. USANDO O PlayerPrefs. ME AJUDAAAAAAA PF
[RESOLVIDO] Camera não colide com parede
Há algum segredo em criações de I.A?
[RESOLVIDO] salvar as configurações para aparecer no game certo que o jogador configurou
Dica de estudos
[RESOLVIDO] Duvida Sobre C#
Script parando de funcionar quando maximizo a tela do game
Fazer uma seleção de personagens e seguir para o jogo com o personagem escolhido
Como faço para colocar unity em rede
personagem
Criar animações
Detectar movimento Joystick
tem como abrir arquivos de jogos já compilado?
Como criar rede neural para AI
[____ADMINISTRAÇÃO____] Gostaria da opinião de vocês...
[____ADMINISTRAÇÃO____] Alterações IMPORTANTES no fórum.
Navegador reiniciando no mobile dos IOS [WEBGL]
[RESOLVIDO] Dúvida Script OnTriggerEnter
Gerar APK
[TUTORIAL] Salvar dados com playerprefs facilmente.
É possível reproduzir som durante logo de abertura do jogo?
[TUTORIAL] Criação de Skins Realistas em 3D!
Command 888
Sistema de Yu-Gi-Oh - C O M P L E T O - Download 13/08
[RESOLVIDO] Como fazer uma calculadora recebendo o resultado do jogador? UNITY
Construção de um save das configurações e ir pro jogo com as config certas
Podem me ajudar com esse problema
Contagem de tempo em classes abstratas
[TUTORIAL] Controle 3ª pessoa com animações mecânicas (root motion)
[RESOLVIDO] Como mostrar o valor atual de uma variável do tipo Int em um text
Como se faz um dash?
Como permitir que o usuário escolha uma imagem para ser usada em um jogo?
[Projeto em Andamento] Favela Combat - Multiplayer online (Android & iOS)
[TUTORIAL] Sistema Pdv, Mercado, Padaria, Conveniência, Lojas Em Geral - C# VISUAL STUDIO
Diferenciar execução (mobile / desktop) WEBGL
Como mudar de camera assim que o player entrar no Trigger
WEBGL
Como faço para mover um objeto?
[TUTORIAL] Unity 5 - Sistema Completo de PORTAS E CHAVES
Ajuda em bug da Unity!
como mudar o material de um mesh que tem mas de 1 material por Script ?
[Duvida] Como funciona a coleta de dados e como é feito?
Teclado na Unity
Formação de equipe -- ASSALTO A BANCO--
Câmera estar limitada ao tamanho da tela
ESCOLA DE DESENVOLVIMENTO DE GAMES.
Mudar uma animação já existente com o clique em um botão UI
Cam
[RESOLVIDO] Minha imagem só aparece na scene
COMO EXPORTAR PARA IOS COM WINDOWS
Criei uma Grama com Shader Graph
[TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Joystick
Limite Máximo de tamanho de mapa na Unity?
Jogo Mobile (Leia)
Entender um script
[RESOLVIDO] Como Ativar Objeto Apenas na Frente Dele?
POR QUE O TOUCH MOBILE TRAVA COM ADMOB?
Qual o Tempo Máximo que vocês Jogaram um Jogo ?
Tocar audio
Todos os veiculos mudando de cor no multplayer, como resolver ?
[Projeto em Andamento] Brazil Combat
Background com bug
[Projeto] Omega Racers
[RESOLVIDO] Clones morrendo ao mesmo tempo?
Alguém pode me dizer o que esse script está fazendo?
HELP inimigo perseguir personagens
Html 5
1 exception was raised by workers: see the console for detail HELP
Acessar teclado nativo dispositivo, para inputFiled [WEBGL]
Como fazer uma animação parar em determinado frame?
Meu Jogo inspirado em resident evil 2 remake
Posso limitar o "Instantiate" para instanciar até uma quantidade X?
Hoje à(s) 6:32 pm
Hoje à(s) 6:22 pm
Hoje à(s) 6:06 pm
Hoje à(s) 5:02 pm
Hoje à(s) 4:48 pm
Hoje à(s) 2:25 pm
Hoje à(s) 1:29 pm
Hoje à(s) 11:47 am
Hoje à(s) 9:51 am
Hoje à(s) 3:47 am
Ontem à(s) 11:29 pm
Ontem à(s) 9:40 pm
Ontem à(s) 7:08 pm
Ontem à(s) 5:33 pm
Ontem à(s) 3:16 pm
Sab Ago 17, 2019 11:23 pm
Sab Ago 17, 2019 3:16 am
Sex Ago 16, 2019 11:27 pm
Sex Ago 16, 2019 8:50 pm
Sex Ago 16, 2019 12:19 pm
Sex Ago 16, 2019 12:07 pm
Sex Ago 16, 2019 10:58 am
Sex Ago 16, 2019 6:33 am
Qui Ago 15, 2019 6:42 pm
Qui Ago 15, 2019 4:02 pm
Qui Ago 15, 2019 12:10 pm
Qui Ago 15, 2019 11:57 am
Qua Ago 14, 2019 7:13 pm
Qua Ago 14, 2019 6:07 pm
Qua Ago 14, 2019 5:48 pm
Qua Ago 14, 2019 5:18 pm
Qua Ago 14, 2019 5:05 pm
Qua Ago 14, 2019 5:00 pm
Qua Ago 14, 2019 4:56 pm
Qua Ago 14, 2019 4:53 pm
Qua Ago 14, 2019 4:52 pm
Qua Ago 14, 2019 4:49 pm
Qua Ago 14, 2019 4:47 pm
Qua Ago 14, 2019 4:45 pm
Qua Ago 14, 2019 4:44 pm
Qua Ago 14, 2019 4:35 pm
Qua Ago 14, 2019 4:32 pm
Qua Ago 14, 2019 4:31 pm
Qua Ago 14, 2019 4:10 pm
Qua Ago 14, 2019 12:39 am
Ter Ago 13, 2019 10:23 pm
Ter Ago 13, 2019 10:03 pm
Ter Ago 13, 2019 7:53 pm
Ter Ago 13, 2019 6:33 pm
Ter Ago 13, 2019 4:26 pm
Ter Ago 13, 2019 4:10 pm
Seg Ago 12, 2019 11:25 pm
Seg Ago 12, 2019 8:31 pm
Seg Ago 12, 2019 6:17 pm
Seg Ago 12, 2019 12:51 pm
Dom Ago 11, 2019 7:54 pm
Dom Ago 11, 2019 10:17 am
Sab Ago 10, 2019 10:32 pm
Sab Ago 10, 2019 2:34 pm
Sex Ago 09, 2019 10:43 pm
Sex Ago 09, 2019 5:56 pm
Qui Ago 08, 2019 7:48 pm
Qui Ago 08, 2019 5:21 pm
Qui Ago 08, 2019 12:32 pm
Qui Ago 08, 2019 2:53 am
Qua Ago 07, 2019 10:57 pm
Qua Ago 07, 2019 8:10 pm
Qua Ago 07, 2019 7:16 pm
Qua Ago 07, 2019 4:29 pm
Qua Ago 07, 2019 2:51 pm
Seg Ago 05, 2019 11:24 pm
Seg Ago 05, 2019 9:51 pm
Seg Ago 05, 2019 8:48 pm
Seg Ago 05, 2019 8:33 pm
Seg Ago 05, 2019 7:36 pm
Seg Ago 05, 2019 6:23 pm
Seg Ago 05, 2019 5:31 pm
Seg Ago 05, 2019 5:27 pm
Seg Ago 05, 2019 2:35 am
Seg Ago 05, 2019 2:27 am
Dom Ago 04, 2019 7:37 pm
Dom Ago 04, 2019 4:25 pm
Dom Ago 04, 2019 3:58 pm
Dom Ago 04, 2019 3:44 pm
Dom Ago 04, 2019 4:50 am
Dom Ago 04, 2019 4:39 am
Dom Ago 04, 2019 4:37 am
Sab Ago 03, 2019 9:43 pm
Sab Ago 03, 2019 9:13 pm
Sex Ago 02, 2019 8:47 pm
Sex Ago 02, 2019 11:55 am
Sex Ago 02, 2019 2:48 am
Sex Ago 02, 2019 2:41 am
Sex Ago 02, 2019 2:36 am
Qui Ago 01, 2019 11:00 pm
Qui Ago 01, 2019 10:50 pm
Qui Ago 01, 2019 10:47 pm
Qui Ago 01, 2019 8:23 pm
Qua Jul 31, 2019 11:00 pm
HeroSword
Zack2
Tegh
SteveRogers
merike11
richerd
Édipo
Valakinhas
ovoPentelho
clarckquente
MarcosSchultz
artplayer
MarcosSchultz
Jhonyzin
MayLeone
Callyde Jr
MarcosSchultz
MayLeone
rafaelllsd
SteveRogers
lucaspoiob
Daniel Dória
nibirou
Daniel Dória
nibirou
Daniel Dória
daniel123163
SergioDB
Projeto Residentes Evil
lucaspoiob
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
Dionilson
guimaraf
rafaelllsd
artplayer
Diguinho
Callyde Jr
MayLeone
lucaspoiob
Unidade3d5
MayLeone
MayLeone
dstaroski
RodriGO3477
SteveRogers
artplayer
dkrazor
Chilinger
numb123
Matrirxp
MarcosSchultz
Lonx SpellArtsStudio
MarcosSchultz
SteveRogers
ffabim
poyser
artplayer
artplayer
joffersoju
rafaelllsd
RodriGO3477
MarcosSchultz
Hamassfall
gtcmcsgo
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
iToddy
MayLeone
LardosJogos
artplayer
MarcosSchultz
MarcosSchultz
MarcosSchultz
dkrazor
abraao36
zZAndersonZz
speedluk
MarcosSchultz
MarcosSchultz
MarcosSchultz
Magnatah
Magnatah
Magnatah
iToddy
RodriGO3477

[TUTORIAL] FPS Controller com corpo completo!

Ir em baixo

TUTORIAL [TUTORIAL] FPS Controller com corpo completo!

Mensagem por LúcioHenrique098 em Seg Jul 29, 2019 2:58 am

Eai pessoal, beleza?
Hoje, eu vim aqui para postar esse sistema de FPS Controller com corpo, que venho trabalhando à alguns meses, e acho que pode ajudar muitas pessoas!

Scripts


Script do Player
obs.: O script original, foi criado pelo Marcos Schultz, mas foi editado por mim.
link : http://www.schultzgames.com/t3704-tutorial-unity-5-como-criar-o-proprio-fps-controller#25973
Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class FPSController : MonoBehaviour
{
    public float walkSpeed;
    public float runSpeed;
    public float crouchSpeed;

    public GameObject cameraFPS;
    public CharacterController controller;
    public Transform originalCameraPosition;
    public Transform crouchCameraPosition;

    public KeyCode crouchKey;
    public KeyCode runKey;

    public float crouchSpeedUp;
    public float crouchSpeedDown;

    public float originalColliderHeight;
    public float crouchColliderHeight;

    public float FallingStart;

    public float TimerToFalling;

    public bool isIdle;
    public bool isWalk;
    public bool isRun;
    public bool isCrouch;
    public bool isFalling;

    float speed;

    Vector3 moveDirection = Vector3.zero;
    float rotacaoX = 0.0f, rotacaoY = 0.0f;

    void Start()
    {
        speed = walkSpeed;
        cameraFPS.transform.localPosition = originalCameraPosition.position;
        if (controller == null)
        {
            controller = GetComponent<CharacterController>();
        }
    }
    void Update()
    {
        States();
        SetSpeed();
        CheckCrouch();
        Vector3 direcaoFrente = new Vector3(cameraFPS.transform.forward.x, 0, cameraFPS.transform.forward.z);
        Vector3 direcaoLado = new Vector3(cameraFPS.transform.right.x, 0, cameraFPS.transform.right.z);
        direcaoFrente.Normalize();
        direcaoLado.Normalize();
        direcaoFrente = direcaoFrente * Input.GetAxis("Vertical");
        direcaoLado = direcaoLado * Input.GetAxis("Horizontal");
        Vector3 direcFinal = direcaoFrente + direcaoLado;

        if (direcFinal.sqrMagnitude > 1)
        {
            direcFinal.Normalize();
        }

        if (controller.isGrounded)
        {
            moveDirection = new Vector3(direcFinal.x, 0, direcFinal.z);
            moveDirection *= speed;
        }

        moveDirection.y -= 20.0f * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
        CameraPrimeiraPessoa();
    }

    void CameraPrimeiraPessoa()
    {
        rotacaoX += Input.GetAxis("Mouse X") * 10.0f;
        rotacaoY += Input.GetAxis("Mouse Y") * 10.0f;
        rotacaoX = ClampAngleFPS(rotacaoX, -360, 360);
        rotacaoY = ClampAngleFPS(rotacaoY, -60, 80);
        Quaternion xQuaternion = Quaternion.AngleAxis(rotacaoX, Vector3.up);
        Quaternion yQuaternion = Quaternion.AngleAxis(rotacaoY, -Vector3.right);
        Quaternion rotacFinal = Quaternion.identity * xQuaternion * yQuaternion;
        cameraFPS.transform.localRotation = Quaternion.Lerp(cameraFPS.transform.localRotation, rotacFinal, Time.deltaTime * 10.0f);
        cameraFPS.transform.eulerAngles = new Vector3(cameraFPS.transform.eulerAngles.x, cameraFPS.transform.eulerAngles.y, 0);
    }

    float ClampAngleFPS(float angulo, float min, float max)
    {
        if (angulo < -360)
        {
            angulo += 360;
        }
        if (angulo > 360)
        {
            angulo -= 360;
        }
        return Mathf.Clamp(angulo, min, max);
    }
    void States()
    {
        //Idle state
        if (controller.velocity == Vector3.zero)
        {
            isIdle = true;
            isWalk = false;
            isRun = false;
            isFalling = false;
        }
        //Walk state
        if (controller.velocity != Vector3.zero && isRun == false && isFalling == false)
        {
            isIdle = false;
            isWalk = true;
            isRun = false;
            isFalling = false;
        }
        //Run state
        if (Input.GetKey(runKey) && controller.velocity != Vector3.zero)
        {
            isWalk = false;
            isCrouch = false;
            isRun = true;
        }
        else
        {
            isRun = false;
        }
        //Crouch state
        if (Input.GetKeyDown(crouchKey))
        {
            isCrouch = !isCrouch;
        }
        //Falling state
        CheckFalling();
    }
    void SetSpeed()
    {
        if(isWalk)
        {
            speed = walkSpeed;
        }
        if(isRun)
        {
            speed = runSpeed;
        }
        if (isCrouch)
        {
            speed = crouchSpeed;
        }
    }
    void CheckCrouch()
    {
        if(isCrouch)
        {
            cameraFPS.transform.position = Vector3.MoveTowards(cameraFPS.transform.position, crouchCameraPosition.position, crouchSpeedDown * Time.deltaTime);
            controller.height = crouchColliderHeight;
            controller.center = new Vector3(0, crouchColliderHeight / 2, 0);
        }
        if(isCrouch == false)
        {
            cameraFPS.transform.position = Vector3.MoveTowards(cameraFPS.transform.position, originalCameraPosition.position, crouchSpeedUp * Time.deltaTime);
            controller.height = originalColliderHeight;
            controller.center = new Vector3(0, originalColliderHeight / 2, 0);
        }
    }
    void CheckFalling()
    {
        //Set the timer
        if (controller.isGrounded == false)
        {
            TimerToFalling += Time.deltaTime;
        }
        if (TimerToFalling >= FallingStart)
        {
            isFalling = true;
            TimerToFalling = 0f;
        }
        if(controller.isGrounded == true)
        {
            isFalling = false;
            TimerToFalling = 0f;
        }
    }
}
Rotacionar Com a Camêra

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateWithCamera : MonoBehaviour
{
    public Transform target;
    void Start()
    {
        
    }

    void Update()
    {
        transform.localEulerAngles = new Vector3(0, target.eulerAngles.y, 0);
    }
}

FPS Body

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FPSBody : MonoBehaviour
{
    public FPSController controller;
    public Animator anim;

    float inputX, inputY;
    float mouseX;

    bool isIdle;
    bool isWalk;
    bool isRun;
    bool isCrouch;
    bool isFall;
    bool turnRight;
    bool turnLeft;

    void Start()
    {
        
    }

    void Update()
    {
        SetVariables();
        Animate();
    }
    void SetVariables()
    {
        mouseX = Input.GetAxisRaw("Mouse X");
        inputX = Input.GetAxis("Horizontal");
        inputY = Input.GetAxis("Vertical");
        isIdle = controller.isIdle;
        isWalk = controller.isWalk;
        isRun = controller.isRun;
        isCrouch = controller.isCrouch;
        isFall = controller.isFalling;

        if(mouseX > 0)
        {
            turnRight = true;
            turnLeft = false;
        }
        if(mouseX < 0)
        {
            turnLeft = true;
            turnRight = false;
        }
        if(mouseX == 0)
        {
            turnRight = false;
            turnLeft = false;
        }
    }
    void Animate()
    {
        anim.SetFloat("Horizontal", inputX);
        anim.SetFloat("Vertical", inputY);
        anim.SetBool("isIdle", isIdle);
        anim.SetBool("isWalk", isWalk);
        anim.SetBool("isRun", isRun);
        anim.SetBool("isCrouch", isCrouch);
        anim.SetBool("isFall", isFall);
        anim.SetBool("TurnLeft", turnLeft);
        anim.SetBool("TurnRight", turnRight);
    }
}


Passo a passo - Geral


1º passo : crie um script chamado "FPSController" e copie e cole o script do player; logo depois crie um script chamado "RotateWithCamera" e copie e cole o script "Rotacionar com a camera"; em seguida crie um terceiro script chamado "FPSBody" e cole o script "FPSBody";


2º passo : crie um objeto vazio chamado de "FPS Controller" e jogue o script "FPSController" nele.


3º passo : crie uma camera e deixe ele como filha do FPS Controller.


4º passo : crie um objeto vazio chamado de "RotateWithCamera" e deixe esse objeto como filho do FPS Controller.


vai ficar assim : https://drive.google.com/open?id=1zv08-UCot2OvrStGwwGHohL7GutMH-Ww

5º passo : jogue o script "RotateWithCamera" dentro do RotateWithCamera.


6º passo : crie 2 objetos vazios dentro do RotateWithCamera(O primeiro é o "OriginalCameraPosition", coloque esse na posição em que a camera vai ficar enquanto o player está de pé; e o segundo é "CrouchCameraPosition", coloque esse na posição em que camera vai ficar enquanto o player estiver agachado).


7º passo : bote o modelo do personagem que será usado dentro do RotateWithCamera, e bote esse Animator : https://drive.google.com/open?id=17U8akRMWfOsPw-EH1QpzrWypwXoS7fUH


vai ficar assim : https://drive.google.com/open?id=191l-RhFDmBwJ5wYKdZL67M4zo2MLkxUH


8º passo : jogue o script FPSBody, dentro do modelo do personagem.


Passo a passo - Configurando FPSController


Setando cada variavel.


Walk Speed : Escolha a velocidade enquanto anda.
Run Speed : Escolha a velocidade enquanto corre.
Crouch Speed : Escolha a velocidade enquanto está agachado.
Camera FPS : Jogue a camera que está dentro do FPS Controller
Controller : Jogue o componente Character Controller, que está dentro do FPS Controller.
Original Camera Position : Jogue o OriginalCameraPosition que foi criado dentro do RotateWithCamera.
Crouch Camera Position : Jogue o CrouchCameraPosition que foi criado dentro do RotateWithCamera.
Crouch Key : Escolha o botão para agachar.
Run Key : Escolha o botão para correr.
Crouch Speed Up : Escolha a velocidade para levantar do agachamento.
Crouch Speed Down : Escolha a velocidade para agachar.
Original Collider Height : Escolha a altura do colisor, enquanto está em pé.
Crouch Collider Height : Escolha a altura do colisor, enquanto está agachado.
Falling Start : Quanto tempo o player precisa ficar fora do chão para começar a animação de cair.

Modelo padrão :  https://drive.google.com/open?id=1KnJY-5MbvgWc_r4Vrgtp8OK0TNRd4HVp


Passo a passo - Configurando o RotateWithCamera


Oque essa variaveis fazem?


target : É a camera que está dentro do FPSController.


Passo a passo - Configurando Animator


Oque cada estado faz?


Idle : Animação parado
Walk : Animação andando
Run : Animação correndo
Crouch_Idle : Animação agachado parado.
Crouch_Walk : Animaçõa agachado andando.
TurnLeft : Animação do Player virando para esquerda.
TurnRight: Animação do Player virando para a direita
TurnLeftCrouch : Animação do Player virando para esquerda enquanto está agachado.
TurnRightCrouch : Animação do Player virando para a direita enquanto está agachado.
Fall : Animação enquanto está caindo no ar.
Landing : Animação de quando você caiu no chão.

Passo a passo - FPSBody


Oque fazer com cada variavel?


Controller : Jogue o script que está no FPSController nessa variável.
Anim : Jogue o componente Animator nessa variável.

FIM!


Espero que vocês tenham gostado, eu demorei pra fazer esses scripts e se vocês forem usar por favor colocar os Créditos.

by: Lúcio Henrique

LúcioHenrique098
Membro
Membro

PONTOS : 154
REPUTAÇÃO : 6
Respeito as regras : [TUTORIAL] FPS Controller com corpo completo! WvDYdlf

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] FPS Controller com corpo completo!

Mensagem por LúcioHenrique098 em Seg Jul 29, 2019 8:16 pm

Pode ter alguns bugs, pois essa não é a fase final desse asset.

LúcioHenrique098
Membro
Membro

PONTOS : 154
REPUTAÇÃO : 6
Respeito as regras : [TUTORIAL] FPS Controller com corpo completo! WvDYdlf

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] FPS Controller com corpo completo!

Mensagem por LúcioHenrique098 em Ter Jul 30, 2019 9:19 am

Esqueci de dizer, que se alguém presenciar algum tipo de bug com esse asset, por favor, reportar aqui nesse post!

LúcioHenrique098
Membro
Membro

PONTOS : 154
REPUTAÇÃO : 6
Respeito as regras : [TUTORIAL] FPS Controller com corpo completo! WvDYdlf

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum