146 lines
3.1 KiB
C#
146 lines
3.1 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using System.Collections;
|
|
|
|
public class FPSPlayerControl : MonoBehaviour {
|
|
|
|
public AudioClip gunSound;
|
|
public AudioClip reload;
|
|
public AudioClip needReload;
|
|
|
|
public ParticleSystem shellParticle;
|
|
public GameObject muzzleEffect;
|
|
public GameObject impactEffect;
|
|
public Text armoText;
|
|
|
|
//private bool inJump = false;
|
|
//private float jumpStart;
|
|
|
|
private bool inFire = false;
|
|
private bool inReload = false;
|
|
private Animator anim;
|
|
private int armoCount = 30;
|
|
|
|
private AudioSource audioSource;
|
|
|
|
void Awake(){
|
|
anim = GetComponentInChildren<Animator>();
|
|
audioSource = GetComponent<AudioSource>();
|
|
}
|
|
|
|
void Update(){
|
|
|
|
// Firing
|
|
if (ETCInput.GetButton("Fire")){
|
|
if (!inFire && armoCount>0 && !inReload){
|
|
inFire = true;
|
|
anim.SetBool( "Shoot", true);
|
|
InvokeRepeating( "GunFire", 0.12f,0.12f);
|
|
GunFire();
|
|
}
|
|
}
|
|
|
|
if (ETCInput.GetButtonDown("Fire") && armoCount==0 && !inReload){
|
|
audioSource.PlayOneShot(needReload,1);
|
|
}
|
|
|
|
if (ETCInput.GetButtonUp("Fire")){
|
|
|
|
anim.SetBool("Shoot", false);
|
|
muzzleEffect.SetActive(false);
|
|
inFire = false;
|
|
CancelInvoke();
|
|
}
|
|
|
|
// reload
|
|
if (ETCInput.GetButtonDown("Reload")){
|
|
|
|
inReload = true;
|
|
audioSource.PlayOneShot(reload,1);
|
|
anim.SetBool( "Reload",true);
|
|
StartCoroutine( Reload() );
|
|
}
|
|
|
|
// UTurn
|
|
if (ETCInput.GetButtonDown("Back")){
|
|
transform.Rotate( Vector3.up * 180 );
|
|
}
|
|
|
|
// Jump
|
|
/*
|
|
if (ETCInput.GetButtonDown("Jump")){
|
|
inJump = true;
|
|
jumpStart = transform.position.y;
|
|
}
|
|
|
|
if (inJump && transform.position.y - jumpStart <3f){
|
|
GetComponent<CharacterController>().Move( Vector3.up * 0.5f);
|
|
}
|
|
else{
|
|
inJump = false;
|
|
}*/
|
|
|
|
//armo
|
|
armoText.text= armoCount.ToString();
|
|
}
|
|
|
|
public void MoveStart(){
|
|
anim.SetBool("Move",true);
|
|
}
|
|
|
|
public void MoveStop(){
|
|
anim.SetBool("Move",false);
|
|
}
|
|
|
|
public void GunFire(){
|
|
|
|
if (armoCount>0){
|
|
// Muzzle and sound
|
|
muzzleEffect.transform.Rotate( Vector3.forward * Random.Range(0f,360f));
|
|
muzzleEffect.transform.localScale= new Vector3(Random.Range(0.1f,0.2f),Random.Range(0.1f,0.2f),1);
|
|
|
|
muzzleEffect.SetActive( true);
|
|
StartCoroutine( Flash ());
|
|
audioSource.PlayOneShot(gunSound,1);
|
|
|
|
// shell
|
|
shellParticle.Emit(1);
|
|
|
|
// Impact
|
|
Vector3 screenPos = new Vector3(Screen.width/2,Screen.height/2,0);
|
|
screenPos += new Vector3(Random.Range(-10,10),Random.Range(-10,10),0);
|
|
|
|
Ray ray = Camera.main.ScreenPointToRay( screenPos);
|
|
|
|
RaycastHit[] hits = Physics.RaycastAll(ray);
|
|
if (hits.Length>0){
|
|
Instantiate( impactEffect, hits[0].point - hits[0].normal * -0.2f,Quaternion.identity);
|
|
}
|
|
}
|
|
else{
|
|
anim.SetBool("Shoot", false);
|
|
muzzleEffect.SetActive(false);
|
|
inFire = false;
|
|
}
|
|
//
|
|
armoCount--;
|
|
if (armoCount<0) armoCount=0;
|
|
}
|
|
|
|
public void TouchPadSwipe(bool value){
|
|
ETCInput.SetControlSwipeIn("FreeLookTouchPad",value);
|
|
}
|
|
|
|
IEnumerator Flash(){
|
|
yield return new WaitForSeconds(0.08f);
|
|
muzzleEffect.SetActive( false);
|
|
}
|
|
|
|
IEnumerator Reload(){
|
|
yield return new WaitForSeconds(0.50f);
|
|
armoCount =30;
|
|
inReload = false;
|
|
anim.SetBool( "Reload",false);
|
|
}
|
|
}
|