2016-01-20 197 views
2

我想绘制一条线从一个对象到目标对象。我已成功地做到这一点,不过线条从中心从平面边缘绘制线Unity

抽我想什么做的是汲取一个平面的边缘线到面的边缘上的目标

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

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

编辑:

我知道你想从平面的边缘连接,因此所有变化,而不必从一个星球到另一个方向向量,是在此基础上载体的长轴有方向。如果“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 
+0

嗨感谢您的答复,我已经尝试过这个解决方案,我认为它会工作,如果点不需要tou飞机或圆圈。 我将如何得到从飞机的边缘或圆的边缘去的线。 飞机和地球周围的圆是分开的东西,圆是运行时绘制的线渲染和飞机只是一个普通的raycasts 这是你的代码的结果 http:// imgur .COM/FT8Av1i –