我最近开始使用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
的左右移动和上下移动
答案 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则相反。