无法统一移动我的播放器,我使用的是基于图块的移动

问题描述 投票:0回答:2

我正在按照本教程为我的播放器创建基于图块的移动,但我不明白为什么它不起作用。这是我的代码,但它不管用。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed;

    private bool isMoving;

    private Vector2 input;
    private void Update()
    {
        if (isMoving)
        {
            input.x = Input.GetAxis("Horizontal");
            input.y = Input.GetAxis("Vertical");

            if(input != Vector2.zero)
            {
                var targetPos = transform.position;
                targetPos.x += input.x;
                targetPos.y += input.y;

                StartCoroutine(Move(targetPos));
            }
        }
    }

    IEnumerator Move(Vector3 targetPos)
    {
        isMoving = true;

        while ((targetPos - transform.position).sqrMagnitude > Mathf.Epsilon)
        {
            transform.position = Vector3.MoveTowards(transform.position, targetPos, moveSpeed * Time.deltaTime);
                yield return null;
        }
        transform.position = targetPos;
        isMoving = false;
        }

    }

我尝试仅将 GetAxisRaw 更改为 GetAxis。然后我认为我的键盘有问题并下载了 Unity Playground,但是他们的脚本一切正常......我不知道还能做什么。

unity3d 2d
2个回答
0
投票

在您的代码字段中,“isMoving”始终处于“false”值,协程“Move”永远不会启动。 也许对于教程可以使用协程移动,但我会使用这样的代码:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed;
    private Vector3 targetPosition;

    private void Start()
    {
        targetPosition = transform.position;
    }

    private void Update()
    {
        targetPosition.x += Input.GetAxis("Horizontal");
        targetPosition.y += Input.GetAxis("Vertical");
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
    }
} 

0
投票

其实你的错误很容易解决。只需将 isMoving 替换为 !isMoving 因为它以 false 开头或者它从一开始就不会启动协程 `代码:

public float moveSpeed;
private bool isMoving;
private Vector2 input;
private void Update()
{
    if (!isMoving)
    {
        ....
    }
}

`

© www.soinside.com 2019 - 2024. All rights reserved.