본문 바로가기
Project/[Unity] 지진 시뮬레이션

[Unity] 지진 시뮬레이션 14 - 문제 분석 및 수정

by ruki 2024. 5. 5.

학습이 진행되었으나 매우 더디게 진행되었으며 일정 수준 이상으로는 진행이 멈췄다.

빠른 학습을 위해 50 이하가 되면 초기화하도록 하였으나 이로 인해 다른 플레이어도 잘 가던 도중에 초기화가 된다.

그리고 모험심이 큰 플레이어가 벽에 훨씬 잘 부딪히기 때문에 잘 탈락하고, 이에 따라 모험을 하려는 플레이어가 줄어든다.

여러 가지 이유가 있겠지만 먼저 이 문제들을 해결해야 할 것 같다.

벽에 닿는 것으로 탈락 판정을 하는 것이 치명적으로 학습을 더디게 하기 때문에 이를 없애고, 일정한 시간을 두어 턴을 진행시키도록 할 것이다.


1. 벽 이동 제한

벽에 접촉한 방향을 알아내고 이 방향으로의 추가적인 진행을 막을 것이다.

 

playerDamage에 벽에 닿으면 탈락하는 코드를 지운다.

else if(other.transform.parent.gameObject.tag == "wall") GameOver();

 

그리고 playerMove에 벽에 닿고 있으면 반대 방향으로 이동하여 빠져나오는 코드를 추가하면 쉽게 구현할 수 있다.

void OnTriggerStay(Collider other)
{
    if(other.transform.parent.gameObject.tag == "wall")
    {
        transform.Translate(2*Vector3.left * gameManager.instance.playerSpeed * Time.deltaTime);
    }
}

 


2. 재시작 수정

대부분이 생존할 수 있게 됨으로 50명 이하가 되면 초기화하는 기존 방법에서 일정 시간이 지나면 초기화하는 코드로 바꿔준다.

 

gameManager에 타이머를 추가하여 재시작할 때마다 초기화해 준다.

float StartTime;

void Start()
{

    StartTime = Time.time;
    
}

void Reset()
{
    StartTime = Time.time;
    
}

 

특정 시간이 지나면 초기화한다.

public float time;

void Update()
{
	
    if(time < Time.time - StartTime) Reset();
}

그래도 학습이 많이 더디다. 속도를 늘릴 방법을 알아봐야 한다.