유니티 게임 개발하기/2D 게임 개발일지 2015. 6. 10. 22:12 보스의 패턴을 만들어서 넣어두면 조건에 맞춰서 그걸 발동해주는 스펠(패턴)레벨은 패턴을 여러개 넣을수록 늘어날 수 있고, 실제 스펠을 실험용으로 만들어 넣고 실험해본 결과 실제로 보스는 한개가 아니라 여러개를 만들것이기 때문에, 나름의 모듈화를 시켜서 해당 프리팹을 호출하면 바로 보스로 기능할 수 있도록 구현했습니다. 실제 개발을 더 진행해봐야 알겟지만 아직까지는 정말 괜찮은 것 같아요. 다음은 스크립트 전체 내용입니다. GetChild() 함수 가 참 사용법이 쉽고 유용하다는게 느껴집니다.
서랍 스크립트를 만들어 봤습니다.
보스의 HP가 몇일 때 다음 스펠로 넘어갈지를
KeyHp 변수에서 지정하여 패턴의 전환이 가능합니다.
무리없이 돌아가는것을 확인했습니다.
어떤 오브제인지 지정할 필요 없이 차일드화된 순서대로 차일드를 가져온다는건 정말 편한거 같아요.
'유니티 게임 개발하기/2D 게임 개발일지' Related Articles
보스를 한 번 구현해보자
보스의 기능은 단순하게 총알 쏘기 이다.
보통 보스들은 Phase1 , 2, 3 … 을 가지게 되므로 이를 대비하여 준비해보자.
복잡한 거 다 버리고
보스 구현을 위한 씬을 만들어주자.
이렇게 대충 보스를 넣어준다.
이제 총알을 쏘기 위한 준비가 필요하다.
Weapon Script 를 만들어 코드를 짜보자.
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class Weapon : MonoBehaviour
{
public GameObject prefab_Bullet;
public bool currentFire = false;
public bool isFiring = false;
public float attackDelay;
private float updateDelay = 0f;
private void FixedUpdate()
{
Update_Firing();
}
private void Update_Firing()
{
if (isFiring)
{
updateDelay += Time.deltaTime;
if (attackDelay <= updateDelay)
{
updateDelay = 0;
PlayFire(currentFire);
}
}
}
public void StartFire()
{
if (currentFire == isFiring)
{
currentFire = true;
PlayFire(currentFire);
}
else
currentFire = true;
}
public void StopFire()
{
currentFire = false;
}
void PlayFire(bool _isFire)
{
isFiring = _isFire;
if (currentFire)
PlaySkill();
}
protected virtual void PlaySkill()
{
}
}
이제 이를 상속받은 BossSkill01 Script 를 만들거다.
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class BossSkill01 : Weapon
{
protected override void PlaySkill()
{
GameObject obj = Instantiate(prefab_Bullet, transform.position,
Quaternion.identity);
}
}
다음으로는 BossBullet 이 필요한데
이미지는 동그라미 아무 Sprite 나 가져오면 되고
Bullet 은 아래쪽으로 움직이도록 해주기 위해
Movement 라는 Script 를 만들자.
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour
{
public Rigidbody2D rb;
public float speed;
public Vector2 direction;
private void FixedUpdate()
{
rb.MovePosition(rb.position +
speed * direction * Time.deltaTime);
}
}
이제 Unity 로 돌아가 이들을 설정해주자.
총알에 Movement Script 를 넣어주고
Boss 자식으로 BossSkill01 이라는 객체를 만들어
BossSkill01 Script 를 넣어주고 BossBullet 과 Delay 를 입력한다.
다음으로 Boss Script 를 짜주자
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class Boss : MonoBehaviour
{
public Weapon playWeapon;
public Weapon weaponPhase1;
void Start()
{
Phase1();
}
IEnumerator PlayWeapon()
{
while(playWeapon != null)
{
playWeapon.StartFire();
yield return new WaitForSeconds(playWeapon.attackDelay);
playWeapon.StopFire();
}
}
void SetWeapon(Weapon _weapon)
{
if (playWeapon != null)
playWeapon.gameObject.SetActive(false);
playWeapon = _weapon;
playWeapon.gameObject.SetActive(true);
}
void Phase1()
{
SetWeapon(weaponPhase1);
StartCoroutine(PlayWeapon());
}
}
다시 Unity 로 돌아가서
이렇게 설정을 해주고
위에서 빼먹었는데
Bullet Script 에 Rigidbody2D 를 넣어주자.
이제 테스트해보면
1초마다 총을 쏘는 Boss 가 완성되었다.
다음에는 보스의 체력에 따라 phase1 , 2 , 3 이 나오도록 해보자!
오늘은 여기까지 :)