private void Start()
    {
        _target = transform;

        _behaviorTree = new SimpleBehaviorTree(gameObject);

        // ポイント1へ向かっているかの分岐
        ConditionalNode condition = new ConditionalNode((owner) =>
        {
            return(_forPoint1 ? BehaviorStatus.Sucess : BehaviorStatus.Failure);
        });

        #region ### ポイント1への移動 ###
        ActionNode rotateToPoint1 = new ActionNode((owner) =>
        {
            _target.LookAt(_point1);
            return(BehaviorStatus.Sucess);
        });

        ActionNode movetoPoint1 = new ActionNode((owner) =>
        {
            Vector3 dir       = (_point1.position - _target.position).normalized;
            _target.position += dir * _speed;

            const float ep = 0.1f;
            Vector3 dv     = _point1.position - _target.position;
            if (Mathf.Abs(dv.x) <= ep && Mathf.Abs(dv.y) <= ep && Mathf.Abs(dv.z) <= ep)
            {
                _forPoint1 = false;
                return(BehaviorStatus.Sucess);
            }

            return(BehaviorStatus.Running);
        });

        Sequencer seq1 = new Sequencer();
        seq1.NeedsConditionalAbort = true;
        seq1.AddNodes(condition, rotateToPoint1, movetoPoint1);
        #endregion ### ポイント1への移動 ###

        #region ### ポイント2への移動 ###
        ActionNode rotateToPoint2 = new ActionNode((owner) =>
        {
            _target.LookAt(_point2);
            return(BehaviorStatus.Sucess);
        });

        ActionNode movetoPoint2 = new ActionNode((owner) =>
        {
            Vector3 dir       = (_point2.position - _target.position).normalized;
            _target.position += dir * _speed;
            _target.Rotate(Vector3.up, 1f);

            const float ep = 0.1f;
            Vector3 dv     = _point2.position - _target.position;
            if (Mathf.Abs(dv.x) <= ep && Mathf.Abs(dv.y) <= ep && Mathf.Abs(dv.z) <= ep)
            {
                _forPoint1 = true;
                return(BehaviorStatus.Sucess);
            }

            return(BehaviorStatus.Running);
        });

        Sequencer seq2 = new Sequencer();
        seq2.NeedsConditionalAbort = true;
        seq2.AddNodes(rotateToPoint2, movetoPoint2);
        #endregion ### ポイント2への移動 ###

        // 定義したビヘイビアを設定
        Selector selector = new Selector();
        selector.AddNodes(seq1, seq2);

        Repeater repeater = new Repeater();
        repeater.AddNode(selector);
        _behaviorTree.SetRootNode(repeater);

        _behaviorTree.Start();
    }