[TUTORIAL] FPS Controller com corpo completo!
+2
LúcioHenrique098
playsonmendes
6 participantes
Página 1 de 1
[TUTORIAL] FPS Controller com corpo completo!
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 : https://www.schultzgames.com/t3704-tutorial-unity-5-como-criar-o-proprio-fps-controller#25973
FPS Body
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
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 : https://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;
}
}
}
- 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- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Pode ter alguns bugs, pois essa não é a fase final desse asset.
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Esqueci de dizer, que se alguém presenciar algum tipo de bug com esse asset, por favor, reportar aqui nesse post!
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
pfvr to me confundindo para instalar, poderia fazer um tutorial só colocando os arquivos? rapidao mesmo por print msm poderia ser ;-;
playsonmendes- Iniciante
- PONTOS : 1927
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Tentarei fazer um tutorial!playsonmendes escreveu:pfvr to me confundindo para instalar, poderia fazer um tutorial só colocando os arquivos? rapidao mesmo por print msm poderia ser ;-;
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Tenta me contactar pelo email : luciohenrique098@gmail.complaysonmendes escreveu:pfvr to me confundindo para instalar, poderia fazer um tutorial só colocando os arquivos? rapidao mesmo por print msm poderia ser ;-;
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Tenta fazer um tutorial porfavor, e tbm como conseguir modelos de personagem 3d, nn consegui usar o animator que vc disponibilizou
Re: [TUTORIAL] FPS Controller com corpo completo!
Irei providenciar o vídeo, tentarei fazer até semana que vem!
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Usa o Mixamo, lá tem animações e personagens pra você usar.RafaelSquid1 escreveu:Tenta fazer um tutorial porfavor, e tbm como conseguir modelos de personagem 3d, nn consegui usar o animator que vc disponibilizou
Agora sobre o tópico: Vlw, vai ajudar dms no projeto de estudo q eu tenho :D
iMicco- Iniciante
- PONTOS : 1861
REPUTAÇÃO : 0
Idade : 17
Áreas de atuação : Unity 2D (2019) - Estudando
C# da Unity - Estudando
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
LúcioHenrique098 escreveu:Irei providenciar o vídeo, tentarei fazer até semana que vem!
eu baixo o Animator, mas ele n abre no Unity
leonardolopes- Avançado
- PONTOS : 1997
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
vai ter o video ainda?LúcioHenrique098 escreveu:Irei providenciar o vídeo, tentarei fazer até semana que vem!
Re: [TUTORIAL] FPS Controller com corpo completo!
tenta mandar um print do Animator
leonardolopes- Avançado
- PONTOS : 1997
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
(revivendo o post) lúcioHenrique você vai postar o vídeo ainda?
leonardolopes- Avançado
- PONTOS : 1997
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Vou sim! Estou gravando ele no exato momento!leonardolopes escreveu:(revivendo o post) lúcioHenrique você vai postar o vídeo ainda?
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
To upando o vídeo no Youtube, acho que de 17:30 ou 18:00 horas vai ta aqui no fórum já
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
LúcioHenrique098- Avançado
- PONTOS : 2193
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] FPS Controller com corpo completo!
Esse script serve pra ser adicionado no fps controller em primeira pessoa da unity?
francisco barroso- Programador
- PONTOS : 2612
REPUTAÇÃO : 59
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Sistema de FPS com Corpo
» [TUTORIAL] Sistema COMPLETO de câmeras
» [TUTORIAL] Script de arma completo! [FREE]
» [TUTORIAL] Sistema completo de nivel com XP + PayTime
» [TUTORIAL] Como fazer o registro completo do seu jogo
» [TUTORIAL] Sistema COMPLETO de câmeras
» [TUTORIAL] Script de arma completo! [FREE]
» [TUTORIAL] Sistema completo de nivel com XP + PayTime
» [TUTORIAL] Como fazer o registro completo do seu jogo
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos