コード例 #1
0
 public void StartItemPlaying(int ItemIndex)
 {
     _PlayingItemIndex = ItemIndex;
     _CharaState       = eCharaState.isItemPlaying;
     Stop();
     Debug.Log(_PlayingItemIndex);
 }
コード例 #2
0
    private IEnumerator Routine_Move()
    {
        if (_Agent.pathStatus == NavMeshPathStatus.PathInvalid)
        {
            yield return(new WaitForSeconds(1.0f));

            yield break;
        }
        //次の地点が見つかるまで待機
        while (_Agent.pathStatus != NavMeshPathStatus.PathInvalid && _MoveTargetPoint == null && !CalcNextPoint())
        {
            yield return(new WaitForSeconds(0.5f));

            Debug.Log("Serching");
        }

        if (Random.Range(0.0f, 100.0f) <= _RunPossibility)
        {
            //走り
            _CharaState = eCharaState.isRunning;
            _Animator.SetTrigger(_ID_Run);
            _Agent.speed = _RunSpeed;
        }
        else
        {
            //歩き
            _CharaState = eCharaState.isWalking;
            _Animator.SetTrigger(_ID_Walk);
            _Agent.speed = _WalkSpeed;
        }

        _Agent.isStopped = false;

        while (true)
        {
            _Agent.Move(transform.forward * _Agent.speed * 0.75f * Time.deltaTime);

            //到着まで移動
            if (_MoveTargetPoint != null && _MoveTargetPoint.gameObject.activeInHierarchy)
            {
                if (Vector3.SqrMagnitude(Vector3.Scale(_MoveTargetPosition, new Vector3(1, 0, 1)) - Vector3.Scale(transform.position, new Vector3(1, 0, 1))) < 0.01f)
                {
                    _LastMoveTargetPoint = _MoveTargetPoint;
                    _MoveTargetPoint     = null;
                    break;
                }
            }
            else
            {
                if (Vector3.SqrMagnitude(Vector3.Scale(_MoveTargetPosition, new Vector3(1, 0, 1)) - Vector3.Scale(transform.position, new Vector3(1, 0, 1))) < 0.1f)
                {
                    _LastMoveTargetPoint = _MoveTargetPoint;
                    _MoveTargetPoint     = null;
                    break;
                }
            }

            _DestinationElapsedTime += Time.deltaTime;
            if (_DestinationElapsedTime >= _GiveUpAribalSeconds)
            {
                break;
            }

            yield return(null);
        }

        if (Random.Range(0.0f, 100.0f) <= _IntervalPossibility)
        {
            _MoveState = eMoveState.inIntarval;
        }
        else
        {
            _MoveState = eMoveState.isMoving;
        }
    }
コード例 #3
0
    private IEnumerator Routine_Intarval()
    {
        if (_Agent.pathStatus == NavMeshPathStatus.PathInvalid)
        {
            yield return(new WaitForSeconds(1.0f));

            yield break;
        }
        _Agent.isStopped = true;

        //ランダムに次のモーションを設定
        {
            List <eCharaState> table = new List <eCharaState>();
            for (int i = 0; i < _Rate_Idle; ++i)
            {
                table.Add(eCharaState.isWaiting);
            }
            for (int i = 0; i < _Rate_Unique; ++i)
            {
                table.Add(eCharaState.inUnique);
            }
            for (int i = 0; i < _Rate_Happy; ++i)
            {
                table.Add(eCharaState.inHappy);
            }
            for (int i = 0; i < _Rate_Angry; ++i)
            {
                table.Add(eCharaState.inAngry);
            }
            for (int i = 0; i < _Rate_Sad; ++i)
            {
                table.Add(eCharaState.inSad);
            }
            for (int i = 0; i < _Rate_Funny; ++i)
            {
                table.Add(eCharaState.inFunny);
            }

            if (table.Count > 0)
            {
                _CharaState = table[Random.Range(0, table.Count)];
            }
            else
            {
                _CharaState = eCharaState.isWaiting;
            }
        }

        if (_CharaState == eCharaState.isWaiting)
        {
            //待機中
            _Animator.SetTrigger(_ID_Idle);

            float ElapsedSeconds = Random.Range(_MinMoveInterval, _MaxMoveInterval);
            while (ElapsedSeconds > 0.0f)
            {
                ElapsedSeconds -= Time.deltaTime;
                yield return(null);
            }
        }
        else if (_CharaState == eCharaState.inUnique)
        {
            //特殊モーション
            _Animator.SetTrigger(_ID_Unique);

            //変わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash != _ID_UniqueState)
            {
                yield return(null);
            }

            if (_CharaAudio)
            {
                _CharaAudio.Play(CharacterAudio.eAudioType.Unique);
            }

            //終わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash == _ID_UniqueState)
            {
                yield return(null);
            }
        }
        else if (_CharaState == eCharaState.inHappy)
        {
            //喜モーション
            _Animator.SetTrigger(_ID_Happy);

            //変わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash != _ID_HappyState)
            {
                yield return(null);
            }

            if (_CharaAudio)
            {
                _CharaAudio.Play(CharacterAudio.eAudioType.Happy);
            }

            //終わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash == _ID_HappyState)
            {
                yield return(null);
            }
        }
        else if (_CharaState == eCharaState.inAngry)
        {
            //怒モーション
            _Animator.SetTrigger(_ID_Angry);

            //変わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash != _ID_AngryState)
            {
                yield return(null);
            }

            if (_CharaAudio)
            {
                _CharaAudio.Play(CharacterAudio.eAudioType.Angry);
            }

            //終わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash == _ID_AngryState)
            {
                yield return(null);
            }
        }
        else if (_CharaState == eCharaState.inSad)
        {
            //哀モーション
            _Animator.SetTrigger(_ID_Sad);

            //変わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash != _ID_SadState)
            {
                yield return(null);
            }

            if (_CharaAudio)
            {
                _CharaAudio.Play(CharacterAudio.eAudioType.Sad);
            }

            //終わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash == _ID_SadState)
            {
                yield return(null);
            }
        }
        else if (_CharaState == eCharaState.inHappy)
        {
            //楽モーション
            _Animator.SetTrigger(_ID_Funny);

            //変わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash != _ID_FunnyState)
            {
                yield return(null);
            }

            if (_CharaAudio)
            {
                _CharaAudio.Play(CharacterAudio.eAudioType.Happy);
            }

            //終わるまで待機
            while (_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash == _ID_FunnyState)
            {
                yield return(null);
            }
        }


        _MoveState = eMoveState.isMoving;
    }
コード例 #4
0
 public void EndItemPlaying()
 {
     _PlayingItemIndex = null;
     _CharaState       = eCharaState.isWaiting;
     Play();
 }