SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
criar um app que atende a vários produtos.
Erro Ao Tentar vincular SCRIPT C# com Objeto (Script need's to derive from MonoBehaviour)
onde publicar os trabalhos prontos.
tela preta do unity apos abrir no celular..
tela branca ao iniciar videoplayer
Rodar música fora do App
2 JOGOS EM ANDAMENTO:
Salvar Cores com Json
[Asset Grátis] - Key gratuita para "Ingame Logs Viewer" para quem avalia-lo!
fazer unity5 imprimir
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Como faz para o jogo saber se e windows, android,tablet , mac e ios?
[RESOLVIDO] Detecta o fim da animação e conjura um novo evento.
como limitar o zoom mínimo e máximo no lean touch
[Resolvido] Unity - Executar Pagina Web Dentro De Um Programa
Rádio para programadores
StreamWriter... ajuda rapida no salvamento
Efeito Glowing
[RESOLVIDO] Detectar distância de objetos
Pack de áudio/ efeitos sonoros gratuitos.
Software para testar AR no PC
Fazer cada Scene em uma orientação
[TUTORIAL] Compilar para Android
Asset de paint com lag
Utilizar movimento de plataforma na UI
COMO MOVER UM OBJETO OU PERSONAGEM
[TUTORIAL] CONFIGURANDO O UNITY PARA COMPILAR PARA ANDROID
Como fazer as perguntas ficarem aleatorias em jogo quiz - Unity 2D
texto com rolamento pela seta
[RESOLVIDO] Rotacionar Personagem De Acordo Com a Direção Do Analógico
Dúvida Com Conta Matematica
[RESOLVIDO] Colocar uma condição para remover uma variavel do inspector?
APK trava com Admob
Conectar ao wifi
Celular dentro do game
[TUTORIAL] Como fazer um TELEPORTE
[RESOLVICO] Colisor que ao atravessar ele eu mudo minha cena no Unity2D ?
[TUTORIAL] Mover, arremessar e girar objetos com o mouse
Objeto sempre ocupando toda a camera
Transições de Animações de Sprites
[RESOLVIDO] Sprites mudando posição
Renderização no blender
[RESOLVIDO] AJUDA ERRO COM INIMIGO
Unity - Erro ao Salvar
Duvida resolucao
Mecânica de destruição de parte de um sprite
[RESOLVIDO] Reconhecimento de Joystick e Teclado
convert byte[] em texture2D
[TUTORIAL] Mover objetos 2D e conectar em lugares específicos
Captura de imagem
Como fazer variáveis se ocultarem no Editor?
[TUTORIAL] Unity 5 - Sistema Completo de PORTAS E CHAVES
paredes
OnTriggerExit2D detectando collider desativado
[TUTORIAL] Wheel Collider - como configurar corretamente.
posição de cubos..
[RESOLVIDO] Movimentar personagem por grade com clique do mouse. (Isométrico)
[RESOLVIDO] Data e hora atual no android
Game Engine
Dúvida Sobre o lucky patcher
[TUTORIAL] Converter uma variável String em Vetores
Tem como reproduzir vídeo em android?
Preferência em Games
[TUTORIAL] Singleton, A melhor forma de acessar a classe!
[RESOLVIDO] Acessar Scripts de Objetos Que Estão Como "DontDestroyOnLoad()" ?
[TUTORIAL] Arma tipo a do call of duty
[TUTORIAL] Double Jumping para games em 2D
[TUTORIAL] Unity 2019 - Lanterna e pilhas, com UI
GameJam valendo 15 mil reais em bitcoin!!
Combinar prefabs?!?
[TUTORIAL] Como usar FREE EASY CRIATURA CONTROLE IA
[TUTORIAL] MOVIMENTO NA ARMA PARA FICAR MAIS REAL!
Multiplayer será tirado da Unity?
Como dar o mesmo valor a varias variaveis ?
Procurando modelador de personagens!
Conta playstore
[TUTORIAL] Sistema de "Entrar" em locais
[TUTORIAL] Sistema de Lanterna com Pilhas
Como mudar cor do botao UI
[RESOLVIDO] Set Materials
Uma duvida sobre colliders 2d
Efeito 'vai e volta'
Tiro do IA direcionado a posição atual do Player
CircleCast
[RESOLVIDO] MoveTowards
Como mudar variaveis de uma [Serializable]
[TUTORIAL] Plataforma Tangente 2D
como criar um sistema de concorrência finaceira para jogo tycon
Salvando screenshot na galeria do Ipad (IOS)
Grama de terreno mudou textura e não consigo identificar o motivo
Como usar o Unity Monetization 3.0.1?
Marcha
Paint
[Asset Grátis] - Key gratuita para "Easy Mesh Combiner" para quem avalia-lo!
problemas com admob no Android Studio
Coroutine ou Invoke - qual tem melhor desempenho
[TUTORIAL] Controle 3ª pessoa com animações mecânicas (root motion)
[RESOLVIDO] Movimentação RigidBody 2D visto de cima
[RESOLVIDO] Gerador de senha
Hoje à(s) 12:02 am
Hoje à(s) 12:01 am
Ontem à(s) 11:51 pm
Ontem à(s) 11:36 pm
Ontem à(s) 11:16 pm
Ontem à(s) 10:12 pm
Ontem à(s) 8:18 pm
Ontem à(s) 8:15 pm
Ontem à(s) 8:07 pm
Ontem à(s) 8:00 pm
Ontem à(s) 7:34 pm
Ontem à(s) 6:58 pm
Ontem à(s) 2:49 pm
Ontem à(s) 12:09 pm
Qui Mar 21, 2019 11:13 pm
Qui Mar 21, 2019 11:02 pm
Qui Mar 21, 2019 9:22 pm
Qui Mar 21, 2019 5:10 pm
Qui Mar 21, 2019 5:01 pm
Qui Mar 21, 2019 3:38 pm
Qui Mar 21, 2019 11:52 am
Qui Mar 21, 2019 10:18 am
Qua Mar 20, 2019 9:29 pm
Qua Mar 20, 2019 9:19 pm
Qua Mar 20, 2019 8:39 pm
Qua Mar 20, 2019 8:33 pm
Ter Mar 19, 2019 10:03 pm
Ter Mar 19, 2019 1:50 pm
Ter Mar 19, 2019 7:03 am
Ter Mar 19, 2019 6:23 am
Ter Mar 19, 2019 6:02 am
Seg Mar 18, 2019 6:48 pm
Seg Mar 18, 2019 3:39 pm
Seg Mar 18, 2019 3:28 pm
Seg Mar 18, 2019 1:00 pm
Seg Mar 18, 2019 4:31 am
Dom Mar 17, 2019 3:43 pm
Sab Mar 16, 2019 5:11 pm
Sab Mar 16, 2019 4:37 pm
Sab Mar 16, 2019 3:48 pm
Sex Mar 15, 2019 6:40 pm
Sex Mar 15, 2019 3:09 pm
Sex Mar 15, 2019 9:32 am
Sex Mar 15, 2019 9:27 am
Qui Mar 14, 2019 9:55 pm
Qui Mar 14, 2019 9:50 pm
Qui Mar 14, 2019 9:45 pm
Qui Mar 14, 2019 9:44 pm
Qui Mar 14, 2019 9:42 pm
Qui Mar 14, 2019 9:38 pm
Qui Mar 14, 2019 9:00 pm
Qui Mar 14, 2019 8:54 pm
Qui Mar 14, 2019 8:33 pm
Qui Mar 14, 2019 8:29 pm
Qui Mar 14, 2019 5:06 pm
Qui Mar 14, 2019 3:39 pm
Qua Mar 13, 2019 5:30 pm
Ter Mar 12, 2019 2:54 pm
Seg Mar 11, 2019 10:21 pm
Seg Mar 11, 2019 1:25 pm
Seg Mar 11, 2019 11:51 am
Seg Mar 11, 2019 12:35 am
Dom Mar 10, 2019 9:49 pm
Dom Mar 10, 2019 8:20 pm
Dom Mar 10, 2019 5:47 pm
Dom Mar 10, 2019 5:21 pm
Dom Mar 10, 2019 2:12 pm
Sab Mar 09, 2019 7:50 pm
Sab Mar 09, 2019 12:18 pm
Sex Mar 08, 2019 6:55 pm
Sex Mar 08, 2019 2:40 pm
Qui Mar 07, 2019 12:19 pm
Qui Mar 07, 2019 12:12 pm
Qui Mar 07, 2019 11:59 am
Qui Mar 07, 2019 11:12 am
Qui Mar 07, 2019 1:29 am
Qua Mar 06, 2019 10:32 pm
Qua Mar 06, 2019 5:37 pm
Qua Mar 06, 2019 1:21 pm
Ter Mar 05, 2019 2:53 pm
Seg Mar 04, 2019 7:39 pm
Seg Mar 04, 2019 5:44 pm
Seg Mar 04, 2019 2:38 pm
Dom Mar 03, 2019 7:45 pm
Sab Mar 02, 2019 8:34 pm
Sab Mar 02, 2019 7:45 pm
Sab Mar 02, 2019 12:46 am
Sex Mar 01, 2019 10:52 pm
Sex Mar 01, 2019 4:43 pm
Sex Mar 01, 2019 4:31 pm
Sex Mar 01, 2019 12:52 pm
Qui Fev 28, 2019 9:30 pm
Qua Fev 27, 2019 8:30 pm
Qua Fev 27, 2019 11:05 am
Qua Fev 27, 2019 10:57 am
Ter Fev 26, 2019 6:33 pm
Ter Fev 26, 2019 10:37 am
Seg Fev 25, 2019 9:08 pm
Seg Fev 25, 2019 5:12 pm
marciosilva
NKKF
marciosilva
marciosilva
marciosilva
NKKF
dstaroski
dstaroski
dstaroski
dstaroski
Tegh
Chilinger
fabricadegame
eduardonog30
Magnatah
Magnatah
Encracker
michelly
numb123
RCGames Oficial
Magnatah
joffersoju
fabricadegame
MarcosSchultz
MarcosSchultz
MarcosSchultz
fabricadegame
Akuma97
Magnatah
Magnatah
Magnatah
luiz12345
rejão
Zack2
Zack2
MarcosSchultz
luiz12345
henriquegames501
lesgoy
MiguelLuiz
Lteo
diegopds
Diego Felix
Magnatah
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
Isabela
Isabela
Annko
juniorhotes
Weslley
Daniel Dória
juniorhotes
lesgoy
lucaslbatista
Flávio
Magnatah
diegopds
MayLeone
glauco
dimmuo
AnderGames
Unidade3d5
arthurunity
artplayer
diegopds
zeca urubu
Daniel Dória
AnderGames
MarcosSchultz
Alanigma
ffabim
Flávio
Flávio
Manawydan
rafaelllsd
Lteo
dimmuo
MateusPignatti
Madness
dstaroski
dstaroski
dstaroski
Madness
Madness
marcos4503
marcos4503
Flávio
kirito37
DuViDoSo
Flávio

[TUTORIAL] Arma tipo a do call of duty

Ir em baixo

TUTORIAL [TUTORIAL] Arma tipo a do call of duty

Mensagem por diegopds em Sex Mar 08, 2019 10:32 pm

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
public class Weapon : MonoBehaviour
{
    //variaveis de parametros gerais
    public enum tiposDeArma { shotgun = 0, metralhadora = 1 };
    public tiposDeArma _tiposDeArma;
    [Header("paremetros gerais")]
    public float velocidadeDoZoom = 0.4f;
    [Range(0,120)]
    public float zoomCameraPrimaria = 30;
    [Range(0, 120)]
    public float zoomCameraSecundaria = 30;
    [Range(0, 120)]
    public float tirarZoomCameraPrimaria = 75;
    [Range(0, 120)]
    public float tirarZoomCameraSecundaria = 60;
    public float espalhamentoDosProjetilsSemMirar = 5f;
    public float espalhamentoDosProjetilsMirando = 0.7f;
    public float semMirarRecuoX = 0.02f;
    public float semMirarRecuoY = 0.02f;
    public float semMirarRecuoZ = 0.4f;
    public float mirandoRecuoX = 0.04f;
    public float mirandoRecuoY = 0.04f;
    public float mirandoRecuoZ = -0.5f;
    public float distancia = 10;//distancia maxima que os disparos atingem
    public float velocidadeTiro = 0.02f;//velocidade que pode atirar
    public int maxMunicaoNaArma = 31;//quantidade de municao dentro da arma
    public int maxMunicaoForaDaArma = 200;//quantidade de municao que ainda resta para serem usadas
    public float forcaDoImpacto = 1000;//forca que gera ao o projetil acertar um objeto com rigidbody
    public bool semiAutomatica;//indica se a arma se comportara como uma semi automatica
    private bool podeAtirar = true;
    private int auxMaxMunicaoForaDaArma;
    private int auxMaxMunicaoNaArma;
    private Vector3 currentVelocity;
    private readonly float smoothTime = 0.03f;
    private bool mirando;
    //variaveis para shotgun
    [Header("Parametros para shotgun")]
    public int numeroDeDisparos = 10;
    //Variaveis de anexo de objetos
    [Header("Variavei de anexo de objetos ou componentes")]
    public GameObject min;
    public GameObject max;
    public GameObject minAux;
    public GameObject maxAux;
    public AudioClip somDoTiro;
    public AudioClip somDeArmaVazia;
    public GameObject buracoProjetil;
    public GameObject respawBala;
    public Camera cameraPrimaria;
    public Camera cameraSecundaria;
    public ParticleSystem fogoDaArma;//
    private AudioSource controleAudio;

    // Start is called before the first frame update
    void Start()
    {
        auxMaxMunicaoNaArma = maxMunicaoNaArma;
        auxMaxMunicaoForaDaArma = maxMunicaoForaDaArma;
        //Desativa loop do audio
        if(controleAudio != null)
        {
            controleAudio.loop = false;
        }
        cameraPrimaria = Camera.main;
        
    }

    // Update is called once per frame
    void Update()
    {
        Atirar();
        Mirar();
        Cursor.lockState = CursorLockMode.Locked;//pode apagar essa linha
    }
    void Atirar()
    {
        //funciona em metralhadora e revolvers,sniper n testado mas deve funcionar
        //Disparos automatico
        if (Input.GetButton("Fire1") && semiAutomatica == false && podeAtirar)
        {
            if (_tiposDeArma == tiposDeArma.metralhadora&&auxMaxMunicaoNaArma != 0)
            {
                StartCoroutine("Tiro");
                podeAtirar = false;
                auxMaxMunicaoNaArma -= 1;
                if(fogoDaArma!=null)
                    fogoDaArma.Play();
                //sai som so se houver audio
                if (somDoTiro != null)
                    controleAudio.PlayOneShot(somDoTiro);
                if(auxMaxMunicaoNaArma == 0 && auxMaxMunicaoForaDaArma == 0)
                {
                    if (somDeArmaVazia != null)
                    {
                        controleAudio.PlayOneShot(somDeArmaVazia);
                    }
                }
                if (!mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel semMirarRecuox e semMirarRecuoY
                    float semMirarAleatorioX = Random.Range(-semMirarRecuoX, semMirarRecuoX);
                    float semMirarAleatorioY = Random.Range(-semMirarRecuoY, semMirarRecuoY);

                    minAux.transform.position += transform.right * semMirarAleatorioX;
                    minAux.transform.position += transform.up * semMirarAleatorioY;
                    minAux.transform.position += transform.forward * semMirarRecuoZ;
                    //espalhar disparos
                    Vector3 fireDirection = transform.forward;
                    Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                    Quaternion randomRotation = Random.rotation;
                    fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsSemMirar));
                    RaycastHit hit;
                    if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                    {
                        Quaternion hitRotacao = Quaternion.LookRotation(-hit.point);
                        GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                        buracoDoProjetil.transform.parent = hit.transform;
                        Destroy(buracoDoProjetil, 20);
                        if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                        {
                            Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                            rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                        }
                    }

                }
                if (mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel MirandoRecuox e MirandoRecuoY
                    float MirarAleatorioX = Random.Range(-mirandoRecuoX, mirandoRecuoX);
                    float MirarAleatorioY = Random.Range(-mirandoRecuoY, mirandoRecuoY);

                    maxAux.transform.position += transform.right * MirarAleatorioX;
                    maxAux.transform.position += transform.up * MirarAleatorioY;
                    maxAux.transform.position += transform.forward * mirandoRecuoZ;
                    //espalhar os disparos
                    Vector3 fireDirection = transform.forward;
                    Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                    Quaternion randomRotation = Random.rotation;
                    fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsMirando));
                    RaycastHit hit;
                    if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                    {


                        GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                        buracoDoProjetil.transform.parent = hit.transform;

                        Destroy(buracoDoProjetil, 20);
                        if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                        {
                            Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                            rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                        }
                    }

                }
            }
        }
        //funciona em armas semi automatica
        if (Input.GetButtonDown("Fire1") && semiAutomatica && podeAtirar)
        {
            if (_tiposDeArma == tiposDeArma.metralhadora && auxMaxMunicaoNaArma != 0)
            {
                StartCoroutine("Tiro");
                podeAtirar = false;
                auxMaxMunicaoNaArma -= 1;
                if (fogoDaArma != null)
                    fogoDaArma.Play();
                //sai som so se houver audio
                if (somDoTiro != null)
                    controleAudio.PlayOneShot(somDoTiro);
                if (auxMaxMunicaoNaArma == 0 && auxMaxMunicaoForaDaArma == 0)
                {
                    if (somDeArmaVazia != null)
                    {
                        controleAudio.PlayOneShot(somDeArmaVazia);
                    }
                }
                if (!mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel semMirarRecuox e semMirarRecuoY
                    float semMirarAleatorioX = Random.Range(-semMirarRecuoX, semMirarRecuoX);
                    float semMirarAleatorioY = Random.Range(-semMirarRecuoY, semMirarRecuoY);

                    minAux.transform.position += transform.right * semMirarAleatorioX;
                    minAux.transform.position += transform.up * semMirarAleatorioY;
                    minAux.transform.position += transform.forward * semMirarRecuoZ;
                    //espalhar disparos
                    Vector3 fireDirection = transform.forward;
                    Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                    Quaternion randomRotation = Random.rotation;
                    fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsSemMirar));
                    RaycastHit hit;
                    if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                    {
                        Quaternion hitRotacao = Quaternion.LookRotation(-hit.point);
                        GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                        buracoDoProjetil.transform.parent = hit.transform;
                        Destroy(buracoDoProjetil, 20);
                        if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                        {
                            Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                            rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                        }
                    }

                }
                if (mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel MirandoRecuox e MirandoRecuoY
                    float MirarAleatorioX = Random.Range(-mirandoRecuoX, mirandoRecuoX);
                    float MirarAleatorioY = Random.Range(-mirandoRecuoY, mirandoRecuoY);

                    maxAux.transform.position += transform.right * MirarAleatorioX;
                    maxAux.transform.position += transform.up * MirarAleatorioY;
                    maxAux.transform.position += transform.forward * mirandoRecuoZ;
                    //espalhar os disparos
                    Vector3 fireDirection = transform.forward;
                    Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                    Quaternion randomRotation = Random.rotation;
                    fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsMirando));
                    RaycastHit hit;
                    if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                    {


                        GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                        buracoDoProjetil.transform.parent = hit.transform;

                        Destroy(buracoDoProjetil, 20);
                        if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                        {
                            Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                            rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                        }
                    }

                }
            }
        }
        //Funiciona em shotguns semi automatica
        if (Input.GetButtonDown("Fire1") && semiAutomatica && podeAtirar)
        {
            if (_tiposDeArma == tiposDeArma.shotgun && auxMaxMunicaoNaArma != 0)
            {
                StartCoroutine("Tiro");
                podeAtirar = false;
                auxMaxMunicaoNaArma -= 1;
                if (fogoDaArma != null)
                    fogoDaArma.Play();
                //sai som so se houver audio
                if (somDoTiro != null)
                    controleAudio.PlayOneShot(somDoTiro);
                if (auxMaxMunicaoNaArma == 0 && auxMaxMunicaoForaDaArma == 0)
                {
                    if (somDeArmaVazia != null)
                    {
                        controleAudio.PlayOneShot(somDeArmaVazia);
                    }
                }
                if (!mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel semMirarRecuox e semMirarRecuoY
                    float semMirarAleatorioX = Random.Range(-semMirarRecuoX, semMirarRecuoX);
                    float semMirarAleatorioY = Random.Range(-semMirarRecuoY, semMirarRecuoY);

                    minAux.transform.position += transform.right * semMirarAleatorioX;
                    minAux.transform.position += transform.up * semMirarAleatorioY;
                    minAux.transform.position += transform.forward * semMirarRecuoZ;
                    //espalhar disparos
                    
                    RaycastHit hit;
                    for (int i = 0; i <= numeroDeDisparos; i++)
                    {
                        //espalhar disparos
                        Vector3 fireDirection = transform.forward;
                        Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                        Quaternion randomRotation = Random.rotation;
                        fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsSemMirar));
                        if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                        {
                            Quaternion hitRotacao = Quaternion.LookRotation(-hit.point);
                            GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                            buracoDoProjetil.transform.parent = hit.transform;
                            Destroy(buracoDoProjetil, 20);
                            if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                            {
                                Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                                rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                            }
                        }
                    }

                }
                if (mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel MirandoRecuox e MirandoRecuoY
                    float MirarAleatorioX = Random.Range(-mirandoRecuoX, mirandoRecuoX);
                    float MirarAleatorioY = Random.Range(-mirandoRecuoY, mirandoRecuoY);

                    maxAux.transform.position += transform.right * MirarAleatorioX;
                    maxAux.transform.position += transform.up * MirarAleatorioY;
                    maxAux.transform.position += transform.forward * mirandoRecuoZ;
                    
                    RaycastHit hit;
                    for (int i = 0; i <= numeroDeDisparos; i++)
                    {
                        //espalhar os disparos
                        Vector3 fireDirection = transform.forward;
                        Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                        Quaternion randomRotation = Random.rotation;
                        fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsMirando));
                        if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                        {


                            GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                            buracoDoProjetil.transform.parent = hit.transform;

                            Destroy(buracoDoProjetil, 20);
                            if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                            {
                                Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                                rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                            }
                        }
                    }

                }
            }
        }
        //funciona em shotguns automaticas
        if (Input.GetButton("Fire1") && semiAutomatica == false&& podeAtirar)
        {
            if (_tiposDeArma == tiposDeArma.shotgun && auxMaxMunicaoNaArma != 0)
            {
                StartCoroutine("Tiro");
                podeAtirar = false;
                auxMaxMunicaoNaArma -= 1;
                if (fogoDaArma != null)
                    fogoDaArma.Play();
                //sai som so se houver audio
                if (somDoTiro != null)
                    controleAudio.PlayOneShot(somDoTiro);
                if (auxMaxMunicaoNaArma == 0 && auxMaxMunicaoForaDaArma == 0)
                {
                    if (somDeArmaVazia != null)
                    {
                        controleAudio.PlayOneShot(somDeArmaVazia);
                    }
                }
                if (!mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel semMirarRecuox e semMirarRecuoY
                    float semMirarAleatorioX = Random.Range(-semMirarRecuoX, semMirarRecuoX);
                    float semMirarAleatorioY = Random.Range(-semMirarRecuoY, semMirarRecuoY);

                    minAux.transform.position += transform.right * semMirarAleatorioX;
                    minAux.transform.position += transform.up * semMirarAleatorioY;
                    minAux.transform.position += transform.forward * semMirarRecuoZ;
                    //espalhar disparos

                    RaycastHit hit;
                    for (int i = 0; i <= numeroDeDisparos; i++)
                    {
                        //espalhar disparos
                        Vector3 fireDirection = transform.forward;
                        Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                        Quaternion randomRotation = Random.rotation;
                        fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsSemMirar));
                        if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                        {
                            Quaternion hitRotacao = Quaternion.LookRotation(-hit.point);
                            GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                            buracoDoProjetil.transform.parent = hit.transform;
                            Destroy(buracoDoProjetil, 20);
                            if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                            {
                                Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                                rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                            }
                        }
                    }

                }
                if (mirando)
                {
                    //escolhe um numero aletorio que sera definido no editor pela variavel MirandoRecuox e MirandoRecuoY
                    float MirarAleatorioX = Random.Range(-mirandoRecuoX, mirandoRecuoX);
                    float MirarAleatorioY = Random.Range(-mirandoRecuoY, mirandoRecuoY);

                    maxAux.transform.position += transform.right * MirarAleatorioX;
                    maxAux.transform.position += transform.up * MirarAleatorioY;
                    maxAux.transform.position += transform.forward * mirandoRecuoZ;

                    RaycastHit hit;
                    for (int i = 0; i <= numeroDeDisparos; i++)
                    {
                        //espalhar os disparos
                        Vector3 fireDirection = transform.forward;
                        Quaternion fireRotation = Quaternion.LookRotation(fireDirection);
                        Quaternion randomRotation = Random.rotation;
                        fireRotation = Quaternion.RotateTowards(fireRotation, randomRotation, Random.Range(0.0f, espalhamentoDosProjetilsMirando));
                        if (Physics.Raycast(respawBala.transform.position, fireRotation * Vector3.forward, out hit, distancia))
                        {


                            GameObject buracoDoProjetil = Instantiate(buracoProjetil, (hit.normal * 0.05f) + hit.point, Quaternion.LookRotation(-hit.normal)) as GameObject;
                            buracoDoProjetil.transform.parent = hit.transform;

                            Destroy(buracoDoProjetil, 20);
                            if (hit.transform.gameObject.GetComponent<Rigidbody>() != null)
                            {
                                Rigidbody rg = hit.transform.gameObject.GetComponent<Rigidbody>();
                                rg.AddForce(forcaDoImpacto * respawBala.transform.forward);
                            }
                        }
                    }

                }
            }
        }
    }
    void Mirar()
    {
        if (Input.GetButton("Fire2"))
        {
            maxAux.transform.position = Vector3.SmoothDamp(maxAux.transform.position, max.transform.position, ref currentVelocity, smoothTime);
            transform.position = Vector3.SmoothDamp(transform.position, maxAux.transform.position, ref currentVelocity, smoothTime);
            mirando = true;
            //se houver camera secundaria sera aumentado o zoom
            if (cameraSecundaria != null)
            {
                cameraSecundaria.fieldOfView -= velocidadeDoZoom;
                if (cameraSecundaria.fieldOfView <= zoomCameraSecundaria)
                {
                    cameraSecundaria.fieldOfView = zoomCameraSecundaria;
                }
            }
            //aumentar zoom na camera primaria
            cameraPrimaria.fieldOfView -= velocidadeDoZoom;
            
            if(cameraPrimaria.fieldOfView <= zoomCameraPrimaria)
            {
                cameraPrimaria.fieldOfView = zoomCameraPrimaria;
            }
        }
        else
        {
            minAux.transform.position = Vector3.SmoothDamp(minAux.transform.position,min.transform.position,ref currentVelocity,smoothTime);
            transform.position = Vector3.SmoothDamp(transform.position, minAux.transform.position, ref currentVelocity, smoothTime);
            mirando = false;
            if(cameraSecundaria != null)
            {
                cameraSecundaria.fieldOfView += velocidadeDoZoom;
                if(cameraSecundaria.fieldOfView >= tirarZoomCameraSecundaria)
                {
                    cameraSecundaria.fieldOfView = tirarZoomCameraSecundaria;
                }
            }
            cameraPrimaria.fieldOfView += velocidadeDoZoom;
            if(cameraPrimaria.fieldOfView >= tirarZoomCameraPrimaria)
            {
                cameraPrimaria.fieldOfView = tirarZoomCameraPrimaria;
            }
        }
    }
    void Recarregar()
    {//municao necessaria para recarregar arma
        int municaoNessecaria =  maxMunicaoNaArma - auxMaxMunicaoNaArma;
        if (auxMaxMunicaoForaDaArma > municaoNessecaria)
        {
            auxMaxMunicaoNaArma += municaoNessecaria;
            auxMaxMunicaoForaDaArma -= municaoNessecaria;
        }
        else
        {
            auxMaxMunicaoNaArma += auxMaxMunicaoForaDaArma;
            auxMaxMunicaoForaDaArma = 0;
        }
    }
    void RecarregarShotgun()
    {
        
        
        if (auxMaxMunicaoNaArma >= maxMunicaoNaArma)
        {
            auxMaxMunicaoNaArma = maxMunicaoNaArma;
        }
        if (auxMaxMunicaoNaArma < maxMunicaoNaArma&&auxMaxMunicaoForaDaArma>0)
        {
            auxMaxMunicaoNaArma += 1;
            auxMaxMunicaoForaDaArma -= 1;
        }
        if (auxMaxMunicaoForaDaArma <= 0)
        {
            auxMaxMunicaoForaDaArma = 0;
        }
        
    }
    IEnumerator Tiro()
    {
        yield return new WaitForSeconds(velocidadeTiro);
        podeAtirar = true;
    }
}
pra funcionar a hierarquia tem q estar igual na imagem https://uploaddeimagens.com.br/imagens/2019-03-08-21-56_01-png
Min = eh onde a arma vai ficar quando n estiver mirando
Max = eh onde a arma vai ficar quando estiver mirando
MinAux = eh a que vai ficar seguindo o Min
MaxAux = tbem vai ficar seguindo o Max
 Funciona com shotgun,metralhadora,revolver talvez com sniper n testei
e a arma ja tem q ta com o braco,mas tbem funciona so a arma
e pra poder recarregar tem chamar a funcao Recarregar se for pra armas que tem cartuchos e pra armas que colocam bala por bala igual a shotgun tem q chamar a funcao RecarregarShotgun isso tudo na animacao  nos events.pra shotguns vc deve colocar a animacao de recarregar em loop pra ficar toda hora chamando a funcao recarregarShotgun pq ela carrega uma bala por vez e tem colocar mais linhas de codigo pra poder parar quando chegar no maximo de bala pra n passar e tbem pra parar a animacao de recarregar

diegopds
Avançado
Avançado

Masculino PONTOS : 1023
REPUTAÇÃO : 13
Idade : 20
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Arma tipo a do call of duty

Mensagem por gcs13 em Dom Mar 10, 2019 3:47 pm

UoW!! que top bro! Shocked
gcs13
gcs13
MembroAvançado

Masculino PONTOS : 527
REPUTAÇÃO : 24
Idade : 17
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Arma tipo a do call of duty

Mensagem por diegopds em Dom Mar 10, 2019 5:21 pm

@gcs13 escreveu:UoW!! que top bro! Shocked
se testo?funciono certinho?

diegopds
Avançado
Avançado

Masculino PONTOS : 1023
REPUTAÇÃO : 13
Idade : 20
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum