Why does Camera.ScreenPointToRay work crooked and not accurate?

video here

I'm trying to hover the player over the cursor, but it doesn't work exactly, here's the code:

var playerPlane = new Plane(Vector3.up, transform.position);

    // Generate a ray from the cursor position
    var ray = Camera.main.ScreenPointToRay (Input.mousePosition);

    // Determine the point where the cursor ray intersects the plane.
    // This will be the point that the object must look towards to be looking at the mouse.
    // Raycasting to a Plane object only gives us a distance, so we'll have to take the distance,
    //   then find the point along that ray that meets that distance.  This will be the point
    //   to look at.
    float hitdist = 0.0f;
    // If the ray is parallel to the plane, Raycast will return false.
    if (playerPlane.Raycast (ray, out hitdist)) {
        // Get the point along the ray that hits the calculated distance.
        var targetPoint = ray.GetPoint(hitdist);

        // Determine the target rotation.  This is the rotation if the transform looks at the target point.
        var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);

        // Smoothly rotate towards the target point.
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);

here's the player's hierarchy The player and his scripts:

  • mesh
  • the same mesh that changes position depending on the rotation of its parent

Ответы (0 шт):