0416 랜덤 아이템 스폰너

2021. 4. 16. 14:32unity

velog.io/@zero9657/TIL-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EB%8D%B8%EB%A6%AC%EA%B2%8C%EC%9D%B4%ED%8A%B8-%EC%9D%B4%EB%B2%A4%ED%8A%B8

 

[Unity_03] 유니티 델리게이트, 이벤트

델리게이트이벤트👉 어떤 기능을 목록에 추가하면 델리게이트가 그 목록들을 대신 실행시켜 준다.어떤 계산을 할지, 계산하는 순간에 알고 있어야함👉 계산하는 내용이 달라졌을 때, 코드를

velog.io

 

using UnityEngine;

public class Hero : MonoBehaviour
{
    public float radius = 3f;
    // Start is called before the first frame update
    void Start()
    {
        this.OnDrawGizmos();
    }

    //플레이어 캐릭터는 주변에 반경만 그린다.
    private void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(this.transform.position, this.radius);
    }
}
using UnityEngine;
using UnityEngine.AI;

public class InGame : MonoBehaviour
{
    public Hero hero;
    public UIGame uiGame;
    public GameObject[] itemPrefebs;
    public int amount = 5;
    // Start is called before the first frame update
    void Start()
    {
        //히어로의 주변에 떨구는 아이템의 갯수가 5개이니, 아래의 메서드를 5번 반복
        for (int i = 0; i < 5; i++) 
        {
            this.GetRandPosition();
        }
    }
    //랜덤 아이템을 반경 안에서 랜덤 위치에 하나 떨구기
    public void GetRandPosition() 
    {
        var pos=Random.insideUnitSphere * this.hero.radius + this.hero.transform.position;
        NavMeshHit hit;
        if (NavMesh.SamplePosition(pos, out hit, this.hero.radius, NavMesh.AllAreas))
        {        
            Debug.Log(hit.position);
            int randIdx = Random.Range(0, this.itemPrefebs.Length);
            var prefab = this.itemPrefebs[randIdx];

            var go= Instantiate<GameObject>(prefab, hit.position, Quaternion.identity);
        }
        else 
        {
            Debug.LogFormat("{0}is not available.", pos);
        }
        
    }
}