Project14 [Unity] 지진 시뮬레이션 14 - 문제 분석 및 수정 학습이 진행되었으나 매우 더디게 진행되었으며 일정 수준 이상으로는 진행이 멈췄다.빠른 학습을 위해 50 이하가 되면 초기화하도록 하였으나 이로 인해 다른 플레이어도 잘 가던 도중에 초기화가 된다. 그리고 모험심이 큰 플레이어가 벽에 훨씬 잘 부딪히기 때문에 잘 탈락하고, 이에 따라 모험을 하려는 플레이어가 줄어든다.여러 가지 이유가 있겠지만 먼저 이 문제들을 해결해야 할 것 같다.벽에 닿는 것으로 탈락 판정을 하는 것이 치명적으로 학습을 더디게 하기 때문에 이를 없애고, 일정한 시간을 두어 턴을 진행시키도록 할 것이다.1. 벽 이동 제한벽에 접촉한 방향을 알아내고 이 방향으로의 추가적인 진행을 막을 것이다. playerDamage에 벽에 닿으면 탈락하는 코드를 지운다.else if(other.transf.. 2024. 5. 5. [Unity] 지진 시뮬레이션 13 - 반복 학습 지속적으로 학습이 진행되도록 만들 것이다. 1. 변수 정리 여러 곳에 퍼져 있는 게임 환경 변수들을 gameManager 코드에 모을 것이다. playerMove에 있는 게임 환경 변수를 gameManager에 옮긴다. public int DNASize; public float ActionInterval; public float playerSpeed; DNA = new int[DNASize]; . . . int time = (int)((Time.time - StartTime)/ActionInterval); . . . transform.Translate(Move * Vector3.right * playerSpeed * Time.deltaTime); 위 코드를 수정해 준다. DNA = new int[game.. 2024. 4. 5. [Unity] 지진 시뮬레이션 12 - 유전 알고리즘 시뮬레이션의 핵심인 유전 알고리즘을 작성할 것이다.선택, 교차, 변이, 대치 과정을 거쳐 자녀에게 유전정보를 물려주는 코드이다. 1. 부모 DNA 선택 모든 플레이어 중에서 살아남지 못한 플레이어들을 자식 플레이어로 재활용할 것이다. DNA를 물려받게 하기 위해 생존 리스트에 있는 부모 중 무작위의 부모로부터 DNA를 추출하였다. 살아남지 못한 플레이어를 검사한다. for (int i = 0; i < Count; i++) { if(i == Survivor[Survivor_Count_Num]) Survivor_Count_Num++; else { } } 무작위의 부모 DNA를 추출한다. for (int i = 0; i < Count; i++) { if(i == Survivor[Survivor_Count_Nu.. 2024. 4. 4. [Unity] 지진 시뮬레이션 11 - 생존 리스트 생성 생존 리스트를 생성하여 유전이 일어날 수 있도록 할 것이다. 1. 턴 종료 플레이어가 50명 이하로 줄면 턴을 종료할 것이다. public int LiveObjectNumber; void Start() { LiveObjectNumber = Count; } 먼저 현재 생존한 플레이어를 모니터링할 변수를 gameManager 코드에 추가한다. void OnTriggerEnter(Collider other) { if(other.tag == "box" || other.tag == "book") { float damage = other.GetComponent().velocity.magnitude; if(damage > 1) gameObject.SetActive(false); } else if(other.trans.. 2024. 4. 3. [Unity] 지진 시뮬레이션 10 - 오브젝트 복제 플레이어를 코드로 복제하여 리스로 쉽게 값에 접근할 수 있도록 할 것이다. 1. 플레이어 생성 플레이어를 복제하고, 코드에서 리스트로 관리할 것이다. gameManager코드를 생성한다. 그리고 함수를 추가한다. public int Count; public GameObject BaseObject; public GameObject ParentObject; public List ObjectList = new List(); void SetObject() { for (int i = 0; i < Count; i++) { ObjectList.Add(Instantiate(BaseObject, ParentObject.transform)); ObjectList[i].SetActive(true); } } 대상 오브젝트를 .. 2024. 4. 2. [Unity] 지진 시뮬레이션 9 - 유전학습 DNA 생성 유전학습 알고리즘의 DNA를 만들 것이다. 동, 서, 남, 북, 정지를 나타내는 5가지 종류의 값을 가질 수 있는 유전자를 1000개 정도 만들고 0.1초 간격으로 유전자에 있는 행동을 행하도록 만들 것이다. 1. DNA 생성 playerMove 파일에서 DNAsize와 DNA를 추가한다. public int DNASize; public int[] DNA; void Start()에서 DNA 배열의 크기와 값을 할당한다. void Start() { DNA = new int[DNASize]; for(int i = 0; i < DNA.Length; i++) DNA[i] = Random.Range(0,6); } 유전정보는 동, 서, 남, 북, 정지로 5가지의 값을 지니므로 처음에는 무작위의 0에서 5 사이의 값.. 2024. 4. 1. [Unity] 지진 시뮬레이션 8 - 카메라 배치, 지진 효과 구현 카메라를 배치하여 플레이어의 이동을 지켜볼 수 있게 만들 것이다. 1. 카메라 배치 카메라를 만들어서 적당한 위치에 배치해 둔다. Audio Listener를 꺼준다. 각각의 카메라에 디스플레이를 설정해 준다. 2. 지진 효과 건물이 흔들리는데 카메라가 고정되면 카메라가 건물을 벗어나기도 하기 때문에 카메라를 건물의 자식 오브젝트로 설정한다. 그리고 따로 지진 이펙트를 만들어준다. public bool Play; public float amount; Vector3 originPos; void Start() { originPos = transform.localPosition; } void Update() { if(Play) transform.localPosition = (Vector3)Random.insi.. 2024. 3. 31. [Unity] 지진 시뮬레이션 - 7 (경로 이동에 따른 점수 측정) 인공지능이 학습을 진행하기 위해서는 더 많이 이동한 우수한 개체를 선택해야 하기 때문에 이동한 거리에 따라 점수를 부여해야 한다. 그렇기에 경로가 진행될수록 점수를 부여받도록 만들었다. 1. 타일에 숫자 매기기 마땅한 방법이 떠오르지 않아서 타일마다 숫자를 매겨보기로 하였다. 타일에 숫자를 매기기 전에 방해가 될 만한 것들을 전부 가려준다. 위치에 따른 번호를 매겨준다. 2. 타일 숫자 인식 콜라이더의 밑부분을 조금 튀어나오게 하여 바닥을 인식하도록 한다. 타일 태그를 추가하고, 바닥에 타일 태그를 적용한다. 그리고 바닥을 인식하는 코드를 추가한다. using System.Collections; using System.Collections.Generic; using UnityEngine; public c.. 2024. 3. 27. 이전 1 2 다음