tree6316
야금야금 개발
tree6316
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Unity (8)
    • Language (0)
      • Java (0)
    • Web (23)
      • HTML (9)
      • CSS (3)
      • JavaScript (9)
      • JSP (2)
      • Ajax (0)
    • DB (0)
      • MySQL (0)
      • Oracle (0)
    • OS (0)
      • CentOS (0)
    • Server (1)
      • CiscoPacketTracer (1)
    • DevTool (1)
      • VMware (0)
      • IDE (1)
    • ETC (0)
    • 일상 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
tree6316

야금야금 개발

Dotween 맛보기
Unity

Dotween 맛보기

2023. 12. 3. 05:46

https://dotween.demigiant.com/

 

DOTween (HOTween v2)

DOTween is a fast, efficient, fully type-safe object-oriented animation engine for Unity, optimized for C# users, free and open-source, with tons of advanced features It is also the evolution of HOTween, my previous Unity tween engine. Compared to it, DOTw

dotween.demigiant.com

Dotween은 시간동안의 움직임을 코루틴을 직접 구현해서 짜지 않아도 되도록 해주는 편리한 에셋이다

 

다운로드 받고 Setup DOTween을 누르면 Modules가 추가된다

 

설명서는 이 블로그를 참조하자 너무 잘 적어 놓으셨다

https://velog.io/@livelyjuseok/Unity-DOTween-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Unity - DOTween 사용하기

다트윈, 닷트윈으로 불리는 유니티에서 유명한 에셋중 하나입니다. 설명을 보면 C나에게는 가벼운 기능들을 빠르고 효율적이게 쓸 수 있게 해주는 API 같은 존재이다. 사용하기 위해서는 using DG.T

velog.io

 

결과물

버튼을 누르면 1초에 해당 위치로 이동하거나 메인메뉴를 클릭하면 그 밑 서브메뉴가 나오는 기능을 만들어 보았다

 

 

코드

서브메뉴가 나오는 기능 코드이다

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using Unity.VisualScripting;

public class DotweenMenu : MonoBehaviour
{
    private RectTransform m_rectTransform;
    private bool m_isSubMenuActive = false;
    private bool m_isDuringActive = false;
    public ContentSizeFitter m_parentContent;
    public RectTransform m_mainMenu;
    public List<RectTransform> m_subMenus;

    
    private void Awake(){
        m_rectTransform = GetComponent<RectTransform>();
    }
    public void OnClickSubMenu()
    {
        // 작동중에 못건들게 하기
        if(m_isDuringActive){
            return;
        }
        m_isDuringActive = true;
        // 서브메뉴가 닫힌 상태라면
        if(!m_isSubMenuActive){
            m_isSubMenuActive = true;
            var prevPosition = m_mainMenu.anchoredPosition; // 전 위치
            var prevHeight = m_mainMenu.rect.height; // 전 높이
            float allHeight = m_mainMenu.rect.height; // 전체 높이 계산
            for(int i = 0; i < m_subMenus.Count; i++){
                m_subMenus[i].anchoredPosition = m_mainMenu.anchoredPosition; // 원점에서 움직이기 시작
                m_subMenus[i].gameObject.SetActive(true);
                var currPosition = prevPosition + Vector2.down * (prevHeight+m_subMenus[i].rect.height)/2;

                m_subMenus[i].DOAnchorPosY(currPosition.y, 0.3f).OnComplete(()=>{m_isDuringActive = false;}); // 0.3초 만큼 지정된 곳으로 이동

                prevPosition = currPosition;
                prevHeight = m_subMenus[i].rect.height;
                allHeight += prevHeight;
            }
            m_rectTransform.sizeDelta = Vector2.right * m_rectTransform.sizeDelta.x + Vector2.up * allHeight;
            LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)m_parentContent.transform);
        }
        // 서브메뉴가 열린 상태라면
        else if(m_isSubMenuActive){
            m_isSubMenuActive = false;
            
            for(int i = 0; i < m_subMenus.Count; i++){
                DG.Tweening.Sequence MySequence = DOTween.Sequence().SetAutoKill(true);
                int tempI = i;

                MySequence.Append(m_subMenus[i].DOAnchorPosY(m_mainMenu.anchoredPosition.y, 0.3f)).
                OnComplete(()=>{
                    m_subMenus[tempI].gameObject.SetActive(false); 
                    LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)m_parentContent.transform); 
                    m_isDuringActive = false;
                });
            }
            m_rectTransform.sizeDelta = Vector2.right * m_rectTransform.sizeDelta.x + Vector2.up * m_mainMenu.rect.height;
        }
    }
}

 

 

저작자표시 (새창열림)

'Unity' 카테고리의 다른 글

유니티 사운드 매니저  (0) 2023.12.10
AOSFogWar  (0) 2023.12.03
UGS 맛보기  (0) 2023.11.20
Unity_고급네비메쉬  (0) 2023.09.24
공간 채워넣기 알고리즘  (1) 2023.09.17
    tree6316
    tree6316
    야금야금 개발하는 블로그입니다.

    티스토리툴바