728x90
개요
유니티 3인칭 조이스틱을 구현해보았다.
출처
조이스틱은 베르님 유튜브를 참고하여 만들어 보았다.
https://www.youtube.com/watch?v=MZHESbKQjpo
플레이 영상
패키지
스크립트 수정
더보기
우측으로 카메라를 회전시키면서 했었는데 더 효율적인 코드를 발견하였다.
우측 조이스틱을 OFF 시킨 후 패널에 드래그 할 공간을 넣어놓은 뒤 밑의 스크립트를 넣어주면
조이스틱 없이 패널 영역안에서 손가락을 드래그하면 회전이 된다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class CameraDragRotation : MonoBehaviour, IBeginDragHandler, IDragHandler
{
[SerializeField]
public Transform cameraArm;
Vector3 FirstPoint;
Vector3 SecondPoint;
public float xAngle = 0f;
public float yAngle = 55f;
float xAngleTemp;
float yAngleTemp;
[SerializeField]
private float limit_yAngle_lest = 0;
[SerializeField]
private float limit_yAngle_MAX = 70;
public void OnBeginDrag(PointerEventData eventData)
{
BeginDrag(eventData.position);
}
public void OnDrag(PointerEventData eventData)
{
OnDrag(eventData.position);
}
public void BeginDrag(Vector2 a_FirstPoint)
{
FirstPoint = a_FirstPoint;
xAngleTemp = xAngle;
yAngleTemp = yAngle;
}
public void OnDrag(Vector2 a_SecondPoint)
{
SecondPoint = a_SecondPoint;
xAngle = xAngleTemp + (SecondPoint.x - FirstPoint.x) * 180 / Screen.width;
yAngle = yAngleTemp - (SecondPoint.y - FirstPoint.y) * 90 * 3f / Screen.height; // Y값 변화가 좀 느려서 3배 곱해줌.
// 회전값을 40~85로 제한
if (yAngle < limit_yAngle_lest)
yAngle = limit_yAngle_lest;
if (yAngle > limit_yAngle_MAX)
yAngle = limit_yAngle_MAX;
cameraArm.rotation = Quaternion.Euler(yAngle, xAngle, 0.0f);
}
}
참고한 블로그
https://mentum.tistory.com/234
'유니티 > 유니티 기능 구현' 카테고리의 다른 글
유니티 Nav Mesh Agent를 이용한 추적 기능 (0) | 2022.05.09 |
---|---|
유니티 오클루전 컬링 (0) | 2022.04.28 |
원하는 위치에 오브젝트 Instantiate해주기 (0) | 2022.04.27 |
유니티 미니맵 구현 (0) | 2022.04.20 |
유니티 캠퍼스바, 실시간 시간 구현 (0) | 2022.04.20 |