我正在尝试从一个对象到目标对象绘制一条线。我已设法做到这一点,但线条是从中心抽出的
我想做的是绘制从平面边缘到目标平面边缘的线条
在此图像中,白线是当前绘制的连接,红线是我想要绘制线条的方式
这就是现在绘制线条的方式
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));
}
答案 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