Bom dia a todos e uma otima semana! Estou desenvolvendo o jogo kill the zombies em preimeira pessoa e estou com dificuladades em atribuir o pan tilt no jogador. Quem puder ma ajudar fico agradecido.
segue o erro aontado:
Assets\Scripts\GerenciadorDeArmas.cs(27,30): error CS0246: The type or namespace name ‘CinemachinePanTilt’ could not be found (are you missing a using directive or an assembly reference?)
All compiler errors have to be fixed before you can enter playmode!
UnityEditor.SceneView:ShowCompileErrorNotification ()
meu codigo:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class GerenciadorDeArmas : MonoBehaviour
{
[SerializeField] private List armasDisponiveis;
[SerializeField] private Arma armaPrimaria;
[SerializeField] private Arma armaSecundaria;
[SerializeField] private GameObject efeitoImpactoDeTiro;
[SerializeField] private GameObject efeitoDeSangue;
[SerializeField] private LayerMask tiroLayerMask;
private Transform cameraPrincipal;
private float tempoProximoTiro;
private MovimentoJogador movimentoJogador;
private Coroutine recarregarCoroutine;
private bool recarregando;
[SerializeField] private CinemachinePanTilt panTilt;
private float tempoRecoil;
void Start()
{
cameraPrincipal = Camera.main.transform;
armaPrimaria.gameObject.SetActive(true);
armaSecundaria?.gameObject.SetActive(false);
movimentoJogador = GetComponent<MovimentoJogador>();
}
void Update()
{
if (recarregando) return;
Arma armaAtual = GetArmaAtual();
Recarregar(armaAtual);
Atirar(armaAtual);
AplicarRecoil(armaAtual);
}
public Arma GetArmaAtual()
{
return armaPrimaria.gameObject.activeSelf ? armaPrimaria : armaSecundaria;
}
private void Atirar(Arma armaAtual)
{
if (Input.GetButton("Fire1") && Time.time >= tempoProximoTiro && armaAtual.municaoAtual > 0 && !movimentoJogador.EstaCorrendo())
{
tempoProximoTiro = Time.time + 1f / armaAtual.tirosPorSegundo;
armaAtual.RealizarDisparo();
RaycastHit hit;
if (Physics.Raycast(cameraPrincipal.position, cameraPrincipal.forward, out hit, 1000, tiroLayerMask, QueryTriggerInteraction.Ignore))
{
Instantiate(efeitoImpactoDeTiro, hit.point, Quaternion.LookRotation(hit.normal));
}
tempoRecoil = 0.2f;
armaAtual.ProximoRecoil();
}
}
private void Recarregar(Arma armaAtual)
{
if ((Input.GetKeyDown(KeyCode.R) || armaAtual.municaoAtual <= 0) && armaAtual.municaoNoInventario > 0)
{
CancelarRecarga();
recarregarCoroutine = StartCoroutine(ExecutarRecarga(armaAtual));
}
}
private void CancelarRecarga()
{
if (recarregarCoroutine != null)
{
StopCoroutine(recarregarCoroutine);
}
recarregando = false;
}
private IEnumerator ExecutarRecarga(Arma armaAtual)
{
recarregando = true;
armaAtual.animator.SetTrigger("Recarregar");
yield return new WaitForSeconds(armaAtual.tempoDelayRecarregar);
int balasParaRecarregar = Mathf.Min(armaAtual.capacidadeDoPente, armaAtual.municaoNoInventario) - armaAtual.municaoAtual;
armaAtual.RecarregarArma(balasParaRecarregar);
recarregando = false;
}
private void AplicarRecoil(Arma armaAtual)
{
if (tempoRecoil <= 0f) return;
tempoRecoil -= Time.deltaTime;
Vector2 recoilAtual = armaAtual.ObterRecoilAtual();
panTilt.PanAxis.Value += recoilAtual.x * Time.deltaTime;
panTilt.TiltAxis.Value += recoilAtual.y * Time.deltaTime;
}
}