Vector3:以变量为坐标

时间:2018-11-03 13:02:34

标签: c# unity3d

作为Vector3坐标的变量... 这是绘制一个四边形和射线的空游戏对象上脚本的一部分。 我可以绘制四边形,也可以绘制射线。我可以通过在Vector3中键入float来手动移动该射线。为什么不能在Vector3中使用“ planeWidth”或“ planeHeight”代替数字? 我在定义“ public Vector3 rayA1Pos ...”行时遇到错误。

//Define my Quad
    public float planeWidth = 24f;
    public float planeHeight = 34.5f;
//Declare rayA1
    private Ray rayA1;
    private RaycastHit hitA1;
    public float rayDistance = 150f;
//rayA1's Vector3 coordinate at top-right corner of Quad
 public Vector3 rayA1Pos = new Vector3( (**planeWidth**/2), (planeHeight/2), 0f);

仅显示一个使用示例,此方法有效: rayA1 = new Ray(transform.position + new Vector3(0f,150f,0f),transform.forward);

但是为什么不起作用:

    rayA1 = new Ray(transform.position + rayA1Pos, transform.forward);

还是这个?

ray1 = new Ray(transform.position + new Vector3(planeWidth, planeHeight, 0f), transform.forward)

再一次,当我将它们放置为Vector3坐标时,“ planeWidth”和“ planeHeight”会引发错误。 谢谢阅读。这是我的第一个锅,但是我已经在这个论坛上找到了很多很棒的东西,所以我已经非常感谢你们!汤姆·G。

1 个答案:

答案 0 :(得分:1)

我相信您会遇到以下错误:

  

字段初始化器无法引用非静态字段,方法或   财产

您不能使用变量在全局范围内以所需的方式初始化其他变量。您必须将planeWidthplaneHeight更改为静态。通常,您在类构造函数中进行初始化。在带有MonoBehaviour的Unity3D中,您通常使用Start()Awake()方法来实现。

执行此操作:

public float planeWidth = 24f;
public float planeHeight = 34.5f;
public Vector3 rayA1Pos;

void Start()
{
   rayA1Pos = new Vector3((planeWidth/2), (planeHeight/2), 0f);
}