Unity3D 는 DoTween 을 이용 하여 카드 반전 효 과 를 실현 합 니 다.

Unity 의 UGUI 를 이용 해 2D 카드 뒤 집기 효 과 를 만 들 었 는데,sprite 대상 이 라면 원리 도 같 을 것 이다.다음은 효과 도.
 
그림 1 카드 뒤 집기 효과
DoTween 에 대해 서...
DoTween 은 매우 강력 하고 사용 하기 좋 은 애니메이션 효과 플러그 인 으로 무료 버 전과 유 료 버 전이 있 으 며 무료 버 전 은 대부분의 수 요 를 만족 시 킬 수 있 습 니 다.Unity Assets Store 에서 다운로드 할 수 있 고 이 효과 에서 DoTween 의 회전 기능 을 사용 합 니 다.
디자인 아이디어
빈 물 체 를 만 듭 니 다.빈 물체 아래 에 두 개의 image 대상 이 있 습 니 다.하 나 는 정면 이 고 하 나 는 뒷면 입 니 다.우리 가 정면 에서 시작한다 고 가정 하면 초기 상태 에서 정면 의 회전 각 도 는(0,0,0)(0,0,0)이 고 뒷면 의 회전 각 도 를(0,90,0)(0,90,0)(0,90,0)(0,90,0)으로 하면 뒷면 이 보이 지 않 는 다.
회전 을 촉발 할 때,예 를 들 어 정면 을 0.3 초 안에(0,90,0)(0,90,0)(0,90,0)로 회전 시 키 면 정면 이 보이 지 않 는 다.회전 이 끝 난 후에 뒷면 을 0.3 초 에(0,0,0)(0,0,0)(0,0,0)로 회전 시 키 면 뒷면 이 나타 나 전체 반전 과정 이 완성 된다.만약 이해 하지 못 한다 면 카드 한 장 이 정면 에서 뒷면 으로 천천히 뒤 집 히 는 상황 을 상상 해 볼 수 있다.먼저 옆으로 돌려 서 너 를 향 해,그리고 측면 에서 뒷면 으로 돌려 라.
사용 방법
  • DoTween 플러그 인 가 져 오기
  • setup 플러그 인
  • Canvas 만 들 기
  • Canvas 아래 에 빈 물 체 를 만 들 고 Card
  • 라 고 명명 합 니 다.
  • 카드 아래 에 두 개의 Image(UI)를 만 들 고 각각 Front 와 Back 이 라 고 명명 하 며 크기 와 위치 가 같 습 니 다
  • Back 과 Front 에 선택 한 그림 을 첨부 합 니 다.없 으 면 다른 색 으로 대체 할 수 있 습 니 다
  • Card 에 CardTurnover.cs 스 크 립 트 첨부
  • Front 와 Back 대상 을 스 크 립 트 의 대응 위치 로 끌 어 옵 니 다
  • 스 크 립 트 를 설정 한 card state 는 정면 부터 시작 하 는 지 뒷면 부터 시작 하 는 지 의미 합 니 다
  • 스 크 립 트 를 설정 하 는 time,즉 회전 하 는 데 걸 리 는 시간
  • 두 개의 Button 대상 을 만 들 고 OnClick 방법 을 추가 하여 카드 대상 을 끌 어 들 이 고 각각 StartBack 과 StartFront 방법
  • 을 호출 합 니 다.
  • 두 버튼 을 누 르 면 카드 가 뒤 집 히 는 효 과 를 볼 수 있 으 니 정면 에 있 을 때 만 뒷면 이 뒤 집 히 고 뒷면 이 일치 하 는 것 을 주의 하 세 요.
  • 각본
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using DG.Tweening;//     
    
    //    ,  、  
    public enum CardState
    {
     Front,
     Back
    }
    public class CardTurnOver : MonoBehaviour{
     public GameObject mFront;//    
     public GameObject mBack;//    
     public CardState mCardState = CardState.Front;//       ,       ?
     public float mTime = 0.3f;
     private bool isActive = false;//true        ,     
    
     /// <summary>
     ///        ,  mCardState
     /// </summary>
     public void Init()
     {
      if(mCardState==CardState.Front)
      {
       //        ,      90 ,         
       mFront.transform.eulerAngles = Vector3.zero;
       mBack.transform.eulerAngles = new Vector3(0, 90, 0);
      }
      else
      {
       //     ,  
       mFront.transform.eulerAngles = new Vector3(0, 90, 0);
       mBack.transform.eulerAngles = Vector3.zero;
      }
     }
     private void Start()
     {
      Init();
     }
    
     /// <summary>
     ///          
     /// </summary>
     public void StartBack()
     {
      if (isActive)
       return;
      StartCoroutine(ToBack());
     }
     /// <summary>
     ///          
     /// </summary>
     public void StartFront()
     {
      if (isActive)
       return;
      StartCoroutine(ToFront());
     }
     /// <summary>
     ///      
     /// </summary>
     IEnumerator ToBack()
     {
      isActive = true;
      mFront.transform.DORotate(new Vector3(0, 90, 0), mTime);
      for (float i = mTime; i >= 0; i -= Time.deltaTime)
       yield return 0;
      mBack.transform.DORotate(new Vector3(0, 0, 0), mTime);
      isActive = false;
    
     }
     /// <summary>
     ///      
     /// </summary>
     IEnumerator ToFront()
     {
      isActive = true;
      mBack.transform.DORotate(new Vector3(0, 90, 0), mTime);
      for (float i = mTime; i >= 0; i -= Time.deltaTime)
       yield return 0;
      mFront.transform.DORotate(new Vector3(0, 0, 0), mTime);
      isActive = false;
     }
    }
    
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기