2012-12-04 24 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)' –

0

スプライトで次のことを行いましたか?チャンは飛んでいるので、彼女は飛行機のわずかに上です。私は彼女の飛行機を持っていたので、良いスクリーンショットを得ることができました。それは飛行機でうまくいかないからではありません。

低解像度の円スプライトを使用しました。 Xローテーション90 スケールX 15、Y 15、Z 1

次に、デフォルトレイヤの上にレンダリングするようにソートレイヤーを設定します。私はこの記事に出会ったときにこれをテストしていました。影をよく扱いません。私はスプライトにレンダリングされることを確認するためにどのようなレイヤシャドウが描画されているのか把握しなければなりません。

enter image description here

関連する問題