繁体   English   中英

Unity:我如何找到距播放器一定数量并经过鼠标的照相机的某个点?

[英]Unity: How Do I Find The Point Of A Camera That Is A Certain Amount Of Units Away From A Player And Passes Through The Mouse?

我想根据鼠标相对于播放器的位置,将相机距离播放器7.5f单位设置。

警告: 在您回答问题或留下答复之前,我要求您查看我在问题末尾张贴的图片,以便您对我的要求有所了解。 该图是摄像机应位于的“ A点”。 这是一个“例如”,表示它是鼠标,播放器和相机可能产生的结果的一个示例。

我发现了鼠标和播放器之间的距离:

//Distance: mouse -> player
D1 = Mathf.Sqrt(Mathf.Pow(mousePos.x - player.transform.position.x, 2) 
    + Mathf.Pow(mousePos.z - player.transform.position.z, 2));

我设置了一个语句,该语句将找到鼠标和播放器之间的关系:

if(mousePos.x - player.transform.position.x >= 0)
{
    CamX = //Put Code Here
}
if (mousePos.x - player.transform.position.x <= 0)
{
    CamX = //Put code Here
}
if (mousePos.z - player.transform.position.z >= 0)
{
    CamZ = //Put Code Here
}
if (mousePos.z - player.transform.position.z <= 0)
{
    CamZ = //Put Code Here
}

这是我正在使用的变量:

private float D1;
private float D2;
private float D3;
private float CamX;
private float CamZ;

这是我正在处理的代码部分。 不要把它当作我的全部工作,因为它只是代码的集体讨论:

ray = Camera.main.ScreenPointToRay(Input.mousePosition);

if (Physics.Raycast(ray, out hit))
{
    mousePos = new Vector3(hit.point.x, 0.8f, hit.point.z);
    //Distance: mouse -> player
    D1 = Mathf.Sqrt(Mathf.Pow(mousePos.x - player.transform.position.x, 2) 
        + Mathf.Pow(mousePos.z - player.transform.position.z, 2));

    if(mousePos.x - player.transform.position.x >= 0)
    {
        CamX = //Put Code Here
    }
    if (mousePos.x - player.transform.position.x <= 0)
    {
        CamX = //Put code Here
    }
    if (mousePos.z - player.transform.position.z >= 0)
    {
        CamZ = //Put Code Here
    }
    if (mousePos.z - player.transform.position.z <= 0)
    {
        CamZ = //Put Code Here
    }
    //Distance: mouse -> camera
    D2 = D1 + 7.5f;
    //Distance: player -> camera
    D3 = Mathf.Sqrt(Mathf.Pow(player.transform.position.x - CamX, 2)
        + Mathf.Pow(player.transform.position.z - CamZ, 2));
    ...

我的图

这是一张图片,示意我如何定位所有东西: 预期结果

我的问题是这样的:

如何找到距播放器7.5f单位并经过鼠标坐标(point(mousePosX,mousePosZ))的相机(point(CamX,CamZ))的位置。

您可以采用几种不同的方法来解决这个问题,但是一种方法是将鼠标的方向矢量获取到玩家位置,然后将其乘以7.5乘以玩家位置,这里是一些示例代码:

    // assuming Y is the same for player and mouse
    Vector3 normDirection = ((Vector3)playerPos - (Vector3)mousePos).normalized; // unit vector from mouse to player
    Vector2 extendedDir = new Vector2(normDirection.x * 7.5f, normDirection.z * 7.5f);
    Vector2 cameraPos = new Vector2(playerPos.x + extendedDir.x, playerPos.z + extendedDir.y); // extended vector added to player pos

    Camera.main.transform.position = new Vector3(cameraPos.x, .8f, cameraPos.y); // set camera position

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM