리눅스에서 URP 프로젝트 열었는데 빨간 화면
: edit - project settings - graphics apis for linux 체크 해제, graphics apis for linux에서 vulkan을 openglcore 위로 올림
애셋 import 했는데 분홍색
: 애셋 리드미 읽기, 에딧 - 렌더링 - material을 urp로 바꾸는 기능 있음.
오클루전 컬링으로 특정 대상 강조?
맵 만들고 부모 오브젝트 하나 만들고 프리팹화 시키면 다른 곳에서 가져다 쓸 수 있다.
왜 프리팹화? : 맵 씬을 그대로 가져다 쓰는게 불가능하기 때문. 그래서 프리팹화 한 다음 맵을 끌어다 가져온다.
빌드명 뒤에 버전 명과 멀 업데이트 했는지 쓴다
디버깅을 위해 전체화면 풀기 있는듯
기본은 alt enter로 전체화면 가능?
오브젝트 이름이 같은데 달려있는 컴포넌트가 달라서 일괄 변경이 불가능할 때 스크립트로 인스펙터 버튼이나 메뉴 버튼을 만들 수 있다.
문제 - 카트, 쓰레기통 움직이는거 해결해보셈
: 리지드 바디 constraints에서 freeze position 하면? 동적으로는 움직일 수 있는 연산을 하는데 거기에 못 움직이게 하는 연산을 추가하니까 안됨. 리지드바디 떼면? 좋은 해결책이지만 그거 말고도 있음. 상호작용은 하게 하는데 움직임은 고정하게 하고 싶으면 어떻게 할까?
여기서 이거 말고 다른게 뭐가 있을까
Collider 크기 및 모양 조정: 물체의 Collider 크기나 모양을 조정하여, 물리 엔진에서 예상하지 못한 충돌이 발생하지 않도록 할 수 있습니다. 예를 들어, 바닥과의 충돌을 방지하기 위해 상단에만 충돌 영역을 설정할 수도 있습니다.
Kinematic Rigidbody 사용: Rigidbody를 Kinematic 모드로 전환하면 물리 엔진에 의해 영향을 받지 않으면서도 스크립트를 통해 동적인 움직임 제어가 가능합니다. 즉, 물리 법칙에 의한 힘이나 중력에는 반응하지 않지만, 코드로 위치와 회전을 제어할 수 있습니다.
MovePosition 사용: Rigidbody.MovePosition 메서드를 사용하면, 리지드바디의 움직임을 코드로 직접 설정할 수 있습니다. 이 방식은 물리 엔진과 충돌하지 않으면서도 객체의 이동을 부드럽게 제어할 수 있습니다. 움직임에 대한 물리적인 연산은 유지되지만, 강제적으로 위치를 지정할 수 있습니다.
Physics Material: Collider에 적용되는 Physics Material을 사용해 마찰을 낮추거나 0으로 설정하면, 물체가 특정 충돌 면에서 멈추지 않고 스무스하게 미끄러질 수 있습니다. 이를 통해 물리 엔진에 의해 멈추는 것을 방지할 수 있습니다.
AddForce 대신 직접 위치 조정: AddForce를 사용하는 대신 직접 위치를 조정하면, 물리 엔진에 의해 적용되는 힘을 제한하면서도 이동을 제어할 수 있습니다.
is kinematic 옵션에 대해 설명해줘
물리 연산 비활성화:
Kinematic으로 설정된 오브젝트는 물리 엔진에 의해 계산되는 힘(중력, 충돌 등)에 영향을 받지 않습니다.
물리적인 상호작용(예: 충돌에 의한 반작용, 중력 등)으로 인한 움직임이 없으며, 오브젝트가 스스로 움직이려면 스크립트를 통해 수동으로 위치나 회전을 조정해야 합니다
Kinematic 객체는 다른 Rigidbody와 충돌할 수 있지만, 그 자체는 물리적인 반작용을 받지 않습니다. 즉, 다른 물체가 Kinematic 오브젝트와 충돌하면, 충돌한 물체는 반응하지만, Kinematic 오브젝트는 움직이지 않습니다.
rigidbody에 달려있는 파라미터들 전부 다 설명해줘
layer overrides는 뭐임
Layer Override Priority
: 자신의 콜라이더와 겹치는 충돌이 발생할 때 어떤 것을 우선할지를 정해주는 우선순위이다.
: 숫자가 낮을수록 우선순위가 높다.
Include Layers
: 충돌행렬에서 충돌이 안되게 설정한 것들을 이 물체에만 충돌체크가 되도록 해준다.
Exclude Layers
: 설정한 레이어로 된 콜라이더와의 접촉은 무시한다.
Layer Overrides는 Unity에서 특정 레이어 설정을 재정의하거나 추가적인 제어를 할 수 있도록 하는 기능입니다. 이 기능은 주로 Lighting, Shadows, Physics, Rendering 등과 같은 시스템에서 레이어별로 다른 동작을 하도록 설정할 때 유용합니다.
Unity의 레이어(Layer) 개념
Unity에서 Layer(레이어)는 게임 오브젝트들을 그룹화하는 방법 중 하나입니다. 레이어는 다양한 시스템에서 필터링의 역할을 합니다. 예를 들어:
물리 시스템(Physics): 특정 레이어에 있는 오브젝트들끼리만 충돌하도록 설정할 수 있습니다.
렌더링(Rendering): 카메라가 특정 레이어에 있는 오브젝트만 렌더링할 수 있습니다.
조명(Lighting): 특정 레이어에 있는 오브젝트들에만 조명을 적용할 수 있습니다.
collider는 충돌 영역을 설정하고, rigidbody는 물리 적용을 관할
4번이 정답이었다.
character controller의 파라미터 전부 설명해줘
Unity의 Character Controller는 물리적인 움직임이 아닌, 직접적인 제어를 통해 캐릭터의 움직임을 처리할 수 있는 컴포넌트입니다. 주로 1인칭 또는 3인칭 캐릭터의 움직임을 구현할 때 사용됩니다. Character Controller는 Rigidbody와 다르게 물리 엔진의 힘이 아닌 스크립트로 직접 움직임을 제어하며, 충돌 감지를 지원하지만 중력이나 물리 연산을 적용하지 않습니다.
다음은 Character Controller 컴포넌트에 있는 주요 파라미터들의 설명입니다.
자식 오브젝트들의 Is Kinematic을 체크해야 하는데 그 수가 너무 많았음. 일괄 등록하려 해도 중간에 이름이 같고 컴포넌트 안 붙어있는 오브젝트들이 껴있어서 불가능.
팀장님께 여쭤봤더니 Editor 코드를 사용하면 된다고 하셨음.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SetKinematic : MonoBehaviour
{
public void SetKinematicTrue()
{
Rigidbody[] rigidbodies = GetComponentsInChildren<Rigidbody>();
foreach (Rigidbody rb in rigidbodies)
{
rb.isKinematic = true;
}
}
}
모든 오브젝트의 부모 오브젝트인 MapScene 오브젝트에 붙일 코드.
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(SetKinematic))]
public class ObjectMagic : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
SetKinematic setter = (SetKinematic)target;
if (GUILayout.Button("Make as Kinematic"))
{
setter.SetKinematicTrue();
}
}
}
inspector gui 구현하는 함수.
Editor 폴더에 넣어두면 알아서 된다고 함.
이렇게 나온다.
Editor 상속받아서 base.OnInspectorGUI();
이런거 가능한거. Editor.cs 가보면 target이 이렇게 정의돼있음.
public UnityEngine.Object target
{
get
{
return m_Targets[referenceTargetIndex];
}
set
{
throw new InvalidOperationException("You can't set the target on an editor.");
}
}
프로퍼티란 무엇인가? 명강의 해주심
단순히 get set 가진게 프로퍼티라고 해버리면 안됨. 데이터 접근과 수정을 캡슐화할 수 있는 거라고 하셨었나?
내가 필요로 하는 건데 다른 놈이 맘대로 수정해버리면 안되게 막을 수 있는.
모르면 마이크로소프트 learn 봐라. 제일 잘 정리돼있다. Auto-implemented properties, Access control ...