게임프로젝트

1차 정리된 데모

ckhyeok 2020. 6. 30. 05:21

구현 방법

1. 오브젝트들을 각 종류마다 List로 설정한 후 거리 별로 Sorting 해준다.

List<GameObject> jelly = new List<GameObject>();
List<GameObject> block = new List<GameObject>();
List<GameObject> coin = new List<GameObject>();
    
jelly.AddRange(GameObject.FindGameObjectsWithTag("jelly"));
block.AddRange(GameObject.FindGameObjectsWithTag("block"));
coin.AddRange(GameObject.FindGameObjectsWithTag("coin"));

jelly.Sort(delegate (GameObject a, GameObject b)
{
    return Vector3.Distance(transform.position, a.transform.position).
    CompareTo(Vector3.Distance(transform.position, b.transform.position));
});
block.Sort(delegate (GameObject a, GameObject b)
{
    return Vector3.Distance(transform.position, a.transform.position).
    CompareTo(Vector3.Distance(transform.position, b.transform.position));
});
coin.Sort(delegate (GameObject a, GameObject b)
{
    return Vector3.Distance(transform.position, a.transform.position).
    CompareTo(Vector3.Distance(transform.position, b.transform.position));
});

 

2. 각 오브젝트들과 에이전트의 위치를 기준에 대한 float를 관찰해줍니다.

 for (int i = 0; i < block.Count; i++)
 {
     Vector3 dis = block[i].transform.position - transform.position;
     AddVectorObs(dis.x);
     AddVectorObs(dis.y);
 }
 for (int i = 0; i < jelly.Count; i++)
 {
     Vector3 dis = jelly[i].transform.position - transform.position;
     AddVectorObs(dis.x);
     AddVectorObs(dis.y);
 }
 for (int i = 0; i < coin.Count; i++)
 {
     Vector3 dis = coin[i].transform.position - transform.position;
     AddVectorObs(dis.x);
     AddVectorObs(dis.y);
 }
     AddVectorObs(transform.position.x);
     AddVectorObs(transform.position.y);

 

3. 에이전트의 행동을 관리하는 함수를 세팅 후 각 상황에 맞게 Switch문을 사용해 구현합니다.

 var action = (int)vectorAction[0];  

        switch (action)
        {
            case None:
                점프 중이 아니라면 실행                
                break; 
            case Jump:
                슬라이드 중이 아니라면 실행                  
                break; 
            case Down:
                점프 중이 아니라면 실행
                break;
        }

 

자세한 함수 별 설명과 사용 방법 및 구현 방법은 추후 추가 될 예정입니다.

 

구현결과

1번째 -> 5만번째 Learn
10만번째 -> 15만번째 Learn
20만번째 Learn 학습 결과

 

감사합니다.