28. Unity 게임개발 입문 팀 프로젝트(2)

이규성·2023년 12월 1일
0

TIL

목록 보기
33/106

12/01 어제 구현하지 못했던 탄알을 구현하자!

📌알고리즘 코드 카타 (Algorithm Code Kata)

정수 내림차순으로 배치하기

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

입출력 예

nreturn
118372873211

오늘은 성공했다 !

using System;

public class Solution 
{
    public long solution(long n) 
    {
        long answer = 0;
        long k = (long)(Math.Log10(n) + 1);
        long[] ary = new long[k];
        
        long i = 0;
        
        while (n != 0)
        {
            ary[i] = n % 10;
            i++;
            n = n / 10;
        }
        
        long num;
        
        for(long j = 0; j < ary.Length; j++)
        {
            for (long h = j + 1; h < ary.Length; h++)
            {
                if (ary[h] < ary[j])
                {
                    num = ary[j];
                    ary[j] = ary[h];
                    ary[h] = num;
                }
            }
        }
        
        long x = 1;
        
        for (long j = 0; j < ary.Length; j++)
        {
            answer += ary[j] * x;
            x = x * 10;
        }        
        return answer;
    }
}

배열에 할당된 값을 바꿔주는 코드를 작성하여 해결하였다. 역시 기본기를 더 다져야할 듯 싶다. . .

📌팀 프로젝트 진행 !

스크럼 내용

탄알 구현

// BulletCtrl.cs
public class BulletCtrl : MonoBehaviour
{
    public float speed = 5.0f;
    public float lifeTime = 5.0f;
    
    void Start()
    {
        // 시간이 지나면 오브젝트 삭제
        Destroy(gameObject, lifeTime);
    }
    
    void Update()
    {
        // x값에 1을 더해준다. 업데이트 메서드에 넣어서 반복 실행
        transform.Translate(Vector2.right.normalized * speed * Time.deltaTime);
    }
}
// ShootingBullet.cs
private void CreateProjectile()
{
    // 마우스 포인터의 좌표를 스크린 기준으로 값을 얻는다.
    Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    // 스크린 중앙을 기준으로 벡터값이 나오므로 객체의 벡터값을 빼줘서 기준을 객체로 만들어 준다.
    Vector2 newAim = (direction - (Vector2)transform.position).normalized;
    // 마우스 포인터까지의 방향 벡터를 얻는다.
    float rotZ = Mathf.Atan2(newAim.y, newAim.x) * Mathf.Rad2Deg;
    // 생성(프리펩의 불릿, 생성 지점, 로테이션 값에 마우스 포인터까지의 방향 벡터를 넣어준다.
    Instantiate(_prefabBullet, _bulletSpawnPosition.position, Quaternion.AngleAxis(rotZ, Vector3.forward));
}

마우스 포지션으로 탄알을 쏘는 것은 그리 어렵지 않았지만 탄알의 벡터z값이 스크린의 중앙으로 고정이 되어서 캐릭터가 이동하면 문제가 발생했다. 여러 스크립트와 영상들을 보면서 이리저리 만져본 결과
벡터 - 벡터를 이용하여 해결하였다.

🤸🏻‍♀️Feedback

유니티 안에서의 오브젝트 위치는 벡터값으로 결정이 되고, 제일 중요한 값이었다. 구현에는 성공하였지만 사실 코드에 대한 이해도는 현저히 낮다. . . 주말에 시간을 내어 명확하게 코드 리뷰를 해서 흡수할 예정이다.

0개의 댓글