25/03/10 멋사 정리

YSB1026·2025년 3월 10일
0

오늘 유니티 간단한 3D 프로젝트와, 드래곤 플라이트 초반부 했다.

Vector

 Vector3 a = new Vector3(1, 0, 0);
 Vector3 b = new Vector3(2, 0, 0);
 Vector3 c = a+b;
 Debug.Log("Vector : " + c);

 Vector3 a2 = new Vector3(1, 1, 0);
 Vector3 b2 = new Vector3(2, 0, 0);
 Vector3 c2 = a2+b2;
 Debug.Log("Vector : " + c);
 Debug.Log("길이 : " + c.magnitude);//magnitude로 벡터의 스칼라 값을 알 수 있음
 
 Vector3 normalizedVector = a.normalized;//유닛벡터 얻기.
 Debug.Log("길이가 1인 방향만 설정하는 정규화 : " + normalizedVector);
  1. 벡터 합 (Vector Addition)
    벡터 합은 두 벡터를 더하는 연산.
    주로 두 객체 간의 상대적인 위치나 이동 경로를 계산할 때 사용
-플레이어 이동
플레이어가 좌우, 상하로 이동할 때
입력을 받아 각 벡터를 합산하여 이동.
예를 들면, Vector3.right와 Vector3.forward를 합쳐서 대각선 이동을 할 수 있음.

-두 오브젝트의 상대적 거리
두 오브젝트 간의 상대적인 위치를 구할 때 벡터 합을 사용
적이 플레이어를 추적할 때 적의 위치에서 플레이어 위치로 가는 
방향 벡터를 계산할 때 사용할 수 있음.

  1. 벡터 차 (Vector Subtraction)
    벡터 차는 한 벡터에서 다른 벡터를 빼는 연산,
    주로 두 객체 간의 거리나 방향을 계산할 때 사용.
    B-A 벡터 연산을 하게되면 A벡터에서 B벡터로 바라보는 벡터가 나오는데,
    이를 이용해서 두 벡터의 거리나 방향등을 알 수 있음.
-플레이어와 적의 거리 계산
플레이어와 적의 위치 차를 구해 두 객체 간의 거리를 계산하거나, 추적 방향을 결정할 수 있음 
적이 플레이어를 향해 이동하려면 두 객체 간의 벡터 차이를 계산하여 방향을 구할 수 있음.

-카메라 추적
카메라는 항상 플레이어를 추적해야 할 때, 카메라 위치에서 플레이어 위치를 빼는 
벡터 차 연산을 통해 추적 방향을 계산할 수 있음.

  1. 벡터 정규화 (Vector Normalization)
    벡터 정규화는 벡터의 크기를 1로 만들어 단위 벡터로 만드는 연산,
    단위 벡터(unit vetor)를 구하기에, 방향을 알고자 할 때 사용하면 됨.

Unity - 3D, 2D(드래곤 플라이트 초반 부)

유니티에서 일반적으로
Scene, Game, Hierarchy, Project, Console, Inspector을 주로씀.

Scene

  • 게임 오브젝트들이 실제로 배치되고, 편집되는 공간
  • 게임의 월드 환경을 설정하고 구성할 수 있는 영역으로, 카메라를 통해 장면을 미리 볼 수 있다.
  • 오브젝트 배치, 이동, 회전 등 시각적으로 확인하며 작업할 수 있다.

Game (게임)

  • 실제 게임을 실행했을 때 보게 될 화면을 미리 볼 수 있는 창
  • Scene 창과는 달리, 게임이 실제로 실행되는 환경에서 플레이
  • 플레이 모드를 통해 게임이 어떻게 동작하는지 실시간으로 확인할 수 있다

Hierarchy (계층)

  • 현재 씬에 존재하는 모든 게임 오브젝트들이 계층적으로 볼 수 있는 창
  • 게임 오브젝트는 부모-자식 관계로 묶일 수 있으며,
    여기서 게임 오브젝트를 선택하거나 조작할 수 있다.

Project (프로젝트)

  • 프로젝트에 포함된 모든 파일과 자산(Assets)을 관리하는 창.
  • 씬에 필요한 스크립트, 모델, 텍스처, 오디오 파일 등을 관리하고 사용할 수 있다.

Console (콘솔)

  • Unity의 오류 메시지, 경고, 로그 등을 출력하는 창.
  • 개발 중 발생하는 문제를 추적하고 디버깅할 사용
  • 스크립트에서 Debug.Log()/print로 콘솔창에 출력 가능

Inspector (인스펙터)

  • 게임 오브젝트의 속성이나 컴포넌트를 편집하는 창
  • 오브젝트의 위치, 회전, 크기, 추가된 스크립트나 컴포넌트의 값 수정할 수 있음
  • 게임 오브젝트의 상태를 확인할 수 있음

Rigid body, Collider는 gpt에게 물어봤다.


3D 프로젝트는 간단히 rigid body와 mono behaviour 스크립트를 작성해 구체를 움직이는 게임을 만듦.
3D Object sphere에 해당 스크립트 적용,
메인 카메라는 구체 오브젝트의 자식으로 넣어서 따라다니게 했고,
구체와 카메라는 Inpsector에서 Rigid body의
Freeze Rotation을 활용하여 회전을 막았다.
깃허브 링크

using UnityEngine;
using UnityEngine.UIElements;

public class PlayerMovement : MonoBehaviour
{
    public float jumpForce = 5.0f;
    public float speed = 5.0f;

    private Rigidbody rb;
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        float moveX = Input.GetAxis("Horizontal");
        float moveZ = Input.GetAxis("Vertical");
        
        //안배우긴 했지만, 옛날에 했던 기억을 되살려서 정규화 적용
        //벡터를 정규화 해주는 이유는 상하 좌우 입력을 동시에 받을 때,
        //정규화를 안해주면 대각선 이동은 root2의 값을 가지기 때문에 빨라짐. 
        Vector3 move = new Vector3 (moveX, 0, moveZ);
        transform.Translate(move.normalized * speed * Time.deltaTime);

        //AddForce force vector를 더해줌. 
        //mode - ForceMod.Impulse : 순간적으로 힘을 가하는 옵션
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        }
    }
}

2D 프로젝트는 드래곤 플라이트 만드는 중..
유니티를 많이 써본적이 없어서, 복습도 하고 따라가야할 것 같다.
깃허브링크

외에도 깃허브 연동(git ignore적용)
유니티6에 와서 Input 시스템이 바뀌어서 설정 바꾸기
함수, 클래스 작성해서 적용해보는 등을 했다.

0개의 댓글