Unity 3dで円を描くには? さまざまなオブジェクトの周りに円を描きたいです。円の半径は異なり、円にはテクスチャ (正方形) があります。
9 に答える
このコードに大きなエラーが見つかりました。ポイントの数 (サイズ) は "(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」の数値を変更すると、スイープゲージ・円グラフタイプのグラフィックが作れます。
同様の質問については、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 は少し厄介だと思います。
最後に、最初のリンクと同様に、円のテクスチャをユニット プレーンにアタッチできます。円の一部ではないテクスチャの部分を透明にします。次に、オブジェクトに合わせて平面をスケーリングして整列させます。残念ながら、この方法は、誰かが平面にほぼ平行に見える場合には適していません。
円はシェーダーを使用して描画できます - 中心から半径上にある場合はピクセルを描画します。