[TUTORIAL] Sistema de Controlador De Primeira Pessoa Com Som De Passos Aleatorios
2 participantes
Página 1 de 1
[TUTORIAL] Sistema de Controlador De Primeira Pessoa Com Som De Passos Aleatorios
Sistema de Controlador De Primeira Pessoa!!!
O vídeo de demonstração, está aqui.
Eu ia por o package para download, mas eu vou só por depois que eu conseguir fazer o movimento da camera sem ter bugs.
- Código:
using UnityEngine;
using System.Collections;
using System;
using Random = UnityEngine.Random;
[Serializable]
public class MouseLookView
{
public GameObject viewer;
public Vector3 positionBegin;
public float sensitivity;
public float minX = -360f, maxX = 360f, minY = -85f, maxY = 85f;
}
[Serializable]
public class Footsteps
{
public string tagFootsteps;
public AudioClip[] footstepAudio;
}
[RequireComponent(typeof(CharacterController))]
[RequireComponent(typeof(AudioSource))]
public class FirstPersonMove : MonoBehaviour
{
public KeyCode crouchKeyCode = KeyCode.C;
public MouseLookView MLV;
public Footsteps[] footsteps;
public AudioClip[] footstepSounds;
public float speedMove, speedMultiplierMove, jumpSpeed, gravityBody;
public float timeSoundFootsteps;
float speed;
float currentTime, timeCurrent;
bool movingVerticalP, movingHorizontalP, movingVerticalN, movingHorizontalN, playSound;
AudioSource emissionSounds;
CharacterController controller;
Vector3 moveDirection = Vector3.zero;
float rotationX = 0.0f, rotationY = 0.0f;
string atualTag;
void Start ()
{
MLV.viewer.transform.localPosition = MLV.positionBegin;
MLV.viewer.transform.localRotation = Quaternion.identity;
emissionSounds = GetComponent<AudioSource>();
controller = GetComponent<CharacterController>();
currentTime = 0;
}
void Update ()
{
if (Input.GetKey(crouchKeyCode))
{
speed = speedMove / speedMultiplierMove;
timeCurrent = timeSoundFootsteps * speedMultiplierMove;
controller.height = MLV.positionBegin.y / 2f;
MLV.viewer.transform.localPosition = new Vector3(MLV.positionBegin.x, MLV.positionBegin.y / 2f, MLV.positionBegin.z);
}
else
{
controller.height = MLV.positionBegin.y * 2f;
MLV.viewer.transform.localPosition = new Vector3(MLV.positionBegin.x, MLV.positionBegin.y, MLV.positionBegin.z);
if (Input.GetKey(KeyCode.LeftShift))
{
speed = speedMove * speedMultiplierMove;
timeCurrent = timeSoundFootsteps / speedMultiplierMove;
}
else
{
speed = speedMove;
timeCurrent = timeSoundFootsteps;
}
}
Vector3 dirVertical = new Vector3(MLV.viewer.transform.forward.x, 0, MLV.viewer.transform.forward.z);
Vector3 dirHorizontal = new Vector3(MLV.viewer.transform.right.x, 0, MLV.viewer.transform.right.z);
dirVertical.Normalize();
dirHorizontal.Normalize();
dirVertical = dirVertical * Input.GetAxis("Vertical");
dirHorizontal = dirHorizontal * Input.GetAxis("Horizontal");
Vector3 dirs = dirVertical + dirHorizontal;
if (dirs.sqrMagnitude > 1)
{
dirs.Normalize();
}
if (controller.isGrounded)
{
moveDirection = new Vector3(dirs.x, 0, dirs.z);
moveDirection *= speed;
movingVerticalP = Input.GetAxis("Vertical") > 0;
movingHorizontalP = Input.GetAxis("Horizontal") > 0;
movingVerticalN = Input.GetAxis("Vertical") < 0;
movingHorizontalN = Input.GetAxis("Horizontal") < 0;
if (Input.GetButtonDown("Jump"))
{
moveDirection.y = jumpSpeed;
}
for (int x = 0; x < footsteps.Length; x++)
{
if (movingVerticalP && movingHorizontalP || movingVerticalN && movingHorizontalN ||
movingVerticalP || movingHorizontalP || movingVerticalN || movingHorizontalN)
{
if (!playSound)
{
if (atualTag != "Untagged")
{
if (atualTag == footsteps[x].tagFootsteps)
{
int n = Random.Range(0, footsteps[x].footstepAudio.Length);
playSound = true;
emissionSounds.PlayOneShot(footsteps[x].footstepAudio[n]);
}
}
else
{
int n = Random.Range(0, footstepSounds.Length);
playSound = true;
emissionSounds.PlayOneShot(footstepSounds[n]);
}
}
}
else
{
playSound = false;
currentTime = 0;
emissionSounds.Stop();
}
}
}
moveDirection.y -= gravityBody * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
if (playSound)
{
currentTime += Time.deltaTime;
if (currentTime > timeCurrent)
{
currentTime = 0;
playSound = false;
}
}
}
void FixedUpdate()
{
rotationX += Input.GetAxis("Mouse X") * MLV.sensitivity;
rotationY += Input.GetAxis("Mouse Y") * MLV.sensitivity;
rotationX = Mathf.Clamp(rotationX, MLV.minX, MLV.maxX);
rotationY = Mathf.Clamp(rotationY, MLV.minY, MLV.maxY);
Quaternion Xquat = Quaternion.AngleAxis(rotationX, Vector3.up);
Quaternion Yquat = Quaternion.AngleAxis(rotationY, -Vector3.right);
Quaternion XYquat = Quaternion.identity * Xquat * Yquat;
MLV.viewer.transform.localRotation = Quaternion.Lerp (MLV.viewer.transform.localRotation, XYquat, Time.fixedDeltaTime * MLV.sensitivity);
}
void OnControllerColliderHit(ControllerColliderHit hit)
{
atualTag = hit.transform.tag;
}
}
O vídeo de demonstração, está aqui.
Eu ia por o package para download, mas eu vou só por depois que eu conseguir fazer o movimento da camera sem ter bugs.
Última edição por dstaroski em Ter Nov 20, 2018 11:18 am, editado 1 vez(es) (Motivo da edição : Editado ícone e título para conter a tag)
Simplizãum S- Membro
- PONTOS : 2735
REPUTAÇÃO : 15
Idade : 26
Respeito as regras :
Re: [TUTORIAL] Sistema de Controlador De Primeira Pessoa Com Som De Passos Aleatorios
Parabéns cara! Abraço!
Re: [TUTORIAL] Sistema de Controlador De Primeira Pessoa Com Som De Passos Aleatorios
Vlw abraço para VC também.dstaroski escreveu:Parabéns cara! Abraço!
Simplizãum S- Membro
- PONTOS : 2735
REPUTAÇÃO : 15
Idade : 26
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Controlador em Primeira Pessoa "compacto" FPS
» [TUTORIAL] Movimento de camera em primeira pessoa e sons de passos ou HeadBob
» [TUTORIAL] Sistema de câmera em primeira pessoa SIMPLES
» [TUTORIAL] Som de passos para Personagem Terceira Pessoa
» Sistema De Camera De Primeira Pessoa de um Veiculo Para Android
» [TUTORIAL] Movimento de camera em primeira pessoa e sons de passos ou HeadBob
» [TUTORIAL] Sistema de câmera em primeira pessoa SIMPLES
» [TUTORIAL] Som de passos para Personagem Terceira Pessoa
» Sistema De Camera De Primeira Pessoa de um Veiculo Para Android
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos