- AI 내비게이션으로 이동. 기본 공격 로직 코드
- 몬스터를 클릭하면 몬스터위치로 이동하지않고 제자리에서 공격하게끔 작성.
- 레이캐스트로 검출 해서 이동하고, 검출 못하는 이동할 수 없는 곳( 지형을 벗어난 곳 )은 따로 구분해놓음.
- 이 구조는 전투와 이동이 상호 배타적으로 발생해야 하는 경우에 유용합니다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RPG.Combat;
public class PlayerController : MonoBehaviour
{
void Update()
{
// 공격을 할 수 있으면 그 이후 코드를 실행하지 않음.
if (MouseClickToCombat()) return;
// 이동할 수 있으면 그 이후 코드를 실행하지 않음.
if (MouseClickToMove()) return;
// 공격이나 이동이 모두 불가능하면 "Can't move"라는 메시지 출력.
print("Can't move");
}
private bool MouseClickToCombat()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit[] hits = Physics.RaycastAll(ray);
foreach (RaycastHit hit in hits)
{
// 레이로 검출된 오브젝트들을 하나씩 CombatTarget 컴포넌트가 있는지 확인. 없으면 다음 오브젝트를 검색함. 있으면 아래 코드 진행.
CombatTarget target = hit.transform.GetComponent<CombatTarget>();
if (target == null)
{
continue;
}
// 오브젝트가 CombatTarget컴포넌트가 있으면(= 적 몬스터라면) 아래 코드 실행
if (Input.GetMouseButtonDown(0))
{
GetComponent<Fighter>().Attack();
}
return true; // 공격 성공 후 true 반환.
}
return false; // CombatTarget을 찾지 못하면 false 반환.
}
private bool MouseClickToMove()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool hasHit = Physics.Raycast(ray, out hit);
if (hasHit)
{
// 마우스 왼쪽 버튼을 눌렀을 때만 이동 처리.
if (Input.GetMouseButton(0))
{
GetComponent<PlayerMove>().MoveTo(hit.point);
}
return true; // 이동이 성공하면 true 반환.
}
return false; // 이동 불가능할 경우 false 반환.
}
}
MouseClickToCombat()는 마우스 클릭으로 공격을 시도하는 함수입니다. 이 함수는 마우스 포인터 위치에서 레이를 발사하여 해당 위치에 있는 오브젝트들 중에서 CombatTarget 컴포넌트가 있는 오브젝트(적 캐릭터 등)를 찾습니다.
MouseClickToMove()는 마우스 클릭으로 이동을 처리하는 함수입니다.
유니티 공격 애니메이션 딜레이 만들기 (0) | 2024.09.20 |
---|---|
유니티 RPG 초반 코드 (Basic Combat) (0) | 2024.09.19 |
유니티 마우스 클릭 위치로 캐릭터 이동하기, 카메라가 캐릭터 따라다니기 (1) | 2024.09.18 |
유니티 마우스로 게임화면 클릭한 위치를 카메라로부터 선 그리기 (2) | 2024.09.18 |
유니티 적 몬스터 이동, 공격, 사망 설정하기 (1) | 2024.09.16 |