unity에서 이징 함수를 사용하여 좋은 느낌으로 적의 발생수를 늘려 간다

모베 활돌발 어드벤트 캘린더 n일째입니다.

unity에서 제한시간 슈팅 게임을 만들었을 때 적의 출현률이 항상 일정하고 매너리감이 있었기 때문에 좋은 느낌으로 하려고 할 때의 이야기입니다.
쓸 시간이 없었기 때문에 난필입니다. 죄송합니다.
시간이 끝나면 여러 번 다시 씁니다 ...

Before



처음 하고 있던 적의 출현율을 제어하는 ​​방법입니다.
  • 먼저 0과 1 사이의 적절한 임계 값을 결정하십시오.
  • 그리고 일정 시간마다 0~1의 난수를 생성
  • 난수가 임계치 이하이면 적을 생성 (instantiate)

  • 라는 느낌으로 행하고 있었으므로 항상 일정량의 적이 계속 출현한다는 상태였습니다. 처음에도 썼던 것처럼 이것이라면 완급이 없고 매너리화하므로 임계값을 시간 경과와 함께 변화시켜 나가기로 했습니다.

    After



    일정 비율로 증가해도 흥미롭지 않으므로 임계 값을 변경하기 위해 여유 함수를 사용합니다. 여유 함수에 대해서는 여기을 참조하십시오. 나는 평소 AfterEffetcs를 사용하여 동영상을 만들고 있기 때문에 꽤 익숙한 녀석입니다. Blender등 DCC툴로 애니메이션을 붙일 때나 unity의 timeline나 ue4의 Sequencer에서도 같은 것이 있으므로 알고 있는 분도 많다고 생각합니다.


    이징 함수는 그래프가 곡선이므로 출력되는 값의 변화에 ​​완급을 가할 수 있습니다. 가로축을 시간, 세로축을 임계값으로 사용함으로써 임계값의 변화에 ​​완급이 붙습니다. 그리고 다음과 같이 여유 함수를 스크립트로 구현합니다. 이 메소드는 인수로 현재의 경과 시간을 건네주면 대응하는 역치를 돌려줍니다.
    여유 함수 스크립트는 여기을 참조했습니다. 다양한 이징 함수가 있으므로 여러 가지를 시도해 보면 좋을지도 모릅니다.

    Easing(t)
    private float Easing(float t) {
        t /= 180; //この場合は制限時間が180秒のゲームを想定
        t *= 2;
        if (t < 1) {
            return 0.5f * t * t * t;
        } else {
            t -= 2;
            return 0.5f * (t * t * t + 2);
        }
    }
    
    

    그리고는 이 메소드로 돌아온 역치를 사용해 이하의 isSpawn() 와 같이 적의 생성 판정 메소드를 만들었습니다. Mathf.Lerp (0.03f, 0.6f, threshold); 에서는 이징 함수로부터 취득한 역치가 작거나 크거나 하면 적이 전혀 나오지 않거나, 반대로 너무 많았기 때문에 역치를 0.03~0.6 사이에서 선형 보간했습니다 (이 조정은 느낌) .

    isSpawn()
    private bool isSpawn () {
        //currentTimeは現在の経過時間
        float threshold = Easing(currentTime);
        //閾値が小さかったり大きかったりするとゲームバランスが悪いので調整
        threshold = Mathf.Lerp (0.03f, 0.6f, threshold);
        float ramdom = Random.Range (0, 1);
        if (ramdom <= threshold) {
            return true;
        }
        return false;
    }
    



    잡음이지만 이징 함수를 사용하여 좋은 느낌으로 적의 발생 수를 늘려 간 이야기였습니다.

    좋은 웹페이지 즐겨찾기