Table of Contents
퍼니싱 그레이레이븐의 로비처럼 핸드폰의 자이로센서를 이용해 배경과 캐릭터를 조금씩 움직여 입체감을 느끼개 해주는 방법이다.
퍼니싱 그레이레이븐의 로비 자이로영상을 첨부하고싶었지만 찾을수 없었다.
참고한 영상
영상을 토대로 작성한 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class LobbyGyroscopeEffect : MonoBehaviour
{
[SerializeField] private float shiftModifier = 1f;
private Gyroscope gyro;
private void Start()
{
#if UNITY_ANDROID && !UNITY_EDITOR
if (SystemInfo.supportsGyroscope)
{
InitGyro();
}
#elif UNITY_EDITOR
// 이부분은 true가 안됨 리모트연결이 Start보다 느린것 같음
if (EditorApplication.isRemoteConnected)
{
InitGyro();
}
#endif
}
private void Update()
{
#if UNITY_ANDROID && !UNITY_EDITOR
if (SystemInfo.supportsGyroscope)
{
MoveByGyro();
}
#elif UNITY_EDITOR
if (EditorApplication.isRemoteConnected)
{
if(gyro == null)
{
InitGyro();
}
MoveByGyro();
}
#endif
}
private void MoveByGyro()
{
if (gyro == null)
return;
transform.Translate((float)System.Math.Round(gyro.rotationRateUnbiased.y, 1) * shiftModifier, (float)System.Math.Round(gyro.rotationRateUnbiased.x, 1) * shiftModifier, 0f);
}
private void InitGyro()
{
gyro = Input.gyro; gyro.enabled = true;
}
}
테스트는 굳이 빌드를 하지않아도 안드로이드폰의 UnityRemote를 통해서도 테스트 가능하다
shiftModifier변수를 높일수록 기울임에따라 움직임이 커진다.
상대적으로 앞에있는 오브젝트는 shiftModifier를 크게,
뒤에있는 오브젝트는 shiftModifier를 작게 해서 원근감을 느끼게한다.
그리고 자이로를 지원하지않는 시스템에서는 활성화 하지않는 코드를 추가했고,
에디터에서는 UnityRemote앱이 연결돼있을때만 실행하도록 전처리문으로 분기를 나눴다.
다만 코멘트로 달아놨듯이 Remote연결이 돼있는지를 Start에선 체크할수없어보인다.
그래서 Update에서 다시 체크하도록 해놨다.
적용 영상 :
이 영상에서는 배경이 단일레이어라서 입체감이 적고 어설프지만
레이어를 나눠서 ShiftModifier를 다른값을주면 입체감이 좋아질것 같다.
도큐먼트
'Unity > UI' 카테고리의 다른 글
[Unity] UI 롱 클릭 이벤트 처리 with UniRx (0) | 2024.06.11 |
---|---|
[Unity] Button을 상속받아 커스텀하기 (0) | 2023.03.09 |
[Unity] UI드래그로 이동 시킬 때 범위 제한 (0) | 2022.08.29 |
[Unity] 마우스(포인터)가 UI위에 있는지 확인하기 (0) | 2022.05.11 |
[Unity] UI 클릭, 드래그이벤트 여러오브젝트 동시 처리 (0) | 2022.04.14 |