コード例 #1
0
        // Update is called once per frame
        void Update()
        {
            if (Input.GetButtonDown("Fire2"))
            {
                RaycastHit hitInfo;
                int        layerMask = 1 << LayerMask.NameToLayer("Ground");

                if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hitInfo, maxTargetDistance, layerMask))
                {
                    _moveTo.SetTarget(hitInfo.point);
                }
            }
        }
コード例 #2
0
        private IEnumerator ProcessPatrol()
        {
            WaitForSeconds patrolCheckPeriod = new WaitForSeconds(0.5f);

            string nextState = String.Empty;

            _speedMultiplier = _patrolSpeedMultiplier;
            _move.StartMovement();

            while (true)
            {
                if (_trap != null)
                {
                    nextState = GetTrappedState();
                    break;
                }

                if (SearchEnemies())
                {
                    nextState = "pursuit";

                    // TODO: тут разумеется нужно убрать жесткую привязку к игроку и определять конкретного врага через SearchEnemies
                    _move.SetTarget(Main.Instance.Player.transform.position);

                    break;
                }
                else if (_move.TargetReached())
                {
                    _move.SetTarget(_patrol.NextPoint());
                    _move.Agent.stoppingDistance = 0;
                }

                yield return(patrolCheckPeriod);
            }

            yield return(nextState);
        }