Travar a camera do FirstPersoController
3 participantes
Página 1 de 1
Travar a camera do FirstPersoController
Galera alguem sabe como travar a camera do firstpersocontroller, ja segui diversos tuto e não consegui, minha Unity é a 5.6.1f
Última edição por Zecandy em Sáb Dez 02, 2017 4:18 pm, editado 1 vez(es)
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Pc ou Android? Se for PC, vc pode desativar os comandos do mouse look. Mas só faça isso se você não for usar os movimentos do mouse.
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Travar a camera do FirstPersoController
Entao vai ser tipo um inventario no pc, vai ficar desativado so enquanto estiver no inventario.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Ata. Neste caso vc faz um Script simples que ficará anexado ao player. Crie uma booleana estática que será ativada quando o player sacar o inventário, e crie uma variável do tipo "Mouse look"... Quando a booleana estiver true, o Script do mouse look é desativado, e vice versa.
Se não tiver entendido, eu posso fazer pra vc daqui uns 70 minutos (só acabar de jantar aqui kk)
Se não tiver entendido, eu posso fazer pra vc daqui uns 70 minutos (só acabar de jantar aqui kk)
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Travar a camera do FirstPersoController
Opa john Rambo so vi agora nao consegui desativar o mouse lokk, ajuda sim porfavor
Tambem segui este procedimento e não deu certo
Tambem segui este procedimento e não deu certo
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Alguma ajuda POR FAVOR
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Opa Voltei amigo, estive meio doente esses últimos dias, desculpa ai. Mas vamos lá. Poste aqui o script que contem o comando para abrir o inventário
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Travar a camera do FirstPersoController
Ta aqui amigo
E MELHORAS PRA TU AMIGO.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;
public class Inventario_Controller : MonoBehaviour {
private Player_Controller player;
private GameObject jogador;
public GameObject inventario;
public List<SlotIventario> itensSlot;
public static Inventario_Controller instance;
public int MaxSlot;
public SlotIventario slotPrefab;
public Transform itensGrid;
public SlotIventario selectedSlot;
public GameObject optionOnSelect;
public GameObject butonUse;
public GameObject butonRemove;
public GameObject butonEquip;
public Vector3 dropItem;
void Start ()
{
jogador = GameObject.FindWithTag("Player");
player = FindObjectOfType(typeof(Player_Controller))as Player_Controller;
//dropItem = new Vector3(player.transform.position.x+0.2f,player.transform.position.y,player.transform.position.z);
instance = this;
for (int i = 0; i < MaxSlot; i++)
{
GameObject tempslot = Instantiate(slotPrefab.gameObject);
tempslot.transform.SetParent(itensGrid,false);
//tempslot.transform.localScale =new Vector3(1,1,1);
itensSlot.Add(tempslot.GetComponent<SlotIventario>());
}
}
void Update ()
{
if(!inventario.activeSelf)
{
selectedSlot = null;
}
InventarioActive();
if(selectedSlot != null && selectedSlot.currentItem != null)
{
optionOnSelect.SetActive(true);
if(selectedSlot.currentItem.podeEquipar)
{
butonUse.SetActive(false);
}else
{
butonEquip.SetActive(false);
}
}else
{
optionOnSelect.SetActive(false);
}
}
public void AddItem_Inventario(ItemBase item)
{
bool ItemEncontrado = false;
SlotIventario slotVazio = ProximoVazio();
if(item.podeMesclar)
{
foreach( SlotIventario slot in itensSlot)
{
if(slot.currentItem !=null && slot.currentItem.nomeItem == item.nomeItem)
{
slot.currentItem.AddItem();
ItemEncontrado =true;
}
}
if(!ItemEncontrado && slotVazio !=null)
{
slotVazio.currentItem = item;
}
}else if(slotVazio!= null)
{
slotVazio.currentItem = item;
}
item.gameObject.SetActive(false);
}
private SlotIventario ProximoVazio()
{
SlotIventario slotReturn = null;
foreach(SlotIventario slot in itensSlot)
{
if(slot.currentItem == null)
{
slotReturn = slot;
break;
}
}
return slotReturn;
}
private void OnEnable()
{
selectedSlot = null;
butonUse.SetActive(true);
butonEquip.SetActive(true);
}
public void UseItem()
{
selectedSlot.currentItem.Use();
selectedSlot.SetupSlot();
}
public void RemoveItem()
{
ItemBase item = selectedSlot.currentItem;
item.gameObject.SetActive(true);
item.transform.position = player.transform.position + dropItem;
item.slot.currentItem = null;
item.slot.SetupSlot();
item.slot = null;
}
public void EquipaItem()
{
}
public void InventarioActive()
{
if(Input.GetKeyDown(KeyCode.Q))
{
inventario.SetActive(!inventario.activeSelf);
}
if(inventario.activeSelf)
{
Screen.lockCursor = false;
Time.timeScale =0;
}else
{
Screen.lockCursor = true;
Time.timeScale =1;
}
}
}
E MELHORAS PRA TU AMIGO.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Quanto ao script de movimentação do player e de MouseLook, você está usando os que já vem com unity?
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Travar a camera do FirstPersoController
Uso o firstPersoController do unity.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Então Amigo o seu script ficaria assim:
Mas ainda não acabou. É necessário que você vá lá no script "FirstPersonController" Do Player e crie uma variável lá. Assim:
(Linha 32 e uso dela na linha 65).....
Feito isso, deve funcionar (pelo menos eu testei aqui e funcionou kkk)... Testa ai e nos fale :D
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;
public class Inventario_Controller : MonoBehaviour {
private Player_Controller player;
private GameObject jogador;
public GameObject inventario;
public List<SlotIventario> itensSlot;
public static Inventario_Controller instance;
public int MaxSlot;
public SlotIventario slotPrefab;
public Transform itensGrid;
public SlotIventario selectedSlot;
public GameObject optionOnSelect;
public GameObject butonUse;
public GameObject butonRemove;
public GameObject butonEquip;
public Vector3 dropItem;
void Start ()
{
jogador = GameObject.FindWithTag("Player");
player = FindObjectOfType(typeof(Player_Controller))as Player_Controller;
//dropItem = new Vector3(player.transform.position.x+0.2f,player.transform.position.y,player.transform.position.z);
instance = this;
for (int i = 0; i < MaxSlot; i++)
{
GameObject tempslot = Instantiate(slotPrefab.gameObject);
tempslot.transform.SetParent(itensGrid,false);
//tempslot.transform.localScale =new Vector3(1,1,1);
itensSlot.Add(tempslot.GetComponent<SlotIventario>());
}
}
void Update ()
{
if(!inventario.activeSelf)
{
selectedSlot = null;
}
InventarioActive();
if(selectedSlot != null && selectedSlot.currentItem != null)
{
optionOnSelect.SetActive(true);
if(selectedSlot.currentItem.podeEquipar)
{
butonUse.SetActive(false);
}else
{
butonEquip.SetActive(false);
}
}else
{
optionOnSelect.SetActive(false);
}
}
public void AddItem_Inventario(ItemBase item)
{
bool ItemEncontrado = false;
SlotIventario slotVazio = ProximoVazio();
if(item.podeMesclar)
{
foreach( SlotIventario slot in itensSlot)
{
if(slot.currentItem !=null && slot.currentItem.nomeItem == item.nomeItem)
{
slot.currentItem.AddItem();
ItemEncontrado =true;
}
}
if(!ItemEncontrado && slotVazio !=null)
{
slotVazio.currentItem = item;
}
}else if(slotVazio!= null)
{
slotVazio.currentItem = item;
}
item.gameObject.SetActive(false);
}
private SlotIventario ProximoVazio()
{
SlotIventario slotReturn = null;
foreach(SlotIventario slot in itensSlot)
{
if(slot.currentItem == null)
{
slotReturn = slot;
break;
}
}
return slotReturn;
}
private void OnEnable()
{
selectedSlot = null;
butonUse.SetActive(true);
butonEquip.SetActive(true);
}
public void UseItem()
{
selectedSlot.currentItem.Use();
selectedSlot.SetupSlot();
}
public void RemoveItem()
{
ItemBase item = selectedSlot.currentItem;
item.gameObject.SetActive(true);
item.transform.position = player.transform.position + dropItem;
item.slot.currentItem = null;
item.slot.SetupSlot();
item.slot = null;
}
public void EquipaItem()
{
}
public void InventarioActive()
{
if(Input.GetKeyDown(KeyCode.Q))
{
inventario.SetActive(!inventario.activeSelf);
}
if(inventario.activeSelf)
{
Screen.lockCursor = false;
Time.timeScale =0;
FirstPersonController.InventarioAberto = true;
}else
{
Screen.lockCursor = true;
Time.timeScale =1;
FirstPersonController.InventarioAberto = false;
}
}
}
Mas ainda não acabou. É necessário que você vá lá no script "FirstPersonController" Do Player e crie uma variável lá. Assim:
- Código:
using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
using UnityStandardAssets.Utility;
using Random = UnityEngine.Random;
namespace UnityStandardAssets.Characters.FirstPerson
{
[RequireComponent(typeof (CharacterController))]
[RequireComponent(typeof (AudioSource))]
public class FirstPersonController : MonoBehaviour
{
[SerializeField] private bool m_IsWalking;
[SerializeField] private float m_WalkSpeed;
[SerializeField] private float m_RunSpeed;
[SerializeField] [Range(0f, 1f)] private float m_RunstepLenghten;
[SerializeField] private float m_JumpSpeed;
[SerializeField] private float m_StickToGroundForce;
[SerializeField] private float m_GravityMultiplier;
[SerializeField] private MouseLook m_MouseLook;
[SerializeField] private bool m_UseFovKick;
[SerializeField] private FOVKick m_FovKick = new FOVKick();
[SerializeField] private bool m_UseHeadBob;
[SerializeField] private CurveControlledBob m_HeadBob = new CurveControlledBob();
[SerializeField] private LerpControlledBob m_JumpBob = new LerpControlledBob();
[SerializeField] private float m_StepInterval;
[SerializeField] private AudioClip[] m_FootstepSounds; // an array of footstep sounds that will be randomly selected from.
[SerializeField] private AudioClip m_JumpSound; // the sound played when character leaves the ground.
[SerializeField] private AudioClip m_LandSound; // the sound played when character touches back on ground.
private Camera m_Camera;
public static bool InventarioAberto = false;
private bool m_Jump;
private float m_YRotation;
private Vector2 m_Input;
private Vector3 m_MoveDir = Vector3.zero;
private CharacterController m_CharacterController;
private CollisionFlags m_CollisionFlags;
private bool m_PreviouslyGrounded;
private Vector3 m_OriginalCameraPosition;
private float m_StepCycle;
private float m_NextStep;
private bool m_Jumping;
private AudioSource m_AudioSource;
// Use this for initialization
private void Start()
{
m_CharacterController = GetComponent<CharacterController>();
m_Camera = Camera.main;
m_OriginalCameraPosition = m_Camera.transform.localPosition;
m_FovKick.Setup(m_Camera);
m_HeadBob.Setup(m_Camera, m_StepInterval);
m_StepCycle = 0f;
m_NextStep = m_StepCycle/2f;
m_Jumping = false;
m_AudioSource = GetComponent<AudioSource>();
m_MouseLook.Init(transform , m_Camera.transform);
}
// Update is called once per frame
private void Update()
{
if (!InventarioAberto) {
RotateView ();
}
// the jump state needs to read here to make sure it is not missed
if (!m_Jump)
{
m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
}
if (!m_PreviouslyGrounded && m_CharacterController.isGrounded)
{
StartCoroutine(m_JumpBob.DoBobCycle());
PlayLandingSound();
m_MoveDir.y = 0f;
m_Jumping = false;
}
if (!m_CharacterController.isGrounded && !m_Jumping && m_PreviouslyGrounded)
{
m_MoveDir.y = 0f;
}
m_PreviouslyGrounded = m_CharacterController.isGrounded;
}
private void PlayLandingSound()
{
m_AudioSource.clip = m_LandSound;
m_AudioSource.Play();
m_NextStep = m_StepCycle + .5f;
}
private void FixedUpdate()
{
float speed;
GetInput(out speed);
// always move along the camera forward as it is the direction that it being aimed at
Vector3 desiredMove = transform.forward*m_Input.y + transform.right*m_Input.x;
// get a normal for the surface that is being touched to move along it
RaycastHit hitInfo;
Physics.SphereCast(transform.position, m_CharacterController.radius, Vector3.down, out hitInfo,
m_CharacterController.height/2f, Physics.AllLayers, QueryTriggerInteraction.Ignore);
desiredMove = Vector3.ProjectOnPlane(desiredMove, hitInfo.normal).normalized;
m_MoveDir.x = desiredMove.x*speed;
m_MoveDir.z = desiredMove.z*speed;
if (m_CharacterController.isGrounded)
{
m_MoveDir.y = -m_StickToGroundForce;
if (m_Jump)
{
m_MoveDir.y = m_JumpSpeed;
PlayJumpSound();
m_Jump = false;
m_Jumping = true;
}
}
else
{
m_MoveDir += Physics.gravity*m_GravityMultiplier*Time.fixedDeltaTime;
}
m_CollisionFlags = m_CharacterController.Move(m_MoveDir*Time.fixedDeltaTime);
ProgressStepCycle(speed);
UpdateCameraPosition(speed);
m_MouseLook.UpdateCursorLock();
}
private void PlayJumpSound()
{
m_AudioSource.clip = m_JumpSound;
m_AudioSource.Play();
}
private void ProgressStepCycle(float speed)
{
if (m_CharacterController.velocity.sqrMagnitude > 0 && (m_Input.x != 0 || m_Input.y != 0))
{
m_StepCycle += (m_CharacterController.velocity.magnitude + (speed*(m_IsWalking ? 1f : m_RunstepLenghten)))*
Time.fixedDeltaTime;
}
if (!(m_StepCycle > m_NextStep))
{
return;
}
m_NextStep = m_StepCycle + m_StepInterval;
PlayFootStepAudio();
}
private void PlayFootStepAudio()
{
if (!m_CharacterController.isGrounded)
{
return;
}
// pick & play a random footstep sound from the array,
// excluding sound at index 0
int n = Random.Range(1, m_FootstepSounds.Length);
m_AudioSource.clip = m_FootstepSounds[n];
m_AudioSource.PlayOneShot(m_AudioSource.clip);
// move picked sound to index 0 so it's not picked next time
m_FootstepSounds[n] = m_FootstepSounds[0];
m_FootstepSounds[0] = m_AudioSource.clip;
}
private void UpdateCameraPosition(float speed)
{
Vector3 newCameraPosition;
if (!m_UseHeadBob)
{
return;
}
if (m_CharacterController.velocity.magnitude > 0 && m_CharacterController.isGrounded)
{
m_Camera.transform.localPosition =
m_HeadBob.DoHeadBob(m_CharacterController.velocity.magnitude +
(speed*(m_IsWalking ? 1f : m_RunstepLenghten)));
newCameraPosition = m_Camera.transform.localPosition;
newCameraPosition.y = m_Camera.transform.localPosition.y - m_JumpBob.Offset();
}
else
{
newCameraPosition = m_Camera.transform.localPosition;
newCameraPosition.y = m_OriginalCameraPosition.y - m_JumpBob.Offset();
}
m_Camera.transform.localPosition = newCameraPosition;
}
private void GetInput(out float speed)
{
// Read input
float horizontal = CrossPlatformInputManager.GetAxis("Horizontal");
float vertical = CrossPlatformInputManager.GetAxis("Vertical");
bool waswalking = m_IsWalking;
#if !MOBILE_INPUT
// On standalone builds, walk/run speed is modified by a key press.
// keep track of whether or not the character is walking or running
m_IsWalking = !Input.GetKey(KeyCode.LeftShift);
#endif
// set the desired speed to be walking or running
speed = m_IsWalking ? m_WalkSpeed : m_RunSpeed;
m_Input = new Vector2(horizontal, vertical);
// normalize input if it exceeds 1 in combined length:
if (m_Input.sqrMagnitude > 1)
{
m_Input.Normalize();
}
// handle speed change to give an fov kick
// only if the player is going to a run, is running and the fovkick is to be used
if (m_IsWalking != waswalking && m_UseFovKick && m_CharacterController.velocity.sqrMagnitude > 0)
{
StopAllCoroutines();
StartCoroutine(!m_IsWalking ? m_FovKick.FOVKickUp() : m_FovKick.FOVKickDown());
}
}
private void RotateView()
{
m_MouseLook.LookRotation (transform, m_Camera.transform);
}
private void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
//dont move the rigidbody if the character is on top of it
if (m_CollisionFlags == CollisionFlags.Below)
{
return;
}
if (body == null || body.isKinematic)
{
return;
}
body.AddForceAtPosition(m_CharacterController.velocity*0.1f, hit.point, ForceMode.Impulse);
}
}
}
(Linha 32 e uso dela na linha 65).....
Feito isso, deve funcionar (pelo menos eu testei aqui e funcionou kkk)... Testa ai e nos fale :D
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Travar a camera do FirstPersoController
Blz vou ver aqui.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Assets/Scripts/InventarioPaulo/Inventario_Controller.cs(140,26): error CS0117: `UnityStandardAssets.Characters.FirstPerson.FirstPersonController' does not contain a definition for `InventarioAberto'
Esta dando este erro, como antes meu script do firstpersoCOntroller não aceita ser acessado por outro mesmo com variavel statica.
Esta dando este erro, como antes meu script do firstpersoCOntroller não aceita ser acessado por outro mesmo com variavel statica.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
OBSERVAÇÃO: só não consigo acessar o do firstpersocontroller.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Faça uma variável em outro script e acesse por ele, no caso...
Re: Travar a camera do FirstPersoController
recagonlei escreveu:Faça uma variável em outro script e acesse por ele, no caso...
Tambem ja tentei e ele não reconhece outros scripts e não linka um GameObject na variavel.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Cara, aqui funciona normal... Você criou a variável no Script do first person? Porque pelo erro que você postou parece que não foi declarada a variável
Do jeito que estão os scripts que eu postei acima, eu testei e funcionou
Do jeito que estão os scripts que eu postei acima, eu testei e funcionou
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Travar a camera do FirstPersoController
Declarei sim, não sei se é o unity mas não ta buscando nehuma variavel publica do first
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Agradeço a todos que me ajudaram neste tópico, infelizmente só resolvi o problema iniciando outro projeto e baixando outro StandardAsset da unity, OBRIGADO GALERA.
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Travar a camera do FirstPersoController
Bom, pelo menos resolveu né :roll:
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Travar a camera do FirstPersoController
John Rambo escreveu:Bom, pelo menos resolveu né :roll:
KKK VDD!!
Zecandy- Mestre
- PONTOS : 3505
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Tópicos semelhantes
» Travar movimento pra frente
» [RESOLVIDO] Travar o Objeto
» No script da "Câmera estilo Gta" como faço para o mouse mover a câmera ?
» Travar animação
» COMO FAZER CAMERA ORBITAR O PLAYER/CAMERA LIVRE!
» [RESOLVIDO] Travar o Objeto
» No script da "Câmera estilo Gta" como faço para o mouse mover a câmera ?
» Travar animação
» COMO FAZER CAMERA ORBITAR O PLAYER/CAMERA LIVRE!
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos