-
Notifications
You must be signed in to change notification settings - Fork 2
develop Drop System
Jeon-YJ1004 edited this page Mar 10, 2023
·
5 revisions
-
오브젝트 생성
오성혁 develop-Tile 참고 -
프리펩에 DestructibleObject.cs와 DropSystem.cs 추가.
예시로 아래는 체력템을 50%확률로 드랍하고, 코인을 50% 확률로 드랍. -
파괴가능한 오브젝트는 IDamageable 상속=> TakeDamage 함수 오버라이딩.
public class DestructibleObject : MonoBehaviour,IDamageable
{
public void TakeDamage(float damage)
{
Destroy(gameObject);
}
}
- PoolMangager의 적 Prefabs에 DropSystem.cs 컴포넌트 추가
- 몬스터 마다 경험치 Drops 설정
- 적 object가 destroy되면 0~100중 랜덤하게 수 생성
- randomNumber가 Drops의 dropRate보다 낮으면 드롭가능 리스트에 추가 ex) exp를 90%로 드롭하는데 randomNumber가 30이 나왔다=> 경험치 드롭할 수 있다.
- 드롭 가능 리스트는(posibleDrops) 드롭할 수 있는 아이템이 여러개일 때 사용. ex) 횃불을 파괴 후 나올 수 있는 아이템은 치킨, 코인 등 여러개이다.
- posibleDrops에서 랜덤하게 드롭할 아이템 선택
- 생성
public class DropSystem : MonoBehaviour
{
[System.Serializable]
public class Drops
{
public string name;
public GameObject itemPrefabs;
public float dropRate;
}
public List<Drops> drops;
void OnDestroy()
{
//로직 1. 적이 죽으면 랜덤 넘버 생성(아이템 확률)
float randomNumber = UnityEngine.Random.Range(0f, 100f);
//로직 3.
List<Drops> posibleDrops = new List<Drops>();
foreach(Drops rate in drops)
{
//로직 2
if (randomNumber <= rate.dropRate) posibleDrops.Add(rate);
}
//drop possible 인지 확인
if (posibleDrops.Count > 0)
{
//로직 4.
Drops drops = posibleDrops[UnityEngine.Random.Range(0, posibleDrops.Count)];
Instantiate(drops.itemPrefabs, transform.position, Quaternion.identity);
}
}