C# 如何根据第一个对象';统一中的矢量3?

C# 如何根据第一个对象';统一中的矢量3?,c#,unity3d,vector,C#,Unity3d,Vector,这感觉像是一个超级noob问题,但是,基本上我正在做一个项目,用户基本上放下一个对象,我想在对象的右侧或左侧实例化另一个对象,但是根据用户面对的方向,沿着正确的x或z 例如,如果用户将一个对象放置在(0,0,1)处,而用户位于(0,0,0),则我希望下一个对象位于相同的z平面,但具有不同的x。但是,我不知道用户要将对象放置在哪里,它可以放置在(1,0,0)处,在这种情况下,我希望操作z变量而不是x 真正的问题是,我如何知道需要更改哪个变量,x或/和z 我可以得到四个基本方向,但是我如何得到这条线

这感觉像是一个超级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);
    }
}

您可以使用相机的
变换组件中的
向前
向右
向量:

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;

您可以使用相机的
变换组件中的
向前
向右
向量:

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;

他们可以只把物体放在如图所示的那条线上,还是放在用户周围圆圈边缘的任何地方?他们可以把物体放在用户看的任何地方。通常,物体在用户前方1米处。我不确定代码在统一体中到底是什么样的,但数学很简单:
if(magnificatesqr((Abs(transofrm.forward)+Abs(位置))-Abs(playerPos))>震级sqr((Abs(transofrm.right)+Abs(position))-Abs(playerPos)))position+=transform.forward else position+=transform.right
。基本上,如果玩家更靠近对象forward/-forward,那么它会跟随你想沿着transform放置一个对象。right.他们只能放置在如图所示的那条线上,还是放在用户周围圆圈边缘的任何地方?他们可以将对象放置在user正在查看的对象通常在用户面前1m我不确定代码在unity中的具体外观,但数学相当简单:
if(magnitySQR((Abs(transofrm.forward)+Abs(position))-Abs(playerPos))>magnitySQR((Abs(transofrm.right)+Abs(position))-Abs(playerPos)))position+=transform.forward else position+=transform.right
。基本上,如果玩家更靠近对象forward/-forward,那么它会跟随你,你会想沿着变换放置一个对象。对。我想得太多了,哈哈,我想得太多了,太多了,哈哈,太多了