如何在Unity 3D中繪製圓形? 我想圍繞不同的對象繪製圓。 圓的半徑不同,圓有紋理 - 正方形。如何在Unity3D中繪製圓圈?
8
A
回答
7
See Unity Answers對於類似的問題。
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分割數,就可以使掃計/餅圖類型的圖形。
0
相關問題
- 1. 如何在圓圈內繪製圓形?
- 2. 如何在android中繪製圓圈?
- 3. 如何在gnuplot中繪製圓圈
- 4. 如何在cocos2dx中繪製圓圈
- 5. 在C++中繪製圓圈
- 6. 在android中繪製圓圈
- 7. 在MATLAB中繪製圓圈
- 8. 繪製圓圈vhdl
- 9. 如何在圓圈上繪製圖像
- 10. 如何在XML中的實心圓圈內繪製小圓圈/圓點?
- 11. 在Winform外繪製圓圈
- 12. 動畫 - 在iOS中繪製圓圈 - 未完成圓圈動畫
- 13. 如何用x標記繪製圓圈?
- 14. 在CCRenderTexture中繪製抗鋸齒圓圈
- 15. 繪製圓圈並存儲在UIImage中
- 16. 在畫布中心繪製圓圈
- 17. 在桌面中間繪製圓圈
- 18. 在iPhone中幫助繪製圓圈
- 19. 在directx中繪製一個圓圈9
- 20. 在XNA中繪製簡單的圓圈
- 21. 在openGL中用Android繪製圓圈
- 22. 在android中繪製圓圈的XML
- 23. 用php繪製圓圈imagemagick
- 24. 用圓圈繪製形狀
- 25. 繪製移動圓圈
- 26. 繪製圓圈的Mapkit
- 27. Swing無法繪製圓圈
- 28. 繪製多個圓圈
- 29. 繪製隨機圓圈
- 30. 如何限制在Fabricjs中自由繪製圓圈?
這應該是正確的答案,因爲@ Jerdak的代碼,吸引這麼多不必要的行,但是這個代碼只穿過一次,在單次繪製每個角落。雖然,請注意,對於無孔線,您應該這樣做:'Size =(int)((1f/ThetaScale)+ 2f)' – 2015-12-30 17:11:47