MoveTowards() public static method

public static MoveTowards ( Vector2 current, Vector2 target, float maxDistanceDelta ) : Vector2
current Vector2
target Vector2
maxDistanceDelta float
return Vector2
示例#1
0
        private IEnumerator SmoothMovement(Vector2?end)
        {
            _isMoving = true;

            float remainingDistance = (Rb.position - end.Value).sqrMagnitude;

            Sprite.flipX = false;

            if (_movement.x < 0)
            {
                Sprite.flipX = true;
            }

            while (remainingDistance > float.Epsilon)
            {
                Vector2 newPosition = Vector2.MoveTowards(Rb.position, end.Value, _moveSpeed * Time.fixedDeltaTime);
                Rb.position = newPosition;


                remainingDistance = (Rb.position - end).Value.sqrMagnitude;
                yield return(null);
            }

            ToggleFog(Vector3Int.FloorToInt(_movement));
            _isMoving = false;
        }
示例#2
0
    /**************
    * Behaviours *
    **************/
    void chase()
    {
        // Save data
        had_LOS         = true;
        last_player_pos = player.position;

        //move toward the player, but not too close!
        if (Vector2.Distance(transform.position, player.position) >= social_distance)
        {
            transform.position = Vector2.MoveTowards(transform.position, player.position,
                                                     movespeed * Time.deltaTime * TimeManager.Instance.getTimeMultiplier());
        }
        //rotate to look at the player
        transform.right = player.position - transform.position;

        //shoot when possible
        if (shoot_timer <= 0f)
        {
            shoot();
            shoot_timer = Random.Range(shoot_timer_length_min, shoot_timer_length_max);
        }
        else
        {
            shoot_timer -= Time.deltaTime * TimeManager.Instance.getTimeMultiplier();
        }
    }
示例#3
0
        void Update()
        {
            //Must be the local player, or they cannot move
            if (!isLocalPlayer)
            {
                return;
            }

            //Ignore movement controls when typing in chat
            if (chatRegister.ChatWindow != null && chatRegister.ChatWindow.PlayerIsTyping())
            {
                currentMovement.Set(0, 0);
                return;
            }

            if (Input.GetButtonDown("Toggle Run"))
            {
                isWalking = !isWalking;
            }

            // TODO: Implement gravity and grabbing
            // Calculate next movement
            // The vector is not normalized to allow for the input having potential rise and fall times
            float x = Input.GetAxisRaw("Horizontal");
            float y = Input.GetAxisRaw("Vertical");

            // Smoothly transition to next intended movement
            intendedMovement = new Vector2(x, y).normalized *(isWalking ? walkSpeed : runSpeed);
            currentMovement  = Vector2.MoveTowards(currentMovement, intendedMovement, Time.deltaTime * (Mathf.Pow(ACCELERATION / 5f, 3) / 5));

            absoluteMovement = new Vector3(absoluteMovement.x, 0, absoluteMovement.z);
            // Move the player
            if (currentMovement != Vector2.zero)
            {
                // Determine the absolute movement by aligning input to the camera's looking direction
                Vector3 absoluteMovement =
                    currentMovement.y * Vector3.Cross(mainCamera.transform.right, Vector3.up).normalized +
                    currentMovement.x * Vector3.Cross(Vector3.up, mainCamera.transform.forward).normalized;

                if (intendedMovement != Vector2.zero)
                {
                    // Move (without gravity). Whenever we move we also readjust the player's direction to the direction they are running in.
                    characterController.Move(absoluteMovement * (Time.deltaTime / 3.5f));

                    transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(absoluteMovement), Time.deltaTime * 10);
                }
                if (intendedMovement == Vector2.zero)
                {
                    absoluteMovement = Vector3.Lerp(absoluteMovement, Vector3.zero, Time.deltaTime * 5);
                }
                characterController.Move(absoluteMovement * Time.deltaTime);
            }
            // animation Speed is a proportion of maximum runSpeed, and we smoothly transitions the speed with the Lerp
            float currentSpeed = characterAnimator.GetFloat("Speed");
            float newSpeed     = Mathf.LerpUnclamped(currentSpeed, currentMovement.magnitude / runSpeed, Time.deltaTime * (isWalking ? walkSpeed : runSpeed) * 3);

            characterAnimator.SetFloat("Speed", newSpeed);

            ForceHeightLevel();
        }
示例#4
0
 // Update is called once per frame
 void Update()
 {
     if (Vector2.Distance(transform.position, target.position) > bufferArea)
     {
         transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
     }
 }
示例#5
0
    public void Chase(Transform target, float moveSpeed)
    {
        Vector3 difference = target.transform.position - transform.position;
        float   rotationZ  = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;

        transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
        transform.position = Vector2.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
    }
示例#6
0
    void patrol()
    {
        transform.position = Vector2.MoveTowards(transform.position, patrol_pos,
                                                 movespeed * Time.deltaTime * TimeManager.Instance.getTimeMultiplier());

        //rotate to look at the player
        transform.right = patrol_pos - (Vector2)transform.position;
    }
示例#7
0
    // Update is called once per frame
    void Update()
    {
        transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
        //transform.position = Vector2.Lerp(transform.position, player.position, speed * Time.deltaTime);

        if (transform.position.x == (target.x - 2))
        {
            DestroyProjectile();
        }
    }
示例#8
0
        private IEnumerator MoveCharacter(Vector2 toPosition)
        {
            while (_rigidbody2D.position != toPosition)
            {
                _rigidbody2D.position =
                    Vector2.MoveTowards(_rigidbody2D.position, toPosition, Time.deltaTime * _movementSpeed);
                yield return(0);
            }

            _moving = false;
            _animator.SetBool("moving", false);
        }
    private void Update()
    {
        if (movingBack == true)
        {
            transform.position = Vector2.MoveTowards(transform.position, currentPostion, 20f * Time.deltaTime);
        }

        if (transform.position.y == currentPostion.y)
        {
            movingBack = false;
        }
    }
示例#10
0
    private void Update()
    {
        // Looks at X movement mouse

        // transform.position = mousePos;
        Vector2 mousePos = Input.mousePosition;

        transform.position = Vector2.MoveTowards(gameObject.transform.position, mousePos, moveSpeed * Time.deltaTime);


        // Vector2 mousePos = new Vector2(xPos, 0);
        // transform.right = Vector2.MoveTowards(gameObject.transform.position, )
    }
示例#11
0
    /**
     * Make enemy move freely
     */
    private void wander()
    {
        //if the changeTime was reached, calculate a new movement vector
        if (Time.time - latestDirectionChangeTime > directionChangeTime)
        {
            latestDirectionChangeTime = Time.time;
            calcuateNewMovementVector();
        }

        //move enemy:
        transform.position = Vector2.MoveTowards(transform.position, movementDirection,
                                                 1.3f * Time.deltaTime);
    }
示例#12
0
文件: Mummy.cs 项目: ldb385/CMPT306
    /**
     * simple following command that follows target based off vector position
     */
    void Chase()
    {
        // this will be used to chase the player
        transform.position = Vector2.MoveTowards(transform.position, target.position,
                                                 speed * Time.deltaTime);
        anim.SetFloat("Xinput", (target.transform.position - transform.position).normalized.x);
        anim.SetFloat("Yinput", (target.transform.position - transform.position).normalized.y);

        // play mummy sound if not on cooldown
        if (canGroan)
        {
            StartCoroutine(Groan());
        }
    }
示例#13
0
    void MoveToWaypoint()
    {
        var targetPosition    = waypoints[waypointIndex].position;
        var movementThisFrame = waveConfig.GetMoveSpeed() * Time.deltaTime;

        transform.position = Vector2.MoveTowards(transform.position, targetPosition, movementThisFrame);

        float distance = Vector2.Distance(targetPosition, transform.position);

        if (transform.position == targetPosition)
        {
            waypointIndex++;
        }
    }
示例#14
0
    void Update()
    {
        if (Vector2.Distance(transform.position, target.position) >= distance)
        {
            transform.position = Vector2.MoveTowards(transform.position,
                                                     target.position, (speed.value + 2) * Time.deltaTime);
        }
        if (Input.GetButtonDown("Fire1"))
        {
            if (laser.value)
            {
                GameObject bullet = ObjectPooler.Instance.GetPooledObject("Laser Bullet");
                if (bullet != null)
                {
                    bullet.transform.position = transform.position;
                    bullet.SetActive(true);
                }
            }
            else
            {
                GameObject bullet = ObjectPooler.Instance.GetPooledObject("Player Bullet");
                if (bullet != null)
                {
                    bullet.transform.position = transform.position;
                    bullet.SetActive(true);
                }
            }

            if (doubleM.value)
            {
                GameObject bullet = ObjectPooler.Instance.GetPooledObject("Double Bullet");
                if (bullet != null)
                {
                    bullet.transform.position = transform.position;
                    bullet.SetActive(true);
                }
            }

            if (missile.value)
            {
                GameObject bullet = ObjectPooler.Instance.GetPooledObject("Missile Bullet");
                if (bullet != null)
                {
                    bullet.transform.position = transform.position;
                    bullet.SetActive(true);
                }
            }
        }
    }
示例#15
0
    private IEnumerator FlyToward()
    {
        while (Target != null)
        {
            CorrectRotation();
            transform.position = Vector2.MoveTowards(transform.position, Target.transform.position,
                                                     speed * Time.deltaTime);
            yield return(null);
        }

        if (!hasImpacted)
        {
            Destroy(gameObject);
        }
    }
示例#16
0
 // Update is called once per frame
 void FixedUpdate()
 {
     if (photonView.IsMine)
     {
         foreach (Touch touch in Input.touches)
         {
             if (touch.phase == TouchPhase.Began)// So a touch is only registered once
             {
                 if (containsHookPoint(touch))
                 {
                     Vector2 Start = rb.position;
                     Debug.Log("gor");
                     RaycastHit2D hit = Physics2D.Linecast(Start, currentTarget, 8); // Hits all colliders exept those in layer 2(hookpoint and player)
                     onTheMove = (hit.collider == null);                             // if there are no colliders in the line, onTheMove is true
                     // checks if the player does not have enough stamina for the grapple
                     if (!(gameObject.GetComponent <playerManager>().currentStamina > staminaCost))
                     {
                         onTheMove = false;
                     }
                     //If the player hasenough stamina for the grapple, do the grapple
                     //and subtract the stamina cost from the players stamina
                     else
                     {
                         gameObject.GetComponent <playerManager>().currentStamina -= staminaCost;
                         Debug.Log(gameObject.GetComponent <playerManager>().currentStamina);
                     }
                 }
             }
         }
         if (onTheMove)//move towards current target as long as onTheMove is true
         {
             Debug.Log("On the move");
             rb.transform.position = Vector2.MoveTowards(transform.position, currentTarget, grapplingSpeed);
             Debug.Log("moving");
             if (!onTheMove)  // if the player stops moving towards target, check if the player double clicked the target
             {
                 if (doubleClicked)
                 {
                     doubleClick(); //if he doubleclicked the target
                 }
                 else
                 {
                     stick(); // if he didnt doubleclick, then you stick to the grapplepoint
                 }
             }
         }
     }
 }
示例#17
0
 public void Update()
 {
     transform.position = Vector2.MoveTowards(transform.position, moveSpots[randomSpot].position, speed * Time.deltaTime);
     if (Vector2.Distance(transform.position, moveSpots[randomSpot].position) < 0.2f)
     {
         if (waitTime < -0)
         {
             randomSpot = Random.Range(0, moveSpots.Length);
             waitTime   = startWaitTime;
         }
         else
         {
             waitTime -= Time.deltaTime;
         }
     }
 }
示例#18
0
    /**
     * run at players position
     */

    private void Chase()
    {
        // this will be used to chase the player
        transform.position = Vector2.MoveTowards(transform.position, target.position,
                                                 speed * Time.deltaTime);
        Vector2 direction = target.position - transform.position;

        anim.SetFloat("Xinput", direction.normalized.x);
        anim.SetFloat("Yinput", direction.normalized.y);

        // play laughter sound if not on cooldown
        if (canLaugh)
        {
            StartCoroutine(Laugh());
        }
    }
示例#19
0
    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        if (_movePlayer)
        {
            PlayerController pc     = FindObjectOfType <PlayerController>();
            Transform        player = pc.gameObject.transform;
            if (Math.Abs(player.position.x - _sceneLoader.transform.position.x) <= 0.1)
            {
                _movePlayer = false;
                pc.gameObject.GetComponent <Rigidbody2D>().velocity = Vector2.zero;
                return;
            }

            player.position =
                Vector2.MoveTowards(player.position, _sceneLoader.transform.position, Speed * Time.deltaTime);
        }
    }
示例#20
0
    private void Move()
    {
        if (transform.position.x < target.x && !reachedTarget)
        {
            _spriteRenderer.flipX = true;
        }
        else
        {
            if (Math.Abs(transform.position.x - target.x) > 0.05f && !reachedTarget)
            {
                _spriteRenderer.flipX = false;
            }
        }

        Vector2 position = Vector2.MoveTowards(transform.position, target, Time.deltaTime * speed);

        _rb.MovePosition(position);
    }
示例#21
0
    void MoveHorizontallyTowards(ref float xDestination)
    {
        float roomWidth   = roomBackgroundModel.GetComponent <RectTransform>().rect.width;
        float playerWidth = playerModel.GetComponent <RectTransform>().rect.width;

        if (xDestination > roomWidth / 2 - playerWidth / 2)
        {
            xDestination = roomWidth / 2 - playerWidth / 2;
        }
        else if (xDestination < -roomWidth / 2 + playerWidth / 2)
        {
            xDestination = -roomWidth / 2 + playerWidth / 2;
        }



        transform.position = Vector2.MoveTowards(transform.position, new Vector2(xDestination, transform.position.y), speed * Time.deltaTime);
    }
示例#22
0
    // Update is called once per frame
    void FixedUpdate()
    {
        if ((Vector2)transform.position != targetposition)
        {
            speed = Random.Range(0.1f, 1.5f);

            transform.position = Vector2.MoveTowards(transform.position, targetposition, speed * Time.deltaTime);

            if ((Vector2)transform.position == originalPos)
            {
                transform.position = Vector2.MoveTowards(transform.position, transform.position, speed * Time.deltaTime);
            }
        }
        else
        {
            targetposition = rotationCenter.position;
        }
    }
示例#23
0
        bool IsOverLedge()
        {
            if (!_controller.State.IsGrounded)
            {
                return(false);
            }

            // cast ray a little forward than center to see if overhang is > 50%
            Vector3      forward   = _character.IsFacingRight ? transform.right : -transform.right;
            Vector2      origin    = Vector2.MoveTowards(transform.position, transform.position + forward, ledgeCheckRayOffset);
            float        rayLength = ((CorgiControllerOverride)_controller).BoundsHeight / 2 + 0.05f + rayOffset;
            RaycastHit2D rc        = MMDebug.RayCast(origin, -transform.up, rayLength, _controller.PlatformMask, Color.magenta, true);

            if (rc.collider == null)
            {
                return(true);
            }

            return(false);
        }
示例#24
0
    void hunt()
    {
        if (Vector2.Distance(transform.position, last_player_pos) >= 0)
        {
            transform.position = Vector2.MoveTowards(transform.position, last_player_pos,
                                                     movespeed * Time.deltaTime * TimeManager.Instance.getTimeMultiplier());
        }

        //rotate to look at the player
        transform.right = last_player_pos - (Vector2)transform.position;

        // Gone to last seen pos, and cannot find
        if ((Vector2)transform.position == last_player_pos)
        {
            // No clue where the player has gone
            had_LOS = false;
            // Will help other nearby enemies
            alerted = true;
        }
    }
示例#25
0
    // Update is called once per frame
    void FixedUpdate()
    {
        //Calculamos el nuevo punto donde hay que ir en base a la variable de destino
        Vector2 newPos = Vector2.MoveTowards(this.transform.position, destination, speed);

        //usamos el rigidbody para transportar a pacman hasta dicha posicion
        GetComponent <Rigidbody2D>().MovePosition(newPos);

        float distanceToDestination = Vector2.Distance((Vector2)this.transform.position, destination);

        if (distanceToDestination < 1f)
        {
            if (Input.GetKey(KeyCode.UpArrow) && CanMoveTo(Vector2.up))
            {
                destination = (Vector2)this.transform.position + Vector2.up;
            }

            if (Input.GetKey(KeyCode.RightArrow) && CanMoveTo(Vector2.right))
            {
                destination = (Vector2)this.transform.position + Vector2.right;
            }

            if (Input.GetKey(KeyCode.DownArrow) && CanMoveTo(Vector2.down))
            {
                destination = (Vector2)this.transform.position + Vector2.down;
            }

            if (Input.GetKey(KeyCode.LeftArrow) && CanMoveTo(Vector2.left))
            {
                destination = (Vector2)this.transform.position + Vector2.left;
            }
        }

        Vector2 dir = destination - (Vector2)this.transform.position;

        GetComponent <Animator>().SetFloat("X", dir.x);
        GetComponent <Animator>().SetFloat("Y", dir.y);
    }
示例#26
0
    IEnumerator Moving(Vector2 target, float speed, bool smooth)
    {
        targetPosition = target;

        //now we want to get the padding for our character
        Vector2 padding = anchorPadding;
        //now get the limitations for 0 to 100% movement. The farthest a character can move to the right before 100% should be the 1 value
        float maxX = 1f - padding.x;
        float maxY = 1f - padding.y;

        //now get the actal position target for the minimum anchors(left/bottom bounds) fo the character. because maxX and maxY is just a percentage.
        Vector2 minAnchorTarget = new Vector2(maxX * targetPosition.x, maxY * targetPosition.y);

        //move until we reach end of frame
        speed *= Time.deltaTime;
        while (root.anchorMin != minAnchorTarget)
        {
            root.anchorMin = (!smooth) ? Vector2.MoveTowards(root.anchorMin, minAnchorTarget, speed) : Vector2.Lerp(root.anchorMin, minAnchorTarget, speed);
            root.anchorMax = root.anchorMin + padding;
            yield return(new WaitForEndOfFrame());
        }
        StopMoving();
    }
示例#27
0
 void HandleMovement()
 {
     if (isAngry)
     {
         Vector2 newPosition = Vector2.MoveTowards(rb2d.position, player.GetComponent <Transform>().position, Time.fixedDeltaTime * moveSpeed);
         rb2d.MovePosition(newPosition);
     }
     else
     {
         if (path == null)
         {
             return;
         }
         if (rb2d.position != currentPathTarget)
         {
             Vector2 newPosition = Vector2.MoveTowards(rb2d.position, currentPathTarget, Time.fixedDeltaTime * moveSpeed);
             rb2d.MovePosition(newPosition);
         }
         else
         {
             if (currentPathTargetIndex + 1 > path.positions.Count - 1 && isPatrolling)
             {
                 currentPathTargetIndex = 0;
             }
             else if (currentPathTargetIndex + 1 > path.positions.Count - 1 && !isPatrolling)
             {
                 moveSpeed = 0;
             }
             else
             {
                 currentPathTargetIndex += 1;
             }
             currentPathTarget = path.positions[currentPathTargetIndex];
         }
     }
 }
示例#28
0
 private void FixedUpdate()
 {
     //move towards current target as long as onTheMove is true
     if (onTheMove)
     {
         transform.position = Vector2.MoveTowards(transform.position, currentTarget, grapplingSpeed);
         //Does not start rotating until close to destination
         if (Vector2.Distance(transform.position, currentTarget) < 3.2)
         {
             landingRotation();
         }
         if (!onTheMove)      // if the player stops moving towards target, check if the player double clicked the target
         {
             if (doubleClicked)
             {
                 doubleClick();     //if he doubleclicked the target
             }
             else
             {
                 stick();     // if he didnt doubleclick, then you stick to the grapplepoint
             }
         }
     }
 }
示例#29
0
    // Update is called once per frame
    void Update()
    {
        animator.SetFloat("Movement", Vector2.Distance(player.transform.position, transform.position));
        if (currentState == "Patrol")
        {
            Vector2 nextposition = Vector2.MoveTowards(transform.position, nextwaypoint.position, Time.deltaTime * speed);

            transform.position = nextposition;

            if (transform.position == waypoint1.position || transform.position == waypoint2.position)
            {
                if (nextwaypoint == waypoint1)
                {
                    nextwaypoint = waypoint2;
                }
                else
                {
                    nextwaypoint = waypoint1;
                }
            }

            //emile code
            currentTarget = nextwaypoint.position - transform.position;
            transform.up  = currentTarget;


            if (targetAquired())
            {
                currentState = "Move";
            }
        }
        else
        if (currentState == "Move")
        {
            var Target = player.transform.position;
            var timeToMousePosition = Target - transform.position;
            transform.up = timeToMousePosition;

            if (Vector2.Distance(player.transform.position, transform.position) > 10f)
            {
                Vector2 moveToplayer = Vector2.MoveTowards(transform.position, player.position, Time.deltaTime * speed);
                transform.position = moveToplayer;
                animator.SetBool("Enemy.Shoot", false);
            }

            if (!targetAquired())
            {
                currentState = "Patrol";
            }
        }


        bool targetAquired()
        {
            GameObject targetGO = GameObject.FindGameObjectWithTag("Player");
            bool       inRange  = false;
            bool       inVision = false;

            if (Vector2.Distance(targetGO.transform.position, transform.position) < range)
            {
                inRange = true;
            }

            var linecast = Physics2D.Linecast(transform.position, targetGO.transform.position, mask);

            if (linecast.transform == null)
            {
                inVision = true;
            }
            return(inRange && inVision);
        }
    }