ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;
        }
    }
    

     

    참고 사이트

    scvtwo.tistory.com/111

    '유니티' 카테고리의 다른 글

    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
Designed by Tistory.