[Asset] Script de tiro para mobile
2 participantes
Página 1 de 1
[Asset] Script de tiro para mobile
Caso alguém tenha interesse em utilizar, responda algo e eu farei um tópico mais bem explicado...
A troca de cor da mira ainda não está 100% funcional...
- Scripts:
Sobre o launcher 2.0 que eu ia fazer não deu muito certo pq eu n entendo nada de design...
Script Arma:- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public class WeaponShoot : MonoBehaviour {
[Serializable]
public class Weapon
{
[HideInInspector]public int currentMunition;
public GameObject weaponObj;
public GameObject shotLocation;
public GameObject shotParticle;
public string weaponName;
public float reloadTime;
public int maxMunition;
public int extraMunition;
public int damage;
public float shotTime;
public AudioClip shotSound;
public AudioClip reloadSound;
}
[SerializeField] Text currentMunition;
[SerializeField] Text mark;
[SerializeField] Text currentWeaponName;
[SerializeField] Color32 markColor;
[SerializeField] Color32 shotMarkColor;
[SerializeField] GameObject weaponSelect;
[SerializeField] Weapon[] guns;
[SerializeField] AudioSource source;
RaycastHit hit;
int c = 0;
bool shooting = false;
bool reloading = false;
bool shootNow = false;
void Start()
{
currentWeaponName.text = guns [c].weaponName;
guns [c].currentMunition = guns [c].maxMunition;
for (int i = 0; i < guns.Length; i++) {
guns [i].weaponObj.SetActive (false);
guns [c].weaponObj.SetActive (true);
}
}
public void ShotVoidDown()
{
shootNow = true;
}
public void ShotVoidUp()
{
shootNow = false;
}
IEnumerator Shot()
{
yield return new WaitForSeconds (guns [c].shotTime);
shooting = false;
}
void Update(){
if (shootNow && !shooting && !reloading) {
shooting = true;
StartCoroutine ("Shot");
mark.color = shotMarkColor;
Debug.DrawLine (transform.position, hit.point, Color.red);
//Atirar
if (guns [c].currentMunition > 0) {
guns [c].currentMunition -= 1;
mark.color = shotMarkColor;
Instantiate (guns [c].shotParticle, guns [c].shotLocation.transform);
source.clip = guns [c].shotSound;
source.PlayOneShot (source.clip);
// Dano do tiro
if (Physics.Raycast (transform.position, transform.forward, out hit)) {
if (hit.transform.tag == "Enemy")
hit.transform.gameObject.GetComponent<EnemyAI> ().life.currentHealth -= guns [c].damage;
}
}
mark.color = markColor;
}
currentMunition.text = guns [c].currentMunition.ToString() + " /" + guns [c].extraMunition.ToString ();
if (guns.Length == 1) {
weaponSelect.SetActive (false);
} else {
weaponSelect.SetActive (true);
}
guns [c].weaponObj.SetActive (true);
}
// Selecionar arma
public void WeaponSelect()
{
if (c < guns.Length)
c += 1;
if (c >= guns.Length)
c = 0;
print (c);
for (int i = 0; i < guns.Length; i++) {
guns [i].weaponObj.SetActive (false);
}
}
// Recarregar
public void Reload()
{
if (!shooting && !reloading && guns [c].currentMunition < guns [c].maxMunition && guns [c].extraMunition > 0)
{
reloading = true;
source.clip = guns [c].reloadSound;
source.Play ();
int bullets = guns [c].currentMunition + guns [c].extraMunition;
if (bullets >= guns [c].maxMunition) {
guns [c].currentMunition = guns [c].maxMunition;
guns [c].extraMunition = bullets - guns [c].currentMunition;
} else {
guns [c].currentMunition = bullets;
guns [c].extraMunition = 0;
}
StartCoroutine ("ReloadCoroutine");
}
}
IEnumerator ReloadCoroutine()
{
yield return new WaitForSeconds (guns [c].reloadTime);
reloading = false;
}
}
Script Inimigo:- Código:
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(HealthBehaviour))]
[RequireComponent(typeof(NavMeshAgent))]
[RequireComponent(typeof(AudioSource))]
public class EnemyAI : MonoBehaviour {
GameObject player;
NavMeshAgent nav;
[HideInInspector] public HealthBehaviour life;
[SerializeField] float attackDistance = 5;
void Start()
{
life = GetComponent<HealthBehaviour> ();
nav = GetComponent<NavMeshAgent> ();
player = GameObject.FindGameObjectWithTag ("Player");
}
void Update()
{
float currentDistance = Vector3.Distance(transform.position, player.transform.position);
if (currentDistance >= attackDistance) {
nav.destination = player.transform.position;
}
transform.LookAt (player.transform);
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HealthBehaviour : MonoBehaviour {
public float maxLife = 100;
[SerializeField] Slider healthBar;
[HideInInspector] public float currentHealth;
void Start()
{
currentHealth = maxLife;
}
void Update ()
{
if (healthBar != null) {
healthBar.value = currentHealth;
healthBar.maxValue = maxLife;
}
if (currentHealth <= 0)
Destroy (gameObject);
}
}
Nota: Não está 100% completo é apenas um script mais básico,mas breve deixarei ele mais complexo...- Como usar:
É um script inspirado no sistema de tiro com raycast do marcos (mais especificamente a parte do recarregamento que é a mesma coisa...)
Portanto é quase a mesma coisa
Irei explicar apenas a parte da UI que é algo mais diferente do sistema do marcos...
currentMunition: Recebe um texto UI qualquer
mark: Outro texto UI qualquer, Só que ele deve ser personalizado no editor, com um " . " ou " o " ou " + " ou qualquer outra coisa...
currentWeaponName: Outro texto UI qualquer, que receberá o nome da arma colocado na array Weapons...
markColor: É a cor da mira da arma
shotMarkColor:É a cor que a mira ganhará quando houver um tiro
weaponSelect: Anexe um botão para trocar entre as armas
guns: Segue o mesmo princípio do vídeo do marcos...
source: Coloque um AudioSource qualquer para reproduzir os sons
Para atirar chame a void de nome "Shoot" em um Event Trigger do tipo "Pointer Down" e repita o mesmo para o "Pointer Up".
Recarregar crie um botão qualquer e chame a void "Reload".
Para fazer a troca de arma crie um botão qualquer e chame a void "WeaponSelect" | Nota:Se o player portar apenas uma arma,tal botão não aparecerá.
Caso tenha alguma dúvida, não excite em perguntar...
A troca de cor da mira ainda não está 100% funcional...
Última edição por PauloFR em Qua Nov 01, 2017 3:23 pm, editado 1 vez(es)
Re: [Asset] Script de tiro para mobile
Sim...Callyde Jr escreveu:Muito bom cara parabens.
Mas esse troca de arma?
<p style="color: gray;"><em>Para fazer a troca de arma crie um botão qualquer e chame a void "WeaponSelect" | Nota:Se o player portar apenas uma arma,tal botão não aparecerá.</em></p>
Tópicos semelhantes
» [DÚVIDA] CONVERTER SISTEMA DE TIRO COM RAYCAST DE PC PARA USO MOBILE
» Script de tiro para o photon 2
» [TUTORIAL] Script para jogo FPS Mobile
» Como fazer para o tiro ir para a direção onde o cano está apontado e não para cima
» [RESOLVIDO] como envia asset para asset store
» Script de tiro para o photon 2
» [TUTORIAL] Script para jogo FPS Mobile
» Como fazer para o tiro ir para a direção onde o cano está apontado e não para cima
» [RESOLVIDO] como envia asset para asset store
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos