20231031_기록_isActive,setActive

2023. 10. 31. 20:42IT/TIL

오늘 한 것들

 

알고리즘 코드카타 풀이

카드 뒤집기 게임 문제 해결

카드 뒤집기 게임에 부족했던 주석들 채워넣기

Git 특강 참가

Github 팀 환경 구축하기

구체적인 게임 개발 담당 부분 정하기

제출할 사진 정하기

 

 

오전 9시부터 1시간 동안 알고리즘 문제풀기 시간이 책정되어 있어서

알고리즘 코드카타를 통해 프로그래머스의 C# 문제를 풀었다.

원래는 1시간만 문제를 풀고 게임 만들기를 시작하려고 했으나,

자릿수 구하기와 거듭제곱의 수학적 문제를 만나면서 갑자기 불이 붙어서

11시30분까지 문제풀이에 몰두하여 10문제를 풀었다.

 

그 중에서 불이 붙었던 문제는 주어진 숫자의 각 자릿수를 더하는 문제로

단순히 for 문에 10으로 나눈 몫과 나머지를 이용하여 풀 수 있었던 문제이다.

(해당 수를 뒤에서부터 짤라서 값을 더하는 방식)

 

그런데 갑자기 앞에서부터 짤라서 값을 더하는 방식으로 문제를 해결하고 싶었고,

이를 하기위해 몇 자리 수인지 구하기 위해 log를 사용하기로 결정했다.

C#에서 log를 사용하는 방법을 찾기 위해 구글링한 결과

Math.Log10함수를 이용하면 수의 log값을 구하고,

Math.Truncate를 이용하여 소수점 이하의 수를 버린다면

정수값을 얻는데 이가 자릿수이다.

 

이를 이용하여 for문에서 자릿수만큼 10을 제곱해서 입력값에서 몫과 나머지를 이용해

원했던 앞에서부터 짤라서 더하는 방식을 만들었다.

using System;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        int x = n;
        int s = 0;
        
        double a = Math.Log10(n);
        int b = (int)Math.Truncate(a);
        
        for (int i = b; i >= 0; i--)
        {
            s = (int)(x / Math.Pow(10, i));
            x = (int)(x % Math.Pow(10, i));
            answer += s;
        }     
        
        return answer;
    }
}

 

 

 

이후에 어제 문제였던 발생하였던 문제인

if 문의 조건을 int 값이 특정됨과 동시에 게임 오브젝트가 false인 경우에 발동하도록 하는 문제를 해결하였다.

처음에 생각했던 코드는 endTxt == false 의 코드를 사용하거나

SetActive의 상태를 판단하여 true나 false를 반환하는 isActive 함수를 만들어서 사용하려고 했다.

        if (cnt == 25 && endTxt == false)
        {
            audioSource.PlayOneShot(danger);
        }

간단히 endTxt == false 를 사용하려고 하였으나 오류가 발생하지 않지만 작동하지 않았다.

이후에 endTxt.isActive 함수를 만들어서 적용하려 하였으나

무한히 반복되는 isActive -> active -> isActive 와 if 반전 루트로 해결법이 아니라고 판단하고 구글링을 하였다.

 

 

구글링으로 찾아보니 유니티 - C#에서 자주 사용되는

gameObject가 활성화 된 상태인지 확인해주는 activeSelf라는 스크립트를 발견할 수 있었다.

activeSelf는 해당 gameObject에는 영향을 주지 않고 활성화 되어있는지 반환해주는 스크립트로

문제가 되었던 부분을 아래처럼 고쳐주니 문제가 해결되었다.

(SetActive로 true나 false 상태를 지정, activeSelf로 true나 false의 상태를 확인)

        if (cnt == 25 && endTxt.activeSelf == false)
        {
            audioSource.PlayOneShot(danger);
        }

 

 

이후에 구체적으로 게임에서 어느 부분을 개발할지 정하는 회의를 했다.

나는 게임 종료 시에 나오는 문구나 효과가 심심한 감이 있어서

endTxt로 만들어져있는 부분을 조절해보기로 했는데,

클리어 시에는 "Clear!", 게임오버 시에는 "Game Over!!"가 뜨는 방향으로 개발하려고 하면서

Txt를 두개 만들어서 상황에 맞게 보여주는 것이 좋을지

아니면 하나의 Txt를 사용하여 상황에 맞게 출력되는 문구를 변경하는 것이 좋을지 고민했다.

 

고민하다가 반은 장난으로 챗GPT에게 질문했는데

답변이 생각했던 것보다 퀄리티가 좋았다.

명확하게 두 옵션의 장점을 설명해 준 뒤에 해당 옵션을 사용하면 좋을 상황을 설명해주었다.

처음에는 두 개의 Txt를 만든 후에 잘 작동하는지 확인하고

이후에 여력이 되면 두 번째 옵션을 시도해볼 예정이다.