用鼠标移动对象,但不要移动到鼠标指针所在的位置

时间:2019-07-10 13:12:40

标签: c# unity3d axis mouse-position

场景: scene image

嗨,我正在尝试使用鼠标控制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;
}

1 个答案:

答案 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.positionhitPoint的距离的一半。有关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);
        }
    }
}