2012-12-04 331 views

回答

7

See Unity Answers對於類似的問題。

Alternatively

float theta_scale = 0.1;    //Set lower to add more points 
int size = (2.0 * PI)/theta_scale; //Total number of points in circle. 

LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer>(); 
lineRenderer.material = new Material(Shader.Find("Particles/Additive")); 
lineRenderer.SetColors(c1, c2); 
lineRenderer.SetWidth(0.2F, 0.2F); 
lineRenderer.SetVertexCount(size); 

int i = 0; 
for(float theta = 0; theta < 2 * PI; theta += 0.1) { 
    x = r*cos(theta); 
    y = r*sin(theta); 

    Vector3 pos = new Vector3(x, y, 0); 
    lineRenderer.SetPosition(i, pos); 
    i+=1; 
} 

的LineRenderer需要連續點。您可以稍微修改此代碼以使用圓柱體遊戲對象而不是線性渲染器。我發現LineRenderer有點可怕。

最後,與第一個鏈接相似,您可以將圓形紋理附加到單位平面。使不屬於該圓的部分的紋理的任何部分透明。然後縮放並調整飛機以適合您的物體。不幸的是,如果有人看起來幾乎與飛機平行,這種方法並不好。

0

圓形可以使用着色器繪製 - 如果它位於中心半徑上,則繪製像素。

2

Jerdak的解決方案很好,但代碼很混亂,所以我不得不稍微調整一下。這是一個類的代碼,我在循環中使用i來避免錯誤。

它還用它的gameObject位置更新圓的位置。

using UnityEngine; 
using System.Collections; 

public class CircleDraw : MonoBehaviour { 
    float theta_scale = 0.01f;  //Set lower to add more points 
    int size; //Total number of points in circle 
    float radius = 3f; 
    LineRenderer lineRenderer; 

    void Awake() {  
    float sizeValue = (2.0f * Mathf.PI)/theta_scale; 
    size = (int)sizeValue; 
    size++; 
    lineRenderer = gameObject.AddComponent<LineRenderer>(); 
    lineRenderer.material = new Material(Shader.Find("Particles/Additive")); 
    lineRenderer.SetWidth(0.02f, 0.02f); //thickness of line 
    lineRenderer.SetVertexCount(size);  
    } 

    void Update() {  
    Vector3 pos; 
    float theta = 0f; 
    for(int i = 0; i < size; i++){   
     theta += (2.0f * Mathf.PI * theta_scale);   
     float x = radius * Mathf.Cos(theta); 
     float y = radius * Mathf.Sin(theta);   
     x += gameObject.transform.position.x; 
     y += gameObject.transform.position.y; 
     pos = new Vector3(x, y, 0); 
     lineRenderer.SetPosition(i, pos); 
    } 
    } 
} 
9

我發現這段代碼有一個很大的錯誤。點的數量(大小)不應該是「(2 * pi/theta_scale)+ 1」,因爲這會導致圓圈畫6.28次。大小應該是「1/theta_scale + 1」。因此,對於0.01的theta_scale,需要畫出100個點,對於0.1的theta_scale,需要畫出10個點。否則它將分別提取62次和628次。 這是我使用的代碼。

using UnityEngine; 
using System.Collections; 

public class DrawRadar : MonoBehaviour 
{ 
    public float ThetaScale = 0.01f; 
    public float radius = 3f; 
    private int Size; 
    private LineRenderer LineDrawer; 
    private float Theta = 0f; 

    void Start() 
    {  
     LineDrawer = GetComponent<LineRenderer>(); 
    } 

    void Update() 
    {  
     Theta = 0f; 
     Size = (int)((1f/ThetaScale) + 1f); 
     LineDrawer.SetVertexCount(Size); 
     for(int i = 0; i < Size; i++){   
      Theta += (2.0f * Mathf.PI * ThetaScale);   
      float x = radius * Mathf.Cos(Theta); 
      float y = radius * Mathf.Sin(Theta);   
      LineDrawer.SetPosition(i, new Vector3(x, y, 0)); 
     } 
    } 
} 

如果修改「大小」是由ThetaScale分割數,就可以使掃計/餅圖類型的圖形。

+2

這應該是正確的答案,因爲@ Jerdak的代碼,吸引這麼多不必要的行,但是這個代碼只穿過一次,在單次繪製每個角落。雖然,請注意,對於無孔線,您應該這樣做:'Size =(int)((1f/ThetaScale)+ 2f)' – 2015-12-30 17:11:47

0

用Sprite做了以下操作。陳在現場飛行,所以她略高於飛機。我讓她飛了,所以我可以得到一個很好的截圖,不是因爲它不會與飛機搭配。

我用了一個低分辨率的圓形精靈。 X旋轉90 比例尺X 15,Y 15,Z 1

然後,我設置了排序圖層,因此它將呈現在默認圖層之上。當我遇到這個帖子時,我正在測試這個。它不能很好地處理陰影。我必須弄清楚什麼圖層陰影被繪製,以確保它們被渲染到精靈上。

enter image description here