본문 바로가기

전체 글112

[Unity] ScriptableObject 공식 홈페이지에 따르면, ScriptableObject는 클래스 인스턴스와는 별도로 데이터를 저장할 수 있는 데이터 컨테이너이며, 그 목적은 사본이 생성되는 것을 방지하여 메모리 낭비를 줄이는 것이다. 처음 이런 설명을 들었을 때는 잘 와닿지 않았는데, 다음 예시를 생각해 보자. 가령, 과일 아이템들을 만드려 하고, 과일 아이템은 각자 이름, 색깔, 가격, 아이템 등급 등의 정보를 지닌다고 하자. 이 때, 같은 종류의 과일 아이템끼리는 이 값들을 모두 동일하게 공유할 것이다. 이 값들을 ScriptableObject로 만들어 모든 사과 아이템들이 참조할 수 있는 reference로 삼는 것이다.  예시를 통해 살펴보도록 한다. 먼저, ScriptableObject를 생성한다.[CreateAssetMenu.. 2024. 6. 9.
[Unity] 게임오브젝트의 회전 x, y, z 축을 기준으로 물체의 회전 각도를 나타내는 방법을 오일러각(Euler Angle)이라고 한다. 그러나, Euler Angle로 물체를 회전시킬 때 Gimbal Lock 현상이 발생하는데, 축이 겹쳐지면서 제 기능을 못 하게 되는 현상이라고 한다. 우리가 Unity를 다루면서 알아야 할 것은 Euler Angle가 Gimbal Lock 문제를 내재하고 있기 때문에 Unity가 물체를 회전시킬 때 Quaternion을 사용하고, 따라서 우리는 Euler Angle을 Quaternion으로 바꾸어 사용해야 한다는 것이다. 1. Quaternion.Euler 값을 통해 Euler Angle을 Quaternion으로 변환.void RotateUsingTransform(){ gameObject... 2024. 6. 8.
[Simulation] 백준 14719: 빗물 14719번: 빗물 (acmicpc.net) 처음에는 각 column 간의 차이를 위주로 접근하다가, 위에서부터 한 row씩 훑고 내려오면서 연산하는 방식으로 접근을 달리했다. 맨 위 row 부터 순회하면서, 만일 값이 1인 칸을 이미 만난 상태라면 이후 0인 칸을 만날 때마다 값을 더해준다. 만일 다시 값이 1인 칸을 만나면, 해당 값을 정답에 더해주고 0으로 초기화한다. 양 옆이 뚫려 있다고 생각해야 하므로, 다음 row로 내려갈 때 값을 0으로 초기화한다. 이 때 1인 칸을 만났는지 여부를 확인하는 flag(여기서는 isFill)을 false로 초기화 해 준다.#include #include using namespace std;int main(){ ios_base::sync_with_stdio.. 2024. 6. 8.
[ShaderGraph] 자릿 수 변환 Shader Graph에서는 자릿수가 다른 노드들끼리도 연결할 수 있다. 자릿수가 다른 노드끼리의 연결은 다음 규칙을 따른다.1. 한 자리 수(float)을 여러 자리 수(Vector2, Vector3, Vector4)에 연결: float의 값으로 모든 자릿수가 채워짐2. 여러 자리 수를 자릿수가 다른 여러 자리 수에 연결2-1: 모자란 경우, 앞에서부터 차례대로 채우고 남는 자릿수는 비워 둠2-2: 더 많은 경우, 앞에서부터 차례대로 채우고 남는 자릿수는 버림. 예) 값이 1인 float 노드를 Vector3 노드에 연결하면 그 값은 (1,1,1)이다.예) 값이 (1,1) 인 Vector2 노드를 Vector3 노드에 연결하면 그 값은 (1,1,0)이다.예) 값이 (1,1,1,1)인 Vector4 노드.. 2024. 6. 7.