반응형

 

 

 유니티는 기본적으로 Handheld.Vibrate() 함수로 진동기능이 들어가있지만. 해당 함수로 실행되는 진동은 약 1초가량으로 생각보다 진동이 길다. (진동 시간 조절이 불가능)

 

게임을 제작하다보면 1초의 긴 진동보다 짧은 진동이 필요할때가 생각보다 많다. 따라서, 짧은 진동을 필요로 할때 Handheld.Vibrate()는 완전히 무쓸모다.

 

안드로이드의 경우 AndroidManifest권한 추가에 코드 몇줄만 넣어주면 되지만, 이놈의 iOS는 뭐가 이리 복잡한지.. 아이폰 유저도 아니라 방법 찾는데 생각보다 많이 헤맸다.

 

iOS의 경우 햅틱이라는 기능이 있는데, 6S모델부터 들어가있다고 한다.

 

UISelectionFeedbackGenerator을 통해 햅틱 기능을 사용할수 있는것 같은데, 개발하는 게임들의 최소 버전이 아이폰5 부터라 최대한 낮은 모델에서도 진동 사용이 가능해야했기에 AudioServicesPlaySystemSound를 사용하기로 했다.

 

AudioServicesPlaySystemSound를 사용하기 위해 일단 에디터에 Plugins/iOS 폴더에 Vibrate.mm파일을 만들어준다. 그리고 이어서 플러그인 파일에 코드 작성.

 

#import <UIKit/UIKit.h>
#import <AudioToolBox/AudioToolBox.h>

extern "C" void Vibrate(int _n)
{
    AudioServicesPlaySystemSound(_n);
}

 

그리고 이어서 스크립트를 생성 후, 다음과 같이 작성 후 사용하면 된다.

 

using System.Runtime.InteropServices;

[DllImport("__Internal")]
public static extern void Vibrate(int _n);

※ 참고로 플러그인 파일명과 함수명은 입맛대로 바꿔도 상관없다.

 

인수에 들어가는 int값은 밑에 값들 중 입맛대로 선택해서 넣으면 된다.

 

1519 // Actuate `Peek` feedback (weak boom)

1520 // Actuate `Pop` feedback (strong boom)

1521 // Actuate `Nope` feedback (series of three weak booms)

 

실행해보니 잘 된다. (물론 잘 되는건 6S부터다. 그 밑의 폰들은 당연히 안된다.)

 

 

반응형

+ Recent posts