2017-02-07 13 views
-1

私はカードゲームを統一して作成しています。その中で、私は対角線上のカードを裏返す必要があります。私はrotateメソッドとtranslateメソッドを使用しようとしましたが、残念ながらターゲットをアーカイブできませんでした。私はこのスレッドでYouTubeのリンクを付けました。誰も私がこの問題を克服するのを助けることができますか?ユニティの対角線フリップアニメーションの仕方

https://youtu.be/j5lBJYSSX2A

答えて

0

私は、カードflipingのため、このコードを持っています。あなたは斜めにそれを回転させる回転数を変更する必要がありますが、それはあなたのための

IEnumerator FlipCard() 
    { 

     yield return StartCoroutine(Constants.CardFlipTime.Tweeng((u) => gameObject.transform.localEulerAngles = new Vector3(0f, u, 0f),0, 90f));//begin the rotation 
     GetComponent<Image>().sprite = cardFrame;// change the card sprite since it currently not visible 

     Debug.Log("Rotated 90 deg"); 
     yield return StartCoroutine(Constants.CardFlipTime.Tweeng((u) => gameObject.transform.localEulerAngles = new Vector3(0f, u, 0f), 90, 0f));//finish the rotation  
    } 

そして、ここでは、私は値の円滑なlerpを行うために使用Tweeng機能で動作するはずです:

/// <summary> 
      /// Generic static method for asigning a action to any type 
      /// </summary> 
      /// <typeparam name="T"> generic</typeparam> 
      /// <param name="duration">Method is called on the float and same float is used as the duration</param> 
      /// <param name="vary">Action to perform over given duration</param> 
      /// <param name="start">Starting value for the action</param> 
      /// <param name="stop">End value of the action</param> 
      /// <returns>null</returns> 
      public static IEnumerator Tweeng<T>(this float duration, Action<T> vary,T start, T stop) 
      { 
       float sT = Time.time; 
       float eT = sT + duration; 
       Delegate d; 
       if (typeof(T) == typeof(float)) 
        d = (Func<float, float, float, float>)Mathf.SmoothStep; 
       else if (typeof(T) == typeof(Vector3)) 
        d = (Func<Vector3, Vector3, float, Vector3>)Vector3.Lerp; 
       else if (typeof(T) == typeof(Quaternion)) 
        d = (Func<Quaternion, Quaternion, float, Quaternion>)Quaternion.RotateTowards; 
       else 
        throw new ArgumentException("Unexpected type " + typeof(T)); 

       Func<T, T, float, T> step = (Func<T, T, float, T>)d; 
       while (Time.time < eT) 
       { 
        float t = (Time.time - sT)/duration; 
        vary(step(start, stop, t)); 
        yield return null; 
       } 
       vary(stop); 
      } 

あなたはそれについての詳細を読むことができますし、this質問

+0

'FlipNew.Tweeng (このフロート、System.Action 、T、T ')から、それを使用する方法:拡張メソッドは、非ジェネリック静的クラス で定義する必要があります このエラーが発生しました..クラス名は何ですか? –

+0

public static class WhatEvernameYouWant {} –

関連する問題