[TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
+9
Blaker
LúcioHenrique098
Carlos Mesquita
Reive Noeelram
NKKF
luizmauro123
Weslley
KGustavoK Souzah
MarcosSchultz
13 participantes
Página 1 de 1
[TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Olá galera, fiz este tutorial simples explicando passo a passo como programar o seu próprio FPSController
Vídeo:
Script utilizado: (O script deve ser em C# e possuir o nome "Controller". Crie um objeto vazio e jogue o script nele. Após isto, crie uma câmera e jogue dentro do objeto vazio, e o seu controlador estará pronto);
Vídeo:
Script utilizado: (O script deve ser em C# e possuir o nome "Controller". Crie um objeto vazio e jogue o script nele. Após isto, crie uma câmera e jogue dentro do objeto vazio, e o seu controlador estará pronto);
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class Controller : MonoBehaviour {
public float speed = 6.0f;
GameObject cameraFPS;
Vector3 moveDirection = Vector3.zero;
CharacterController controller;
float rotacaoX = 0.0f, rotacaoY = 0.0f;
void Start () {
transform.tag = "Player";
cameraFPS = GetComponentInChildren (typeof(Camera)).transform.gameObject;
cameraFPS.transform.localPosition = new Vector3 (0, 1, 0);
cameraFPS.transform.localRotation = Quaternion.identity;
controller = GetComponent<CharacterController> ();
}
void Update () {
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;
if (Input.GetButton ("Jump")) {
moveDirection.y = 8.0f;
}
}
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, -80, 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);
}
float ClampAngleFPS(float angulo, float min, float max){
if (angulo < -360) {
angulo += 360;
}
if (angulo > 360) {
angulo -= 360;
}
return Mathf.Clamp (angulo, min, max);
}
}
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Como eu baixo a scripts?
KGustavoK Souzah- Iniciante
- PONTOS : 2629
REPUTAÇÃO : 0
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
basta criar um script chamado Controller copiar e colar
Weslley- Moderador
- PONTOS : 5730
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Uma pergunta,pq a rotaçao em Z ela se altera enquando mexe o mouse e quando para de mexer o Z volta a valer 0? o Z n teria que ficar fixo em 0?
luizmauro123- Avançado
- PONTOS : 3081
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Rotação em Z do que? da câmera?luizmauro123 escreveu:Uma pergunta,pq a rotaçao em Z ela se altera enquando mexe o mouse e quando para de mexer o Z volta a valer 0? o Z n teria que ficar fixo em 0?
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Siim da camera ela se movimenta um pouquinho em Z
luizmauro123- Avançado
- PONTOS : 3081
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Ah man.. Eu também tinha esse erro, congela o Rigidbody (Só os eixos da rotação). Isto resolve :Dluizmauro123 escreveu:Siim da camera ela se movimenta um pouquinho em Z
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: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Eu ja fiz isso tbm mas nao mudou em nd kkkk
luizmauro123- Avançado
- PONTOS : 3081
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Ent ngm sabe resolver isso msm?
luizmauro123- Avançado
- PONTOS : 3081
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Pode gravar um vídeo mostrando o bug?luizmauro123 escreveu:Ent ngm sabe resolver isso msm?
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: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
luizmauro123 escreveu:Ent ngm sabe resolver isso msm?
Isso não é bug... isto ocorre por que está sendo utilizado um Lerp no Quaternion em vez de setar a rotação na lata, e isso afeta o eixo Z na rotação local, mas ela logo se estabiliza em 0
é normal por causa do Lerp,
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Bom dia mano, queria deixar primeiramente os parabens, pelo seu canal muito massa, dizer que acompanho sempre.... Gostaria de entrar nesse ramo, e gostaria de tirar dúvidas
#1 pra roda unity, blender, mixamo fuse, que tipo de maquina me recomenda estou pensando em comprar uma de ate 2,500,
#2com o que voce me recomendar conseguiria, cria projetos no nivel de babilon project ou no nivel de rise of tombraider
#1 pra roda unity, blender, mixamo fuse, que tipo de maquina me recomenda estou pensando em comprar uma de ate 2,500,
#2com o que voce me recomendar conseguiria, cria projetos no nivel de babilon project ou no nivel de rise of tombraider
Reive Noeelram- Iniciante
- PONTOS : 2467
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Cara, para ter idéia, estou com esta config:Reive Noeelram escreveu:Bom dia mano, queria deixar primeiramente os parabens, pelo seu canal muito massa, dizer que acompanho sempre.... Gostaria de entrar nesse ramo, e gostaria de tirar dúvidas
#1 pra roda unity, blender, mixamo fuse, que tipo de maquina me recomenda estou pensando em comprar uma de ate 2,500,
#2com o que voce me recomendar conseguiria, cria projetos no nivel de babilon project ou no nivel de rise of tombraider
i5 4460
4 RAM
HD 1Tb
^ A fonte é tão ruim que eu acho que nem conta. Só com isso eu consigo rodar o que eu quero sem a necessidade de placa de vídeo offboard.
Com tudo isso eu acho que gastei no máximo 1000 reais.
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: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Up nesse tutorial, só por que eu uso esse FPSController simples pra k7, :D
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Bakana o tutorial usei pra praticar aqui rodou fino. Gostaria de ver um tutorial pra 3ª pessoa.
Carlos Mesquita- Iniciante
- PONTOS : 2425
REPUTAÇÃO : 4
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
E como poderia fazer isso?MarcosSchultz escreveu:luizmauro123 escreveu:Ent ngm sabe resolver isso msm?
Isso não é bug... isto ocorre por que está sendo utilizado um Lerp no Quaternion em vez de setar a rotação na lata, e isso afeta o eixo Z na rotação local, mas ela logo se estabiliza em 0
é normal por causa do Lerp,
LúcioHenrique098- Avançado
- PONTOS : 2197
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
LúcioHenrique098 escreveu:E como poderia fazer isso?MarcosSchultz escreveu:luizmauro123 escreveu:Ent ngm sabe resolver isso msm?
Isso não é bug... isto ocorre por que está sendo utilizado um Lerp no Quaternion em vez de setar a rotação na lata, e isso afeta o eixo Z na rotação local, mas ela logo se estabiliza em 0
é normal por causa do Lerp,
Fazer o que?
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Fazer a rotação ir na "lata"MarcosSchultz escreveu:LúcioHenrique098 escreveu:E como poderia fazer isso?MarcosSchultz escreveu:luizmauro123 escreveu:Ent ngm sabe resolver isso msm?
Isso não é bug... isto ocorre por que está sendo utilizado um Lerp no Quaternion em vez de setar a rotação na lata, e isso afeta o eixo Z na rotação local, mas ela logo se estabiliza em 0
é normal por causa do Lerp,
Fazer o que?
LúcioHenrique098- Avançado
- PONTOS : 2197
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
cameraFPS.transform.localRotation = rotacFinal;LúcioHenrique098 escreveu:Fazer a rotação ir na "lata"MarcosSchultz escreveu:LúcioHenrique098 escreveu:E como poderia fazer isso?MarcosSchultz escreveu:luizmauro123 escreveu:Ent ngm sabe resolver isso msm?
Isso não é bug... isto ocorre por que está sendo utilizado um Lerp no Quaternion em vez de setar a rotação na lata, e isso afeta o eixo Z na rotação local, mas ela logo se estabiliza em 0
é normal por causa do Lerp,
Fazer o que?
Blaker- Iniciante
- PONTOS : 2180
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
- Código:
public class fpsmove : MonoBehaviour
{
public float X = 2;
public float Z = 2;
public float Y = 3;
public float shift = 5;
public bool travarMouse = true;
public float mouseX = 0.0f;
public float sensibilidade = 2.0f;
public int life = 100;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.W))
{ transform.Translate((X * Time.deltaTime), 0, 0); }
if (Input.GetKey(KeyCode.S))
{ transform.Translate(-(X * Time.deltaTime), 0, 0); }
if (Input.GetKey(KeyCode.A))
{ transform.Translate(0, 0, (Z * Time.deltaTime)); }
if (Input.GetKey(KeyCode.D))
{ transform.Translate(0, 0, -(Z * Time.deltaTime)); }
if (Input.GetKey(KeyCode.Space))
{ transform.Translate(0, (Y * Time.deltaTime), 0); }
if (Input.GetKey(KeyCode.LeftShift))
{ transform.Translate((shift * Time.deltaTime), 0, 0); }
mouseX += Input.GetAxis("Mouse X") * sensibilidade;
transform.eulerAngles = new Vector3(0, mouseX, 0);
}
}
esse é a minha versao para 2019.2.18f
pipipipo- Iniciante
- PONTOS : 1750
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
- Código:
public bool travarMouse = true; //Controla se o cursor do mouse é exibido
public float sensibilidade = 2.0f; //Controla a sensibilidade do mouse
public float mouseX = 0.0f, mouseY = 0.0f;
// Start is called before the first frame update
void Start()
{
if (!travarMouse)
{
return;
}
Cursor.visible = false; //Oculta o cursor do mouse
Cursor.lockState = CursorLockMode.Locked; //Trava o cursor do centro
}
// Update is called once per frame
void Update()
{
mouseX += Input.GetAxis("Mouse X") * sensibilidade; // Incrementa o valor do eixo X e multiplica pela sensibilidade
mouseY += Input.GetAxis("Mouse Y") * sensibilidade;
transform.eulerAngles = new Vector3(0, mouseX, mouseY); //Executa a rotação da câmera de acordo com os eixos
para a visao
pipipipo- Iniciante
- PONTOS : 1750
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
minha camera n se mexe oq pode ser?
alangamepla7- Iniciante
- PONTOS : 1971
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Pode ser a sensibilidade que está em zero
LúcioHenrique098- Avançado
- PONTOS : 2197
REPUTAÇÃO : 31
Idade : 20
Áreas de atuação : Intermediário em Programação, Iniciante em Modelagem
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
era o projeto que estava bugado, mas vlw msm assimLúcioHenrique098 escreveu:Pode ser a sensibilidade que está em zero
alangamepla7- Iniciante
- PONTOS : 1971
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
eu n consigo adicionar ao meu game object
alguem pode me ajudar de um erro que eu ja consegui arrumar mais mesmo ele n adiciona o script
alguem pode me ajudar de um erro que eu ja consegui arrumar mais mesmo ele n adiciona o script
Guimpgame07- Iniciante
- PONTOS : 1709
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Guimpgame07 escreveu:eu n consigo adicionar ao meu game object
alguem pode me ajudar de um erro que eu ja consegui arrumar mais mesmo ele n adiciona o script
O nome do script provavelmente está errado.
O nome do código deve ser sempre igual ao nome da classe.
Re: [TUTORIAL] Unity 5 - Como criar o próprio FPS Controller
Obrgado pelo tutorial
Dei uma melhorada no Script, Adicionei Corrida e botei umas coisa como Public pra ficar mais fácil de modificar no Editor
Dei uma melhorada no Script, Adicionei Corrida e botei umas coisa como Public pra ficar mais fácil de modificar no Editor
- Código:
using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using UnityEngine;
using Quaternion = UnityEngine.Quaternion;
using Vector3 = UnityEngine.Vector3;
public class FPSController : MonoBehaviour
{
GameObject cameraFPS;
float rotX = 0, rotY = 0;
CharacterController controller;
Vector3 moveDirection = Vector3.zero;
private bool IsRunning = false;
[Header("Configurações De Camera")]
public float Velocidade = 8;
public float Sensibilidade = 10;
public float LimiteMinEmY = -80;
public float LimiteMaxEmY = 80;
public bool InverterEmY = false;
[Header("Configurações De Movimento")]
public float Speed = 8f;
public float RunSpeed = 14f;
public float ForçaDoPulo = 8f;
public float Gravidade = 22f;
// Start is called before the first frame update
void Start()
{
transform.tag = "Player";
cameraFPS = GetComponentInChildren<Camera>().transform.gameObject;
cameraFPS.transform.localPosition = new Vector3(0, 1, 0);
cameraFPS.transform.localRotation = Quaternion.identity;
controller = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
Vector3 direcaoFrente = new Vector3(cameraFPS.transform.forward.x, 0, cameraFPS.transform.forward.z).normalized;
Vector3 direcaoLado = new Vector3(cameraFPS.transform.right.x, 0, cameraFPS.transform.right.z).normalized;
direcaoFrente *= Input.GetAxis("Vertical");
direcaoLado *= Input.GetAxis("Horizontal");
Vector3 direcao = direcaoFrente + direcaoLado;
IsRunning = Input.GetKey(KeyCode.LeftShift);
if (direcao.sqrMagnitude > 1) { direcao.Normalize(); }
if (controller.isGrounded) {
moveDirection = new Vector3(direcao.x, 0, direcao.z);
moveDirection *= IsRunning ? RunSpeed : Speed;
if (Input.GetButton("Jump"))
{
moveDirection.y = ForçaDoPulo;
}
}
moveDirection.y -= Gravidade * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
CameraFP();
}
void CameraFP()
{
rotX += Input.GetAxis("Mouse X") * Sensibilidade;
rotY += Input.GetAxis("Mouse Y") * Sensibilidade * (InverterEmY ? -1 : 1);
rotX = ClampAngleFPS(rotX, -360, 360);
rotY = ClampAngleFPS(rotY, LimiteMinEmY, LimiteMaxEmY);
Quaternion QuaX = Quaternion.AngleAxis(rotX, Vector3.up);
Quaternion QuaY = Quaternion.AngleAxis(rotY, Vector3.left);
Quaternion Qua = Quaternion.identity * QuaX * QuaY;
cameraFPS.transform.localRotation = Quaternion.Lerp(cameraFPS.transform.localRotation, Qua, Velocidade * Time.deltaTime);
}
float ClampAngleFPS(float angulo, float min, float max)
{
if (angulo < -360)
{
angulo += 360;
}
if (angulo > 360)
{
angulo -= 360;
}
return Mathf.Clamp(angulo, min, max);
}
}
Tópicos semelhantes
» [TUTORIAL] Unity 3D - Como programar o próprio CUSTOM INSPECTOR
» [TUTORIAL] COMO CRIAR UM JOGO DE LUTA 2D UNITY 2021
» [TUTORIAL] Como criar o MENU INICIAL
» Como criar navegador próprio em app?
» [TUTORIAL] Como criar partículas na Unity 5 (partículas de fogo, água, explosões, etc)
» [TUTORIAL] COMO CRIAR UM JOGO DE LUTA 2D UNITY 2021
» [TUTORIAL] Como criar o MENU INICIAL
» Como criar navegador próprio em app?
» [TUTORIAL] Como criar partículas na Unity 5 (partículas de fogo, água, explosões, etc)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos