- DOTween, iTweenなどでUIをTweenさせているとする
- tween時間などはpublicにして、Inspectorから調整できるようにしておく
- パラメータを調整してPlayを繰り返せば調整は可能だが、Playを何度も押したくない
- そこでTweenを再実行するボタンをEditor拡張でコンポネントに追加する
- こうすると、Play, Inspectorでパラメータを調整してRe Tweenボタンを押す、の繰り返しで調整できる
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using DG.Tweening;
public class UITween : MonoBehaviour {
private RectTransform rectTrans;
public Ease easeType = Ease.InOutElastic;
public float tweenTime = 1.0f;
public Vector2 offsetVector;
public float waitTime = 0.0f;
void Start () {
rectTrans = GetComponent<RectTransform> ();
StartTween ();
}
public void StartTween(){
StartCoroutine (TweenCoroutine ());
}
IEnumerator TweenCoroutine(){
yield return new WaitForSeconds (waitTime);
DOTween.Kill (this);
var targetVector = rectTrans.anchoredPosition;
rectTrans.anchoredPosition = targetVector + offsetVector;
rectTrans.DOAnchorPos (targetVector, tweenTime).SetEase(easeType);
}
}
using UnityEditor;
using UnityEngine;
using System.Collections;
[CustomEditor(typeof(UITween))]
public class UITweenEditor : Editor {
public override void OnInspectorGUI(){
DrawDefaultInspector ();
if(GUILayout.Button("Re Tween"))
{
UITween uiTween = (UITween)target;
uiTween.StartTween();
}
if(GUILayout.Button("Tween All"))
{
UITween[] uiTweens = FindObjectsOfType(typeof(UITween)) as UITween[];
foreach(var uiTween in uiTweens){
uiTween.StartTween();
}
}
}
}