Mouse based aiming Unity3d

北城余情 提交于 2020-01-29 04:14:07

问题


I am making cannonball shooter game. here's a short code where I am calculating the aiming direction.

            Vector3 mousePos = Input.mousePosition;
            mousePos.z = thisTransform.position.z - camTransform.position.z;
            mousePos = mainCamera.ScreenToWorldPoint (mousePos);

            Vector3 force = mousePos - thisTransform.position;
            force.z = force.magnitude;

This works when both ball and at angle (0,0,0). But when the angle changes, I am not able to shoot at right direction.

Suppose both ball and camera are looking at 45 degrees on right side, the same code doesn't work.

The current code assumes both are at angle (0,0,0). So in the above mentioned case, the throwing direction is always wrong.

I want to throw the ball in whatever direction it is. But assume it as 0 angle and throw accordingly.


回答1:


Using Camera.ScreenToWorldPoint is wrong in this situation.

You should be using raycasting against a plane. Here's a demonstration without unnecesary math:

Raycasting gives you the advantage, that you don't have to guess how "deep" did the user click (the z coordinate).

Here's a simple implementation of the above:

/// <summary>
/// Gets the 3D position of where the mouse cursor is pointing on a 3D plane that is
/// on the axis of front/back and up/down of this transform.
/// Throws an UnityException when the mouse is not pointing towards the plane.
/// </summary>
/// <returns>The 3d mouse position</returns>
Vector3 GetMousePositionInPlaneOfLauncher () {
    Plane p = new Plane(transform.right, transform.position);
    Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);
    float d;
    if(p.Raycast(r, out d)) {
        Vector3 v = r.GetPoint(d);
        return v;
    }

    throw new UnityException("Mouse position ray not intersecting launcher plane");
}

Demonstation: https://github.com/chanibal/Very-Generic-Missle-Command



来源:https://stackoverflow.com/questions/29689617/mouse-based-aiming-unity3d

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!