Mathf.Clamp,MovePosition和GetKeyDown问题

时间:2019-01-22 19:14:29

标签: c# visual-studio unity3d

我最近开始使用Unity进行编码,但在一个问题上迷住了。

我尝试使用Vector3,但出现以下错误:cannot convert from void to float

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

public class FrogController : MonoBehaviour
{
    Rigidbody2D rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {

    }

    void FixedUpdate()
    {  
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            rb.MovePosition(transform.position + transform.up);
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            rb.MovePosition(transform.position + transform.up * -1);
        }
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            rb.MovePosition(transform.position + transform.right * -1);
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            rb.MovePosition(transform.position + transform.right);
        }
    }
}

我想使用Mathf.Clamp来限制transform.rigidbody的左右移动和上下移动

1 个答案:

答案 0 :(得分:0)

喜欢Vector3.Max和Vector3.Min吗?

public Vector3 Max;
public Vector3 Min;


    void FixedUpdate()
    {  
        Vector3 desiredPosition;

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            desiredPosition = transform.position + transform.up;
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            desiredPosition = transform.position + transform.up * -1;
        }
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            desiredPosition = transform.position + transform.right * -1;
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            desiredPosition = transform.position + transform.right;
        }

        desiredPosition = Vector3.Min(desiredPosition, this.Max);
        desiredPosition = Vector3.Max(desiredPosition, this.Min);

        rb.MovePosition(desiredPosition);   
    }

在此示例中,请确保在检查器中设置“最小值”和“最大值”。

请注意,我们将Max传递给Min函数,并将Min传递给Max函数。这是因为Vector3.Min返回您传递给它的两个向量的较小分量。当您的头寸超出最大值时,我们希望返回该头寸,因为它是两者中较小的一个。当位置小于最大值时,我们需要位置(同样,两者中较小的一个)。 Vector3.Max则相反。