LoginSignup
4
3

More than 3 years have passed since last update.

UniRx と DoTween で簡単にドーナツを追随するニワトリをつくる

Last updated at Posted at 2020-03-22

ドーナツを追い続ける、アニメーション付きのニワトリを、UniRx と DoTween で作りましょう。
Update から切り離して、UniRx を使うことで、値がメソッドで閉じて、Time.deltaTime などの和算も不要になります。

こんな感じで動きます

tracing.gif

UniRx と DoTween でつくる Walk メソッド

    private void Walk()
    {
        // Walk アニメーションを開始
        animator.SetBool("Walk", true);

        // ここから UniRx、 Interval を使うことで 0.1秒毎に Subscribe が呼ばれ続けます
        var duration = 0.1f;
        Observable
            .Interval(TimeSpan.FromSeconds(duration)) 
            .Subscribe(_ =>
            {
                // 移動距離を計算、早く動かしたければ 0.01f の値を大きくすればOK
                var add = transform.rotation * new Vector3(0, 0, 0.01f);
                // DoTween の Move で移動させます
                transform.DOMove(transform.position + add, duration);
                // DoTween の LookAt でドーナツの方向を向かせ続けます
                transform.DOLookAt(target.position, duration, AxisConstraint.Y);
            });
    }

その他

ニワトリのAsset

  • こちら
  • 無料です。モデルとアニメーションが付いています。

停止方法

  • var hoge = Observable.Interval... みたいな感じで書いて、hoge.Dispose(); すれば、止まります。
  • 本当は Observable.Interval は AddTo(this) などをして、不要になったらリソースを破棄するべきです。ここでは省略しています。

全コード

ほとんど代わり映えしませんが、全コードです。

using System;
using DG.Tweening;
using UniRx;
using UnityEngine;

public class Chick : MonoBehaviour
{
    [SerializeField] private Animator animator; // 自分自身を設定してください
    [SerializeField] private Transform target;  // 向かっていくドーナツを設定してください

    void Start()
    {
        Walk();
    }

    private void Walk()
    {
        animator.SetBool("Walk", true);
        var duration = 0.1f;
        Observable.Interval(TimeSpan.FromSeconds(duration)).Subscribe(_ =>
        {
            var add = transform.rotation * new Vector3(0, 0, 0.01f);
            transform.DOMove(transform.position + add, duration);
            transform.DOLookAt(target.position, duration, AxisConstraint.Y);
        });
    }
}

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3