-
Notifications
You must be signed in to change notification settings - Fork 2
develop Gralic
Yoo Hyeokjin edited this page Jun 28, 2023
·
5 revisions
- 주인공 중심 원 영역을 주기적으로 공격하는 무기이다. 자세한 설명은 마늘에서 알 수 있다.
- 마늘을 구현할 때는 쿨타임이 지나면 instance를 생성하고 쿨타임이 지나면 instance를 삭제하는 식으로 구현할 것이다.
- 코드를 보면 알겠지만 Weapon들은 Weapon.cs를 상속받아서 만들었고 해당 Weapon의 스텟을 WeaponTotalStats[((int)Enums.EWeaponStat.원하는 Stat)]으로 가져올 수 있다.
using UnityEngine;
public class Gralic : Weapon
{
private GameObject mNewObj; // 생성한 instance를 저장할 변수
private float mTimer = 0; // 쿨타임과 지속시간을 체크할 타이머 변수
private bool mbExist = false; // 생성되었는지 삭제되었는지 확인할 변수
private void Update()
{ // Gralic 무기가 Player를 계속 따라 다녀야 하기 때문에 다음과 같이 transform의 position을 계속 Update 해주었다.
transform.position = GameManager.instance.Player.transform.position + new Vector3(0, 0.5f, 0);
}
public override void Attack() // Weapon에서 생성된 virtual Method를 override 했다.
{
GameObject objPre; // SkillFiringSystem에 저장한 Weapon Prefab을 저장할 지역 변수
if (IsEvoluction())
objPre = SkillFiringSystem.instance.evolutionWeaponPrefabs[WeaponIndex]; // 진화 Weapon
else
objPre = SkillFiringSystem.instance.weaponPrefabs[WeaponIndex]; // 일반 Weapon
mTimer += Time.deltaTime; // 현재 시간을 지속적으로 Update
if (mTimer > WeaponTotalStats[((int)Enums.EWeaponStat.Cooldown)])
{ // Gralic 쿨타임마다 공격을 하니까 쿨타임마다 생성과 삭제를 반복한다.
if(!mbExist) // Gralic instance가 존재하지 않다면
{
mNewObj = Instantiate(objPre); // 가져온 Prefab의 instance를 생성
mNewObj.transform.parent = GameObject.Find("SkillFiringSystem").transform; // SkillFiringSystem의 자식으로 해당 instance를 넣고
mNewObj.transform.position = GameManager.instance.Player.transform.position + new Vector3(0, 0.5f, 0); // Gralic의 초기 위치를 설정한다.
mbExist = true; // Gralic이 존재함을 저장
}
else
{
Destroy(mNewObj); // Gralic instance가 존재한다면 해당 instance를 삭제한다.
mbExist = false; // Gralic이 존재하지 않음을 저장
}
mTimer = 0; // 쿨타임 계산을 위해 시간을 초기화
}
}
public override void EvolutionProcess() // 무기 진화시 한 번 호출됨
{
}
}
다음의 Component를 추가한다.
- SpriteRenderer
- Rigidbody2D
- CircleCollider2D
- Gralic.cs
다음과 같이 Prefab을 만들어 준다.