-
04/11 유니티 조이스틱으로 캐릭터 이동 연습유니티 2021. 4. 12. 00:41
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class InGame : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler { RectTransform m_rectBack; RectTransform m_rectJoystick; Transform m_trCube; float m_fRadius; float m_fSpeed = 5.0f; float m_fSqr = 0f; Vector3 m_vecMove; Vector2 m_vecNormal; bool m_bTouch = false; void Start() { m_rectBack = transform.Find("JoystickBack").GetComponent<RectTransform>(); m_rectJoystick = transform.Find("JoystickBack/Joystick").GetComponent<RectTransform>(); Debug.Log(m_rectBack.name); Debug.Log(m_rectJoystick.name); m_trCube = GameObject.Find("Player").transform; Debug.Log(m_trCube.name); // JoystickBackground의 반지름입니다. m_fRadius = m_rectBack.rect.width * 0.5f; } void Update() { if (m_bTouch) { m_trCube.position += m_vecMove; } } void OnTouch(Vector2 vecTouch) { Debug.Log("sdsd"); Vector2 vec = new Vector2(vecTouch.x - m_rectBack.position.x, vecTouch.y - m_rectBack.position.y); // vec값을 m_fRadius 이상이 되지 않도록 합니다. vec = Vector2.ClampMagnitude(vec, m_fRadius); m_rectJoystick.localPosition = vec; // 조이스틱 배경과 조이스틱과의 거리 비율로 이동합니다. float fSqr = (m_rectBack.position - m_rectJoystick.position).sqrMagnitude / (m_fRadius * m_fRadius); // 터치위치 정규화 Vector2 vecNormal = vec.normalized; m_vecMove = new Vector3(vecNormal.x * m_fSpeed * Time.deltaTime * fSqr, 0f, vecNormal.y * m_fSpeed * Time.deltaTime * fSqr); m_trCube.eulerAngles = new Vector3(0f, Mathf.Atan2(vecNormal.x, vecNormal.y) * Mathf.Rad2Deg, 0f); } public void OnDrag(PointerEventData eventData) { OnTouch(eventData.position); m_bTouch = true; } public void OnPointerDown(PointerEventData eventData) { OnTouch(eventData.position); m_bTouch = true; } public void OnPointerUp(PointerEventData eventData) { // 원래 위치로 되돌립니다. m_rectJoystick.localPosition = Vector2.zero; m_bTouch = false; } }
참고 사이트
'유니티' 카테고리의 다른 글
04/13 유니티 쿠키런 제작 2 (0) 2021.04.13 04/13 유니티 쿠키런 제작 1 (1) 2021.04.13 04/09 수업내용 메모 (0) 2021.04.09 04/09 유니티 슈팅게임 연습 (0) 2021.04.09 04/08 유니티 연습 (0) 2021.04.08