[TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
4 participantes
Página 1 de 1
[TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
ATENÇÃO, A PRIMEIRA PARTE DO TUTORIAL SERVE NA UNITY 3 OU UNITY 4... SE VOCÊ JÁ ESTIVER USANDO A UNITY 5, UTILIZE OS SCRIPTS DA SEGUNDA PARTE DO TUTORIAL, QUE SÃO ESPECIFICAMENTE DIRECIONADOS A UNITY 5, PARA EVITAR ERROS :D
Então, já fazia temmmpos que eu tinha esta duvida más ninguém deste forum sabia a resposta, e passados 4 meses retomei o assunto, e com muita facilidade consegui fazer um simples sistema de pause que trava a camera...
DETALHE, ESTE TUTO SERVE PARA QUEM USA O 'FirstPersonController' o que é o caso de 99% das pessoas...
enfim, no seu Player e na sua camera existe um script em C# chamado MouseLock... é o mesmo script que vai em ambos... o que está na sua camera controla o movimento dela em Y e a rotação em X, dela mesma, e o que está no player controla a rotação da camera em X em relação ao player, de forma que possa alterar a rotação do player também... e para conseguir "travar" a camera de forma que afete os 2 objetos, você precisa alterar o script MouseLook que está na sua camera, ou no player ( é o mesmo ) para o conteúdo que está neste script:
salve o script, agora crie um novo script em C# com o nome "PAUSE" e coloque este codigo nele
depois disso, jogue este script no seu player, e pronto... toda vez que você apertar "P" a camera trava, se apertar "P" denovo a camera volta ao normal...
@@@@@
SE VOCÊ QUISER UM SCRIPT QUE PAUSE SEU JOGO TAMBÉM, USE ESTE:
use este script no lugar do script "PAUSE" e ele irá fazer a mesma coisa com a camera, só com o efeito adicional de "travar o tempo" ou seja, pausar.
Altere o seu script " MouseLook " para este código a seguir:
salve o script, agora crie um novo script em C# com o nome "PAUSE" e coloque este codigo nele
depois disso, jogue este script no seu player, e pronto... toda vez que você apertar "P" a camera trava, se apertar "P" denovo a camera volta ao normal...
@@@@@
SE VOCÊ QUISER UM SCRIPT QUE PAUSE SEU JOGO TAMBÉM, USE ESTE:
use este script no lugar do script "PAUSE" e ele irá fazer a mesma coisa com a camera, só com o efeito adicional de "travar o tempo" ou seja, pausar.
Então, já fazia temmmpos que eu tinha esta duvida más ninguém deste forum sabia a resposta, e passados 4 meses retomei o assunto, e com muita facilidade consegui fazer um simples sistema de pause que trava a camera...
DETALHE, ESTE TUTO SERVE PARA QUEM USA O 'FirstPersonController' o que é o caso de 99% das pessoas...
enfim, no seu Player e na sua camera existe um script em C# chamado MouseLock... é o mesmo script que vai em ambos... o que está na sua camera controla o movimento dela em Y e a rotação em X, dela mesma, e o que está no player controla a rotação da camera em X em relação ao player, de forma que possa alterar a rotação do player também... e para conseguir "travar" a camera de forma que afete os 2 objetos, você precisa alterar o script MouseLook que está na sua camera, ou no player ( é o mesmo ) para o conteúdo que está neste script:
- Código:
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
public static bool condPause;
void Update (){
if (condPause == false) { // apenas adicionei uma condicão para o funcionamento do script
if (axes == RotationAxes.MouseXAndY) {
float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);
} else if (axes == RotationAxes.MouseX) {
transform.Rotate (0, Input.GetAxis ("Mouse X") * sensitivityX, 0);
} else {
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, transform.localEulerAngles.y, 0);
}
}
}
void Start (){
if (rigidbody)
rigidbody.freezeRotation = true;
condPause = false;
}
}
salve o script, agora crie um novo script em C# com o nome "PAUSE" e coloque este codigo nele
- Código:
using UnityEngine;
using System.Collections;
public class PAUSE : MonoBehaviour {
void Update () {
if (Input.GetKey (KeyCode.P)) {
if( MouseLook.condPause == false){
MouseLook.condPause = true;
}
else
MouseLook.condPause = false;
}
}
}
depois disso, jogue este script no seu player, e pronto... toda vez que você apertar "P" a camera trava, se apertar "P" denovo a camera volta ao normal...
@@@@@
SE VOCÊ QUISER UM SCRIPT QUE PAUSE SEU JOGO TAMBÉM, USE ESTE:
- Código:
using UnityEngine;
using System.Collections;
public class PAUSE : MonoBehaviour {
void Start () {
Time.timeScale = 1;
}
void Update () {
if (Input.GetKeyDown (KeyCode.P)) {
if( MouseLook.condPause == false){
MouseLook.condPause = true;
}
else
MouseLook.condPause = false;
}
if (MouseLook.condPause == true) {
Time.timeScale = 0;
}
if (MouseLook.condPause == false) {
Time.timeScale = 1;
}
}
}
use este script no lugar do script "PAUSE" e ele irá fazer a mesma coisa com a camera, só com o efeito adicional de "travar o tempo" ou seja, pausar.
SE VOCÊ ESTIVER USANDO A UNITY 5:
Altere o seu script " MouseLook " para este código a seguir:
- Código:
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
public static bool condPause;
float rotationY = 0F;
void Update (){
if (condPause == false) {
if (axes == RotationAxes.MouseXAndY) {
float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);
} else if (axes == RotationAxes.MouseX) {
transform.Rotate (0, Input.GetAxis ("Mouse X") * sensitivityX, 0);
} else {
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, transform.localEulerAngles.y, 0);
}
}
}
void Start (){
if (GetComponent<Rigidbody>())
GetComponent<Rigidbody>().freezeRotation = true;
}
}
salve o script, agora crie um novo script em C# com o nome "PAUSE" e coloque este codigo nele
- Código:
using UnityEngine;
using System.Collections;
public class PAUSE : MonoBehaviour {
void Update () {
if (Input.GetKey (KeyCode.P)) {
if( MouseLook.condPause == false){
MouseLook.condPause = true;
}
else
MouseLook.condPause = false;
}
}
}
depois disso, jogue este script no seu player, e pronto... toda vez que você apertar "P" a camera trava, se apertar "P" denovo a camera volta ao normal...
@@@@@
SE VOCÊ QUISER UM SCRIPT QUE PAUSE SEU JOGO TAMBÉM, USE ESTE:
- Código:
using UnityEngine;
using System.Collections;
public class PAUSE : MonoBehaviour {
void Start () {
Time.timeScale = 1;
}
void Update () {
if (Input.GetKeyDown (KeyCode.P)) {
if( MouseLook.condPause == false){
MouseLook.condPause = true;
}
else
MouseLook.condPause = false;
}
if (MouseLook.condPause == true) {
Time.timeScale = 0;
}
if (MouseLook.condPause == false) {
Time.timeScale = 1;
}
}
}
use este script no lugar do script "PAUSE" e ele irá fazer a mesma coisa com a camera, só com o efeito adicional de "travar o tempo" ou seja, pausar.
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:30 pm, editado 1 vez(es)
Re: [TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
Obrigado por compartilhar o codigo que funciona na Unity 5 tambem, estava com alguns problemas em tutoriais por causa dessas modificações da Unity 5 em relação a 4.
Deiverson- Iniciante
- PONTOS : 3514
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
caso esteja utilizando o novo FPS Controller pode usar este metodo:
Re: [TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
Eu estava com esta dúvida de como travar a câmera em jogos fps quando for pausado o jogo... Aí apenas marquei a opção Smooth que está dentro do script do mouse Look e funcionou... será que não dará problemas no ao gerar o jogo, sem fazer todos estes passos no vídeo acima?
poliver216- Iniciante
- PONTOS : 3104
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
poliver216 escreveu:Eu estava com esta dúvida de como travar a câmera em jogos fps quando for pausado o jogo... Aí apenas marquei a opção Smooth que está dentro do script do mouse Look e funcionou... será que não dará problemas no ao gerar o jogo, sem fazer todos estes passos no vídeo acima?
Tem que seguir os passos para travar a camera O.o
O Smooth apenas causa uma "lentião", como se fosse uma suavização no movimento da camera, nada além disso.
Re: [TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
Obrigado pela rapidez da resposta, e peço desculpas por não ter sido muito específico na minha pergunta ou se estou errado, mas é que fiquei curioso com esta situação. O que eu queria ter perguntado na verdade, é que quando já estiver no pause do jogo, quando o time.timescale está igual 0. Eu testei com a opção Smooth desativada, pressionei Esc para pausar, o jogo pausou, mas a câmera do FPS continuava se movimentando, aí testei com a opção Smooth ativa, fiz o mesmo procedimento, só que desta vez a câmera também paralizou com o jogo. Será que pode ser porque da algum conflito entre os códigos? pois o smooth também utiliza a classe Time. Ou se zerando a variavel timeScale pode fazer o código de suavização do movimento da câmera parar com a opção smooth ativa, travando também a câmera?
Desde já agradeço Marcos, você me ajuda muito com este fórum e os tutoriais... abrçs
Desde já agradeço Marcos, você me ajuda muito com este fórum e os tutoriais... abrçs
poliver216- Iniciante
- PONTOS : 3104
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] TRAVAR A CAMERA DO PERSONAGEM (FirstPersonController)
poliver216 escreveu:Será que pode ser porque da algum conflito entre os códigos? pois o smooth também utiliza a classe Time. Ou se zerando a variavel timeScale pode fazer o código de suavização do movimento da câmera parar com a opção smooth ativa, travando também a câmera?
Tanto com o Smooth ligado ou não, os códigos de movimento estão calculando e mandando a camera se mover a cada frame!
A única diferença é que como o smooth usa o tempo no calculo, com o timeScale em 0 ele acaba multiplicando tudo por zero.
Seguindo os passos do vídeo vc consegue travar a camera quando quiser/precisar, independentemente do jogo estar pausado ou não!
A principio não teria problema usar o smooth para travar, mas pode acontecer sim conflitos de funcionalidades mais para frente...
Por exemplo, não daria para fazer o player estar paralisado/amarrado e o resto do jogo continuar rodando normal, mas com o script do video seria possível fazer isso a qualquer momento!
Tópicos semelhantes
» [TUTORIAL] Travar o movimento da Camera na UNITY 5
» [TUTORIAL] mover personagem na direção da camera
» Travar a camera do FirstPersoController
» [TUTORIAL] Tutorial Unity 3D Movimentação de Personagem com Botões UI
» DUVIDA CAMERA SEGUINDO PERSONAGEM
» [TUTORIAL] mover personagem na direção da camera
» Travar a camera do FirstPersoController
» [TUTORIAL] Tutorial Unity 3D Movimentação de Personagem com Botões UI
» DUVIDA CAMERA SEGUINDO PERSONAGEM
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos