94 lines
2.4 KiB
C#
94 lines
2.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Unity.Cinemachine;
|
|
using System;
|
|
using Random = UnityEngine.Random;
|
|
|
|
[RequireComponent(typeof(AudioSource))]
|
|
public class WeaponController : MonoBehaviour
|
|
{
|
|
[SerializeField] private GameObject bulletPrefab;
|
|
[SerializeField] private Transform firePos;
|
|
[SerializeField] private AudioClip fireSfx;
|
|
|
|
private CinemachineImpulseSource impluse;
|
|
|
|
private new AudioSource audio;
|
|
private MeshRenderer muzzleFlash;
|
|
|
|
void Start()
|
|
{
|
|
audio = GetComponent<AudioSource>();
|
|
impluse = GetComponent<CinemachineImpulseSource>();
|
|
|
|
muzzleFlash = firePos.GetComponentInChildren<MeshRenderer>();
|
|
muzzleFlash.enabled = false;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (Input.GetMouseButtonDown(0))
|
|
{
|
|
// 총알 생성 : bulletPrefab을 왼쪽 마우스 버튼 클릭할 때 마다 생성
|
|
// Instantiate(생성할프리팹, 위치, 각도)
|
|
Instantiate(bulletPrefab, firePos.position, firePos.rotation);
|
|
|
|
// 총소리 사운드 재생
|
|
audio.PlayOneShot(fireSfx, 0.8f);
|
|
|
|
// 타격감 연출
|
|
impluse.GenerateImpulse();
|
|
|
|
StartCoroutine(ShowMuzzleFlash());
|
|
}
|
|
}
|
|
|
|
IEnumerator ShowMuzzleFlash()
|
|
{
|
|
//MuzzleFlash 활성화
|
|
muzzleFlash.enabled = true;
|
|
|
|
// 텍스처의 Offset 값을 추출 (0, 0), (0.5, 0), (0.5, 0.5), (0, 0.5) => 0, 0.5
|
|
// 난수 발생
|
|
/*
|
|
Random.Range(0, 10) : 0, 1, 2, ..., 9
|
|
Random.Range(0.0f, 10.0f) : 0.0f ~ 10.0f
|
|
*/
|
|
Vector2 offset = new Vector2(Random.Range(0, 2), Random.Range(0, 2)) * 0.5f;
|
|
// 텍스처의 오프셋 변경
|
|
muzzleFlash.material.mainTextureOffset = offset;
|
|
|
|
// 스케일 변경
|
|
Vector3 scale = Vector3.one * Random.Range(1.0f, 3.0f);
|
|
muzzleFlash.transform.localScale = scale;
|
|
|
|
// Euler 오일각을 쿼터니언 타입으로 변환
|
|
Quaternion rot = Quaternion.Euler(Vector3.forward * Random.Range(0, 360));
|
|
muzzleFlash.transform.localRotation = rot;
|
|
|
|
// Waiting...
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
//MuzzleFlash 비활성화
|
|
muzzleFlash.enabled = false;
|
|
}
|
|
}
|
|
|
|
/*
|
|
Co-routine 코루틴 <> 멀티 스레드
|
|
|
|
|
|
*/
|
|
|
|
|
|
/*
|
|
NPC AI - 유한상태머신(Finite State Machine : FSM)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |