从飞机边缘Unity绘制线

时间:2016-01-20 17:46:43

标签: c# unity3d

我正在尝试从一个对象到目标对象绘制一条线。我已设法做到这一点,但线条是从中心抽出的

我想做的是绘制从平面边缘到目标平面边缘的线条

screenshot

在此图像中,白线是当前绘制的连接,红线是我想要绘制线条的方式

这就是现在绘制线条的方式

    foreach (GameObject planet in LinkedPlanets)
    {
        GameObject PlanetLine = new GameObject();
        PlanetLine.transform.position = this.transform.position;
        PlanetLine.name = this.transform.name + " To " + planet.transform.name;
        PlanetLine.transform.parent = this.transform;
        PlanetLine.AddComponent<LineRenderer>();
        LineRenderer lr = PlanetLine.GetComponent<LineRenderer>();
        lr.material = new Material(Shader.Find("Particles/Additive"));
        lr.SetWidth(3f, 3f);
        lr.SetPosition(0, this.transform.position);
        lr.SetPosition(1, planet.transform.position);
        lr.GetComponent<Renderer>().material.SetColor("_TintColor", new Color(1, 1, 1, 0.2f));
}

1 个答案:

答案 0 :(得分:1)

此代码未经过测试,因此可能出错。

修改

我看到你想要从平面的边缘连接,所以所有的变化都不是从一个行星到另一个行星的方向矢量,而是基于这个矢量的长轴有方向。如果“x”更长,那么“z”使用Vector3.right乘以一元运算符,这取决于方向向量是否低于零。

END OF EDIT

您需要知道每个圆的半径。让我们说在这个例子中你知道它,它是5f和4f。然后你需要计算“会议”点数。你可以这样做:

foreach (GameObject planet in LinkedPlanets)
    {
        float radiusA = 5f;
        float radiusB = 4f;

        GameObject PlanetLine = new GameObject();
        PlanetLine.transform.position = this.transform.position;
        PlanetLine.name = this.transform.name + " To " + planet.transform.name;
        PlanetLine.transform.parent = this.transform;
        PlanetLine.AddComponent<LineRenderer>();
        LineRenderer lr = PlanetLine.GetComponent<LineRenderer>();
        lr.material = new Material(Shader.Find("Particles/Additive"));
        lr.SetWidth(3f, 3f);

        Vector3 pointA = Vector3.ClampMagnitude (planet.transform.position - this.transform.position, radiusA);

        Vector3 pointB = Vector3.ClampMagnitude (this.transform.position -planet.transform.position, radiusB);

        lr.SetPosition(0, this.transform.position + pointA);
        lr.SetPosition(1, planet.transform.position + pointB);
        lr.GetComponent<Renderer>().material.SetColor("_TintColor", new Color(1, 1, 1, 0.2f));
}

让我们解释一下。

首先你需要获得方向向量:

planet.transform.position - this.transform.position

然后将其长度钳制在半径长度上结束:

Vector3 pointA = Vector3.ClampMagnitude (planet.transform.position - this.transform.position, radiusA);

最后将此向量添加到实际位置:

this.transform.position + pointA