250314 TIL

박소희·2025년 3월 14일

Unity_7기

목록 보기
47/94

밀 수 있는 오브젝트 수정

  • 플레이어의 시야 기준으로 방향을 판단하여 상호 작용하도록 수정했다.
private void DetectCamera()
{
    Transform cameraTransform = camera.transform;
    Vector3 cameraForward = cameraTransform.forward;    
    Vector3 toObject = (transform.position - cameraTransform.position).normalized;

    float dotProduct = Vector3.Dot(cameraTransform.right, toObject);
    if (dotProduct > 0)
    {
        puzzle.description = "왼쪽으로 밀기";
        right = false;
    }
    else
    {
        puzzle.description = "오른쪽으로 밀기";
        right = true;
    }
    Debug.Log(puzzle.description);
}

Vector3.Dot(Vector3 a, Vector3 b)

  • 두 벡터 간 내적 계산
  • 위 코드에서 카메라의 오른쪽 방향 벡터와 카메라에서 물체까지의 방향 벡터를 비교하였다.
  • dotProduct 값이 음수면 왼쪽, 양수면 오른쪽.

식물 기믹 수정

  • 식물 객체와 물병 객체를 상호작용하면 화분의 흙 색이 진하게 변하게 수정하였다.
  • 흙 에셋의 material의 BaseColor을 코드에서 바꿔주었다.
private void ChangeMat()
{
    Transform cover = transform.GetChild(0).GetChild(0);
	Renderer coverRenderer = cover.GetComponent<Renderer>();
    MaterialPropertyBlock block = new MaterialPropertyBlock();
    coverRenderer.GetPropertyBlock(block); // 기존 속성 block에 불러오기
    block.SetColor("_BaseColor", newColor);
    coverRenderer.SetPropertyBlock(block);
}

MaterialPropertyBlock

  • material의 개별 속성을 변경할 때 사용되는 객체
  • material 인스턴스를 복사하지 않고도 특정 오브젝트의 속성을 변경할 수 있다.
  • "_BaseColor"는 URP/HDRP Shader 사용 시 사용한다.
  • Standard Shader에서는 "_Color" 사용

메모리 구조

  • 데이터: 전역 변수, static 변수
  • : 프로그래머 할당(런 타임에 크기 결정), new, 가비지 컬렉터가 관리
  • 스택 : 지역변수, 매개변수(컴파일 타임에 크기 결정), struct

클래스 구조체 차이

  • 클래스: 참조 타입, 힙 영역, 상속 가능
  • 구조체: 값 타입, 스택 영역, 생성자 x(C# 11.0에선 가능), 상속 x,

변수 숫자로 구분하지 않기

가비지 컬렉터

  • objectPool - 무한 스크롤

0개의 댓글