17

Unity 3dで円を描くには? さまざまなオブジェクトの周りに円を描きたいです。円の半径は異なり、円にはテクスチャ (正方形) があります。

4

9 に答える 9

16

このコードに大きなエラーが見つかりました。ポイントの数 (サイズ) は "(2 * pi / theta_scale) + 1" であってはなりません。これにより円が 6.28 回描画されるためです。サイズは「1 / theta_scale + 1」にする必要があります。したがって、theta_scale が 0.01 の場合は 100 ポイントを描画する必要があり、theta_scale が 0.1 の場合は 10 ポイントを描画する必要があります。そうしないと、それぞれ 62 回と 628 回描画されます。これが私が使用したコードです。

using UnityEngine;
using System.Collections;

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

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

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

ThetaScaleで割った「Size」の数値を変更すると、スイープゲージ・円グラフタイプのグラフィックが作れます。

于 2015-08-02T01:18:31.817 に答える
10

同様の質問については、Unity Answers を参照してください。

または:

float theta_scale = 0.1;  // Circle resolution

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 += theta_scale) {
    x = r*cos(theta);
    y = r*sin(theta);

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

LineRenderer には連続点が必要です。このコードを少し変更して、ライン レンダラーの代わりにシリンダー ゲーム オブジェクトを使用することができます。LineRenderer は少し厄介だと思います。

最後に、最初のリンクと同様に、円のテクスチャをユニット プレーンにアタッチできます。円の一部ではないテクスチャの部分を透明にします。次に、オブジェクトに合わせて平面をスケーリングして整列させます。残念ながら、この方法は、誰かが平面にほぼ平行に見える場合には適していません。

于 2012-12-04T20:18:32.817 に答える
0

円はシェーダーを使用して描画できます - 中心から半径上にある場合はピクセルを描画します。

于 2015-02-25T07:15:32.170 に答える