Repository navigation
Expand file tree
/
Copy pathGunController
More file actions
93 lines (78 loc) · 2.74 KB
/
Copy pathGunController
File metadata and controls
93 lines (78 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class GunController : MonoBehaviour
{
public GameObject bulletPrefab; // 발사할 총알 프리팹
public Transform firePoint; // 총알 발사 위치
public float fireRate = 0.5f; // 총알 발사 간격
public int bulletsPerReload = 5; // 장전당 총알 수
public float reloadTime = 5f; // 재장전 시간
public Text ammoText; // 총알 갯수 텍스트
public Slider reloadSlider; // 재장전 쿨타임 슬라이더
private int bulletsLeft; // 남은 총알 수
private bool isReloading = false; // 재장전 여부
private float nextFireTime = 0f; // 다음 발사 가능 시간
public bool gameStarted = false;
void Start()
{
bulletsLeft = bulletsPerReload; // 초기 총알 수 설정
UpdateAmmoText(); // 초기 총알 수 텍스트 업데이트
reloadSlider.maxValue = reloadTime; // 재장전 슬라이더 최대값 설정
reloadSlider.value = 0; // 초기 재장전 슬라이더 값
}
void Update()
{
if(!gameStarted)
{
return;
}
if (isReloading)
{
// 재장전 중이면 발사 불가
return;
}
if (Input.GetButtonDown("Fire1") && Time.time >= nextFireTime)
{
HandleShooting(); // 총알 발사 처리
}
if (bulletsLeft <= 0)
{
StartCoroutine(StartReload()); // 재장전 시작
return;
}
}
void HandleShooting()
{
bulletsLeft--;
UpdateAmmoText(); // 총알 수 텍스트 업데이트
nextFireTime = Time.time + fireRate;
// 총알 생성 및 발사
GameObject bullet = Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
Rigidbody rb = bullet.GetComponent<Rigidbody>();
if (rb != null)
{
rb.velocity = firePoint.forward * 20f; // 총알 속도 설정
}
}
IEnumerator StartReload()
{
isReloading = true;
reloadSlider.value = 0; // 재장전 슬라이더 초기화
float elapsedTime = 0f;
while (elapsedTime < reloadTime)
{
elapsedTime += Time.deltaTime;
reloadSlider.value = elapsedTime; // 슬라이더 값 증가
yield return null;
}
bulletsLeft = bulletsPerReload;
UpdateAmmoText(); // 총알 수 텍스트 업데이트
reloadSlider.value = reloadTime; // 재장전 슬라이더 최대값으로 설정
isReloading = false;
}
void UpdateAmmoText()
{
ammoText.text = "총알 개수 : " + bulletsLeft.ToString(); // 총알 수 텍스트 업데이트
}
}