FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Dotweenでオブジェクトを移動したりする際に、時間でなく速度で動かす方法 

    こんにちは。坂内っす。
    めっきり秋の天候になりましたね。
    でも2週間もしたら冬になるんじゃないですか?
    秋短そうな気がします。


    UnityでDoTweenを結構使ってるんですが、オブジェクトの移動の際に速度で移動させたいって時ありますよね。
    その方法を軽く紹介。

    まずはふつうに動かしてみます。

    [Blog20221017.cs]

    using UnityEngine;
    using UnityEngine.UI;
    using DG.Tweening;

    public class Blog20221017 : MonoBehaviour
    {
    [SerializeField] Image img1;
    [SerializeField] Image img2;

    IEnumerator Start()
    {
    yield return new WaitForSeconds(1f);
    img1.transform.DOLocalMoveX(252, 3f).SetEase(Ease.Linear);
    img2.transform.DOLocalMoveX(252, 3f).SetEase(Ease.Linear);
    }
    }





    こうやると、X座標252まで2つのオブジェクトが3秒かけて動きます。
    もちろん距離によって速度がバラバラになります。
    時間での移動になります。

    では同じ速度にしたい場合、今まではわざわざ計算してました・・・

    [Blog20221017.cs]

    using UnityEngine;
    using UnityEngine.UI;
    using DG.Tweening;
    using System.Collections;

    public class Blog20221017 : MonoBehaviour
    {
    [SerializeField] Image img1;
    [SerializeField] Image img2;

    IEnumerator Start()
    {
    yield return new WaitForSeconds(1f);
    float speed = 100f;
    float moveTime1 = (252f - img1.transform.localPosition.x) / speed;
    float moveTime2 = (252f - img2.transform.localPosition.x) / speed;
    img1.transform.DOLocalMoveX(252, moveTime1).SetEase(Ease.Linear);
    img2.transform.DOLocalMoveX(252, moveTime2).SetEase(Ease.Linear);
    }
    }





    こんな感じでやってたのですが、素敵なオプションがあるみたいです。

    SetSpeedBase

    これをつければわざわざ時間を計算しなくてもイイらしいです。

    [Blog20221017.cs]

    using UnityEngine;
    using UnityEngine.UI;
    using DG.Tweening;
    using System.Collections;

    public class Blog20221017 : MonoBehaviour
    {
    [SerializeField] Image img1;
    [SerializeField] Image img2;

    IEnumerator Start()
    {
    yield return new WaitForSeconds(1f);
    float speed = 150f;
    img1.transform.DOLocalMoveX(252, speed).SetEase(Ease.Linear).SetSpeedBased();
    img2.transform.DOLocalMoveX(252, speed).SetEase(Ease.Linear).SetSpeedBased();
    }
    }





    あらほんと‥‥素敵なオプションですね。

    これ使っていこうと思います。

    DoTweenで移動などの際に速度で動かす方法でした。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/926-7918627d
    この記事にトラックバックする(FC2ブログユーザー)