바로 직전의 포스팅을 보았는데
글의 규모가 너무 넓고 집중이 되지 않았습니다.
기술의 핵심만을 작성하는 기술을 연습 해보겠습니다.
고로 오늘은 짧게 작성하겠습니다.
지난 포스팅에서 작성한 Weapon에 1가지 상태를 추가할 것입니다.
예전에 포스팅한 동영상에서 눈치채신 분들도 있겠지만, Weapon의 상태는 1가지 더 존재합니다.
Bash 기술을 사용하여 WeaponDetectCollider가 생성되었을 때
플레이어 주변의 Weapon들은 CanBash 상태가 됩니다.
하지만 많은 무기들 중에 플레이어가 원하는 무기를 선택할 수 있어야겠지요.
원하는 무기를 선택하기 위해선 조준선이 필요했습니다.
조준선은 SphereCast를 이용하면 간단하게 구현 가능하겠죠?
public class WeaponDetectColldier : MonoBehaviour
{
private bool _isFindBashWeapon = false;
private Vector3 _bashWeaponVector = Vector3.zero;
.
.
void Update(){
FindBashWeapon();
}
private void FindBashWeapon()
{
if (Physics.SphereCast(transform.position, 0.3f, dirVector, out RaycastHit hit, _sphereCollider.radius + 1.0f , layerMaskWeapon))
{
if (hit.transform.gameObject.tag == "Weapon" && hit.transform.GetComponent<Weapon>().isCanBash)
{
_isFindBashWeapon = true;
_bashWeaponVector = hit.transform.position;
hit.transform.GetComponent<Weapon>().ChangeTriggerBashBool(true);
}
}
else
{
_isFindBashWeapon = false;
_bashWeaponVector = Vector3.zero;
}
}
.
.
}
WeaponDetectCollider에 FindBashWeapon 함수를 추가합니다.
말 그대로 CanBash인 무기를 찾는 함수이며, SphereCast에 감지된 무기가 CanBash 상태일 경우
해당 무기의 상태를 바꾸는 함수(ChaneTriggerBashBool())을 실행시키고,
해당 무기의 Position을 Vector변수에 할당합니다.
public class Weapon : MonoBehaviour {
.
.
_isTriggerBash = false;
private void FixedUpdate()
{
.
.
CheckWeaponBashStatus();
ChangeWeaponColor();
}
private void CheckWeaponBashStatus()
{
if (_isTriggerBash)
{
SetOnTriggerBashBool();
}
else if (_isCanBash != _weaponCollider.IsCanBash)
{
if (_weaponCollider.IsCanBash)
{
SetOnBashBool();
}
else
{
SetOffBashBool();
SetOffTriggerBashBool();
}
}
else
{
SetOffTriggerBashBool();
}
}
private void ChangeWeaponColor()
{
if (_isTriggerBash)
{
weaponColor.material = _weaponMat[3];
}
else if (_isCanBash)
weaponColor.material = _weaponMat[1];
else
weaponColor.material = _weaponMat[0];
}
public void ChangeTriggerBashBool(bool changeBool)
{
if (changeBool)
{
if (_isCanBash)
{
SetOnTriggerBashBool();
}
}
else
{
SetOffTriggerBashBool();
}
}
private void SetOnTriggerBashBool()
{
_isTriggerBash = true;
}
private void SetOffTriggerBashBool()
{
_isTriggerBash = false;
}
}
ChangeTriggerBashBool() 함수를 실행한 Weapon Class는 TriggerBash 상태가 됩니다.
Trigger 상태인 무기의 좌표도 저장했고, 월드에 인스턴스화 하여 상태 구별도 성공적으로 구현했습니다.
이제 Weapon이 준비가 되었으니
남은 것은 TriggerBash인 무기에 플레이어가
돌진하는 기능을 구현하면 끝이나겠지요.
다음 포스팅부턴 Bash 클래스 설계로 작성하겠습니다.
'개발 프로젝트 > Unity - WeaponGameProject' 카테고리의 다른 글
WeaponGameProject - Weapon 클래스 설계 (2) (Bash와 상호작용하는 Weapon의 상태 구현) (0) | 2023.11.28 |
---|---|
WeaponGameProject - Weapon 클래스 설계 (1) (SphereCast를 활용하는 감지 클래스) (1) | 2023.11.27 |
WeaponGameProject - Player 클래스 설계 (3) (bool 타입을 통한 플레이어 상태 구현) (1) | 2023.11.26 |
WeaponGameProject - Player 클래스 설계 (2) (Spring Arm Camera 구현) (1) | 2023.11.23 |
WeaponGameProject - Player 클래스 설계 (1) (Key Input을 클래스로 만들자) (1) | 2023.11.23 |