개발
-
Unity Oculus 컨트롤러 진동개발/Unity 2020. 1. 21. 16:49
https://developer.oculus.com/documentation/unity/unity-haptics/ static void OVRInput.SetControllerVibration ( float frequency, float amplitude, Controller controllerMask ) OVR Haptic 대신 OVR.Input 의 SetControllerVibration 함수를 사용해 컨트롤러 진동을 설정할 수 있다. frequency와 amplitude는 각각 진동의 주파수와 진폭으로 0 - 1 사이의 float 타입 실수이고, controllerMask는 진동을 설정할 컨트롤러. 이 함수는 진동의 지속 시간을 설정할 수 없고, 2초가 지나면 진동은 자동으로 멈춘다. Corouti..
-
Unity/Oculus DistanceGrabber 물건 집어오는 동안 충돌 무시하게 하기개발/Unity 2020. 1. 17. 13:21
DistanceGrabber.cs 의 MoveGrabbedObject 함수를 수정 protected override void MoveGrabbedObject(Vector3 pos, Quaternion rot, bool forceTeleport = false) { if (m_grabbedObj == null) { return; } Collider[] grabbedColliders = m_grabbedObj.gameObject.GetComponentsInChildren(); Rigidbody grabbedRigidbody = m_grabbedObj.grabbedRigidbody; Vector3 grabbablePosition = pos + rot * m_grabbedObjectPosOff; Quaternio..
-
Display Encoding 정리, Display transfer function개발 2020. 1. 16. 10:10
빛, 텍스처나 다른 연산의 효과를 계산할 때 우리는 사용되는 값들이 선형적(linear)이라고 가정한다. 쉽게 말하면 덧셈과 곱셈이 예상대로 작동한다는 의미다. 하지만, 다양한 시각적 왜곡(visual artifact)을 피하기 위해 디스플레이 버퍼와 텍스처들은 비선형적(nonlinear) 인코딩을 사용한다는 사실을 고려해야 한다. 방법을 대충 설명하면 이렇다. shader의 결과값([0, 1] 범위)을 가져와 power of 1/2.2만큼 올린다. 텍스처와 색상에서는 반대로 한다. 대부분의 경우에는 GPU에게 이 처리를 맡길 수 있다. 여기서는 자세한 방법과 이런 방법을 사용하는 이유를 설명한다. 초기 디지털 영상처리 기술에서는 CRT가 표준이었다. CRT에서는 픽셀 하나에 가해지는 에너지가 증가할 때..
-
빌더 패턴개발/디자인 패턴 2020. 1. 16. 10:08
객체의 생성과 표현을 분리해, 동일한 생성 절차에서 다른 결과가 나올 수 있게 한다. 생성자만으로는 해결하기 어려운 문제를 위한 패턴. Product의 생성자는 비워 놓아 Builder를 사용하도록 강제한다. set 메서드들은 직접 사용하지 않고, Builder 클래스의 Build 메서드 내에서 사용한다. Director 클래스에서 Builder 객체를 생성한 뒤 Construct() 함수를 호출한다. Unity 예제 코드 public class CharacterBuilder { private int hp; private int attack; private int attackSpeed; public CharacterBuilder SetHp(int hp) { this.hp = hp; return this;..
-
추상 팩토리 패턴개발/디자인 패턴 2020. 1. 16. 10:07
객체를 구성하는 부분을 추상화한 뒤 여러 서브클래스가 상속받아 객체를 구성하는 패턴. 객체를 구성하는 클래스들의 생성 공정을 추상화한다. 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어 객체를 생성한다. 객체 생성 과정에 일관성이 있지만, 구현 내용이 추가될 때 추상 클래스도 수정해야 한다. Abstract class를 사용해 객체의 생성 과정을 추상화. 일관성을 갖게 한다. 생성되는 Product 객체도 Abstract class를 통해 추상화한다. Client 함수를 통해 A와 B객체의 일관된 생성 방법을 규정한다.
-
팩토리메소드 패턴개발/디자인 패턴 2020. 1. 16. 10:06
객체 생성을 위한 인터페이스를 정의, 생성할 인스턴스의 클래스는 파생클래스에서 결정하도록 하는 패턴. 팩토리 메소드는 객체 생성을 처리하며, 파생 클래스가 어떤 클래스를 만들 지 결정하게 함으로써 객체 생성 작업을 캡슐화한다. 기반클래스에 있는 클라이언트 코드와 파생클래스에 있는 객체 생성 코드를 분리하는 것. ConcreteACreator, ConcreteBCreator 이 같은 Creator 클래스를 상속한다. 따라서 두 클래스 모두에서 FactorMethod() 를 사용해 서로 다른 A와 B 인스턴스를 생성할 수 있다.
-
싱글턴 패턴개발/디자인 패턴 2020. 1. 16. 10:05
싱글턴 패턴을 사용해 인스턴스가 하나뿐인 객체를 만들 수 있다. 이 패턴이 적용된 객체는 하나만 생성될 수 있고, 어디서든 접근할 수 있다. 스레드 풀, 캐시, 대화상자, 설정, 디바이스 드라이버 등 클래스의 객체가 오직 하나만 생성되는 경우 사용한다. 기본적인 싱글턴 패턴 싱글턴 패턴 클래스는 private static 스스로의 객체(_instance) 를 갖는다. protected를 통해 기본 생성자를 클래스 외부에서 호출할 수 없게 하고, 새로운 public static 메소드를 통해 만들어진 객체가 없을 때만 작동하는 생성자를 만든다. Lock object 를 추가한 싱글턴 멀티 스레드 애플리케이션에서 동시에 인스턴스를 호출하는 경우를 대비해 Lock object를 추가할 수 있다. 특정 블럭의 ..