Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- LINQ
- protected
- Transform
- AWAKE
- iNTERNAL
- 불러오기
- Update
- OnEnable
- 오브젝트
- SerializeField
- public
- 모작
- 저장
- 초기화
- private
- 게임개발
- 직렬화
- 게임제작
- 이동
- JSON
- ScriptableObject
- 죽림고수
- Unity
- 이벤트 함수
- C#
- LateUpdate
- 접근 제한자
- 게임모작
- FixedUpdate
- start
Archives
- Today
- Total
정명직의 게임개발
[Unity] 3D 죽림고수 만들기(2) - 화살 본문
이번에는 죽림고수에서 플레이어를 공격하는 화살을 만들어보고 플레이어와 충돌 처리까지 해보겠습니다.
화살 구현하기
화살 스크립트를 직접 작성해 보겠습니다.
public class Arrow : MonoBehaviour
{
[SerializeField] private float moveSpeed; // 스피드
private void Start()
{
// Start 이벤트 함수에서 Destroy를 실행시켜 5초 뒤에 오브젝트 삭제
Destroy(this.gameObject, 5f);
}
private void Update()
{
// Vector3.forward : 오브젝트 앞쪽 방향
// Translate를 사용해서 오브젝트를 앞으로 이동
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
// dir : 날아갈 방향, randomSpeed : 스피드를 랜덤으로 할건지 (기본값은 false)
public void Shoot(Vector3 dir, bool randomSpeed = false)
{
Vector3 direction;
// 방향을 정규화 해주고 동일한 높이로 날아가기 위해 y 값을 0으로 초기화
direction = dir.normalized;
direction.y = 0;
// 화살을 direction으로 회전
// LookRotation : 해당 벡터 방향을 바라보는 회전 상태를 반환한다.
transform.rotation = Quaternion.LookRotation(direction);
// 랜덤 스피도
if (randomSpeed)
{
moveSpeed = Random.Range(moveSpeed, moveSpeed + 1f);
}
}
}
Vector3.forward로 화살이 앞으로 날아가게 해 줍니다. 나중에 화살을 소환할 때 방향을 지정해 줘야 하기 때문에 Shoot 함수를 만들어 날아갈 방향으로 화살을 회전시켜 줍니다. 또한 죽림고수는 화살이 모두 일정한 속도로 날아가는 패턴이 있고 아닌 패턴이 있기 때문에 스피드를 랜덤으로 할 건지 받아줍니다.
Arrow 프리팹을 제작하고 플레이어와 충돌을 체크하기 위해 Rigidbody와 Box Collider를 추가해 줍니다.
화살이 정상적으로 날아가는지 테스트 스크립트를 작성해 보겠습니다.
public class Test : MonoBehaviour
{
[SerializeField] private GameObject arrow;
void Start()
{
// 15개 화살을 일직선으로 스폰함
for (int i = 0; i < 10; i++)
{
Arrow arrowObj = Instantiate(arrow, new Vector3(i + 1, 1, 0), Quaternion.identity).GetComponent<Arrow>();
arrowObj.Shoot(new Vector3(0, 0, 1), true); // 랜덤스피드 True
}
}
}
화살들이 z 축으로 날아가는 모습을 볼 수 있습니다.
플레이어와 충돌처리
충돌처리를 하기 위해 Arrow 태그를 추가하고 콜라이더 IsTrigger를 체크해줍니다.
public class PlayerController : MonoBehaviour
{
···
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Arrow")) // 태그 체크
{
Debug.Log("GameOver");
}
}
}
PlayerController에 충돌체크를 하는 코드를 추가해 줍니다.
콘솔 창을 보면 플레이어와 화살이 충돌했을 때 성공적으로 디버그가 찍히는 모습을 볼 수 있습니다.
이번 글에서는 화살을 움직이고 플레이어와 충돌처리까지 구현하였습니다. 다음 글에서는 유니티 오브젝트 풀링을 사용해서 화살 생성 패턴들을 만들어보겠습니다.
[Unity] 3D 죽림고수 만들기(1) - 플레이어
이번에는 직접 게임을 만들어보면서 게임 개발의 기본적인 요소를 배우려고 합니다. 첫 번째로 플래시게임 죽림고수를 모작하여서 3D게임으로 만들어보겠습니다. 죽림고수? 플레이어를 움직여
jikk.tistory.com
'Unity > 게임 제작' 카테고리의 다른 글
[Unity] 3D 죽림고수 만들기(1) - 플레이어 (3) | 2023.07.13 |
---|