如何根据Unity中第一个对象的Vector3获取下一个正确的位置?

时间:2017-10-23 18:58:20

标签: c# unity3d vector

这感觉就像一个超级noob问题但是,基本上我正在研究用户基本放下一个对象的项目,我想在对象的右边或左边实例化另一个对象但是沿着正确的x或z取决于用户面向的方向。

例如,如果用户将对象放在(0,0,1)并且用户位于(0,0,0),我希望下一个对象位于同一个z平面但具有不同的x。但是,我不知道用户将放置对象的位置,它可以放在(1,0,0)处,在这种情况下,我想要操纵z变量而不是x。

真正的问题是我怎么知道我需要改变哪个变量,x或/和z?

我可以获得四个基本方向,但我如何获得沿线的所有值?或者有更好的方法吗?

public Vector3 GetNextPos(Vector3 position)
{
    if (Camera.main.transform.rotation.y == 0)
    {
        return position += new Vector3(-0.1f, 0, 0);
    }

    if (Camera.main.transform.rotation.y == 90)
    {
        return position += new Vector3(0, 0, 0.1f);
    }

    if (Camera.main.transform.rotation.y == 180)
    {
        return position += new Vector3(0.1f, 0, 0);
    }

    if (Camera.main.transform.rotation.y == -90)
    {
        return position += new Vector3(0, 0, -0.1f);
    }
}

What I want to do

1 个答案:

答案 0 :(得分:2)

您可以使用相机forward组件中的righttransform向量:

Vector3 position = Camera.main.transform.position;
Vector3 forward  = Camera.main.transform.forward;
Vector3 left     = -Camera.main.transform.right;

//first object is one unit in front of the camera
Vector3 firstObjectPosition = position + forward;

//second object is one unit left of the first object
Vector3 secondObjectPosition = firstObjectPosition + left;