gpt4 book ai didi

c# - 从平面边缘 Unity 画线

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:58 27 4
gpt4 key购买 nike

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

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

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));
}

最佳答案

此代码未经测试,因此可能是错误的。

编辑:

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

编辑结束

您需要知道每个圆的半径。假设在这个例子中你知道它,它是 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

关于c# - 从平面边缘 Unity 画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com