{TIL} Unity 개인 프로젝트 해설 강의 분석 1

Kwaksang·2024년 5월 14일

TIL

목록 보기
18/37
post-thumbnail

개인 과제 해설 풀이 1회차

팀원 TIL 공유

Chapter .1 기본 지식

Content .1 Vector의 특징

  • x축 & Y축으로 향해진 화살표
  • 방향
  • 길이 (=크기)
  • Vector란 방향과 크기를 알려주는 요소
  • 시작점 정보는 없음 (보통 원점에서 시작)
  • 좌표값 입력 가능 ((z축값), x축값, y축값)

Content .2 Vector의 Unity 활용

  1. 위치를 지정하기 위해
  2. Vector를 사용하기 위해

ex> A(2,4) - B(4,1) = X(-2,3)
VectorX 의 모습은 B가 A로 향하는 Vector와 같음
Player를 쫓는 몬스터의 Vector를 구할 때
Vector.Player - Vector.Monster = 플레이어에게 가는 몬스터 Vector

ex> Vector의 크기값에 따라 속도 조절 가능
크기는 다르지만 동일한 방향의 Vector Player,Monster가 있다면
VectorPlayer speed(5) - VectorMonster speed(2)
Player는 1초에 5의 크기 만큼 이동
Monster는 1초에 2의 크기 만큼 이동
Monster가 Player를 잡을 수 없음
그래서, Unity에서는 normalized를 활용하여 "정규화" 시킴
방향이 아닌 크기값만 1로 고정시켜 일정한 속도가 나오도록 만듦

  1. normalized : 방향만 필요한 값을 구할 때 사용
  2. magnitude : 크기만 필요한 값을 구할 때 사용

Content .3 Unity 유닛 크기 조절

  1. Scale 값을 직접 조절 (선호도 낮음)
  2. Camera Size 조절
  3. Pixels Per Unit 조절

Content .4 GexAxis와 GetAxisRaw의 차이

  1. GetAxis : 입력 시 0에서 해당 값까지 점차 빨라지며 할당
  2. GetAxisRaw : 입력 즉시 할당

Chapter .2 과제 풀이 해설

Content .1 캐릭터 생성

  1. SampleScene에 Create Empty 생성
  2. Create Empty를 Sprite로 이름 변경 및 이미지 추가
  3. 유닛 크기 조절
  4. SampleScene에 Create Empty 생성 후 Player로 이름 변경
  5. Sprite를 Player의 자녀로 추가

Content .2 캐릭터 이동 및 에임따라 시선 변경

  1. PlayerController 라는 Script 생성
  2. 위 스크립트를 Player에 Add Component
  3. 스크립트 작성
public class PlayerController : MonoBehaviour
{
	public float speed;
	// Unity에서 speed값 조절
	SpriteRenderer spriteRenderer;

	void Start()
	{
		spriteRenderer = GetComponentInChildren<SpriteRenderer>();
	}

	void Update()
	{
		// 입력에 따라 이동
		transform.position +=
        (new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"))).normalized
        * speed * Time.deltaTime;
		// Time.deltaTime : 시간당 프레임 균일화

		Vector3 mousePos = Input.mousePosition;
		// Vector3가 마우스의 포지션이라고 선언

		spriteRenderer.flipX = (mousePos.x < Screen.width/2);
		// 마우스포지션이 스크린의 너비의 반보다 작다면 X축을 기준으로 접혀라
	}
}

Chapter .3 내가 사용한 코드와 비교

public class MoveManager : MonoBehaviour
{
    SpriteRenderer spriteRenderer;
    [SerializeField] private float speed;

    void Start()
    {
        spriteRenderer = GetComponentInChildren<SpriteRenderer>();
    }

    void Update()
    {
        float vertical = Input.GetAxisRaw("Vertical");
        float horizontal = Input.GetAxisRaw("Horizontal");

        Vector2 direction = new Vector2(horizontal, vertical);
        direction = direction.normalized;

        if (horizontal > 0)
        {
            spriteRenderer.flipX = true;
        }
        else if (horizontal < 0)
        {
            spriteRenderer.flipX = false;
        }
        else
        {
            return;
        }
    }
}
  1. if 문에 내용이 1줄만 있다면 { } 를 생략할 수 있는 점을 몰라서 스크립트가 길어짐
  2. 굳이 조건을 걸어 나누지 않아도 되는 부분도 나누게 되어 코드가 길어짐

Input System을 활용하지 않고 스크립트를 활용하여 움직임을 구현하는 부분에선 동일했지만
보다 간편하게 제작 가능한 부분이 있었음에도 활용하지 못한 점이 아쉬움

Chapter .4 팀원 TIL 공유

Content .1 DeltaTime

  • 시간당 프레임 균일화를 위해 사용됨
  1. DeltaTime : 프로그램 전체에 적용됨
  2. fixedDeltaTime : 물리 엔진 관련 DeltaTime (물리 엔진 활용 시에만 적용됨)

Content .2 region

  • 코드를 접어두면서 이름을 넣어 확인할 수 있는 편의 기능
  1. #region 이름 : 접어두고 싶은 코드 상단부에 작성
  2. #endregion : 접어두고 싶은 코드 하단부에 작성
profile
게임은 재미와 기능!

0개의 댓글