场景:
嗨,我正在尝试使用鼠标控制X和Z轴上的孔,但不希望该孔移动到鼠标位置
飞机m_Plane;
.b1 {
border: 1px solid black;
padding: .3em .75em;
letter-spacing: .4em;
}
.b2 {
border: 1px solid black;
padding: .3em calc(.75em - .4em) .3em .75em;
letter-spacing: .4em;
}
答案 0 :(得分:1)
我会保留原来的答案,因为如标题所示,如果“朝着鼠标位置移动”将是理想的行为,那么如果没有它,代码将无法运行。
您试图使对象执行与鼠标相同的移动,但是您编写的代码将鼠标的位置而不是鼠标的位置移到鼠标的位置。< / p>
您必须检查鼠标的轴,并将运动方向应用于对象,例如:
float speed = 5f;
void Update()
{
if (Input.GetMouseButton(0))
{
var moveDirection = new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y"));
transform.position += moveDirection * speed * Time.deltaTime;
}
}
我猜您的Lerp并没有按照您想要的去做,因为代码只会执行一次,并且将您的位置设置为Time.deltaTime * 5,应该大致为0.9,这意味着90% transform.position
到hitPoint
的距离的一半。有关Lerping的更多信息,请阅读the documentation:
Vector3 Lerp(Vector3 a,Vector3 b,float t);
- 当t = 0时:返回a。
- 当t = 1时返回b。
- 当t = 0.5时,返回a和b之间的中间点。
我认为简单的Vector3.MoveTowards将为您服务:
Vector3 hitPoint;
float speed = 5;
void Update()
{
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float enter = 0.0f;
if (m_Plane.Raycast(ray, out enter))
{
hitPoint = ray.GetPoint(enter);
transform.position = Vector3.MoveTowards(transform.position, hitPoint, speed * Time.deltaTime);
}
}
}