분류 전체보기
-
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..
-
게임 코드로 알아보는 클래스 설계, 코딩의 기술후기/책 2020. 1. 17. 09:28
코딩의 기술, 오즈 모리하루, 한빛미디어, 2016. 게임 코드를 사용하지만 게임 프로그래밍 외에도 얼마든지 적용할 수 있다. C++문법과 기본적인 객체지향 개념에 대해서만 알고 있다면 읽을 수 있는 낮은 난이도의 책. 두께도 얇다. 1장 읽기 좋은 코드를 작성하는 기술에서는 C++ STL과 Lambda, 함수화와 클래스를 적극적으로 활용해 코드의 가독성을 높이는 방법에 대해 설명한다. 거의 모든 설명에 코드 예제가 붙어 있어 어떤 차이가 생기는지 보기 쉽고, 내 코드에 적용하기도 쉽다. C++ 이후에 나온 최신 언어들의 기능도 활용한다면 더욱 읽기 좋은 코드를 만들 수 있겠다. 2장에서는 객체지향 원칙과 클래스 설계, 디자인 패턴에 대해 다루는데, 제대로 설명한다면 각각 훨씬 두꺼운 책 한 권 씩이 필..
-
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 인스턴스를 생성할 수 있다.