Jak narysować koło w Unity 3d? Chcę narysować okrąg wokół innego obiektu. Promienie okręgów są różne, a kółko ma teksturę - kwadraty.Jak mogę narysować okrąg w Unity3D?
Odpowiedz
See Unity Answers za podobne pytanie.
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 wymaga ciągłych punktów. Możesz nieznacznie zmodyfikować ten kod, aby użyć obiektów gier cylindrowych zamiast renderera liniowego. Uważam, że LineRenderer jest trochę odrażający.
Wreszcie, podobnie jak przy pierwszym łączu, można dołączyć teksturę koła do płaszczyzny jednostki. Niech jakakolwiek część tekstury, która nie jest częścią koła, będzie przezroczysta. Następnie przeskaluj i wyrównaj płaszczyznę, aby pasowała do twojego obiektu. Niestety ta metoda nie jest świetna, jeśli ktoś wygląda prawie równolegle do samolotu.
Okrąg można rysować za pomocą modułu cieniującego - narysuj piksel, jeśli jest on w promieniu od środka.
Rozwiązanie firmy Jerdak jest dobre, ale kod jest brudny, więc musiałem trochę poprawić. Oto kod dla klasy, w której używam i w pętli, aby uniknąć błędu.
Uaktualnia także pozycję koła z pozycją 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);
}
}
}
Znalazłem duży błąd z tym kodem. Liczba punktów (rozmiar) nie powinna wynosić "(2 * pi/theta_scale) + 1", ponieważ powoduje to, że okrąg rysuje się 6,28 razy. Rozmiar powinien wynosić "1/theta_scale + 1". Tak więc dla theta_scale wynoszącego 0,01 musi on narysować 100 punktów, a dla theta_scale 0.1 musi pobrać 10 punktów. W przeciwnym razie wynosiłoby to 62 razy i 628 razy, odpowiednio. Oto kod, którego użyłem.
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));
}
}
}
Jeśli zmodyfikować numer w „Format”, która jest podzielona przez ThetaScale, można dokonać zamiatanie miernik/pie typu wykres graficzny.
Wykonano następujące czynności przy użyciu Sprite. Chan leci na scenie, więc znajduje się nieco ponad samolotem. Miałem ją latać, więc mogłem uzyskać dobry zrzut ekranu, nie dlatego, że nie grałoby dobrze z samolotem.
Użyłem sprite okręgu niskiej rozdzielczości. Obrót X 90 Skala X 15, Y 15, Z 1
Następnie ustawiam warstwę sortowania, aby była renderowana powyżej domyślnej warstwy. Testowałem to, kiedy natknąłem się na ten post. Nie radzi sobie dobrze z cieniami. Musiałbym dowiedzieć się, na czym polegają cienie warstw, aby upewnić się, że są one renderowane na ikonce.
- 1. Jak narysować okrąg w szybkim użyciu spriteKit?
- 2. Jak narysować okrąg z przezroczystym środkowym
- 3. Jak narysować elipsę lub okrąg odręczny?
- 4. Jak zainicjować UIBezierPath, aby narysować okrąg w szybkim tempie?
- 5. Jak narysować okrąg i linię w skrzynce obrazkowej?
- 6. Jak narysować okrąg z wyśrodkowanymi gradientami z płótnem HTML5?
- 7. narysować okrąg o promieniu 1000m wokół lokalizacji użytkowników w MKMapView
- 8. Jak mogę użyć Clojure-CLR na Unity3d?
- 9. Jak wyświetlić okrąg w GMSMapView
- 10. Dodaj okrąg do ggmap
- 11. Rysuj okrąg wypełniony poziomo w Androidzie
- 12. Jak mogę narysować schemat za pomocą LaTeX?
- 13. as3: narysuj okrąg z otworem w nim używając actionscript
- 14. Jak utworzyć okrąg z numerem?
- 15. Narysuj okrąg o ggplot2
- 16. Jak narysować koło w img przy użyciu php?
- 17. Rozmieszczanie Unity3D w Windows Azure
- 18. Jak przesunąć okrąg w tablicy 4 znaków?
- 19. Wstępne ładowanie tekstur w unity3d
- 20. Narysuj okrąg (bez cieniowania) za pomocą Three.js
- 21. Uruchamianie serwera REST w Unity3d
- 22. Narysuj okrąg na widoku (Android)
- 23. Narysuj okrąg w Tkinter (Python)
- 24. Jak narysować świece w C#
- 25. Jak narysować wykres w PHP?
- 26. Jak mogę narysować "miękką" linię w WPF (przypuszczalnie używając LinearGradientBrush)?
- 27. Jak mogę narysować wiele kostek 3D w Matlab
- 28. Jak mogę narysować ciąg znaków bez marginesów w widoku?
- 29. Jak narysować połączenie w Dia?
- 30. Jak dodać okrąg jako promień wokół adnotacji
ta powinna być prawidłowa odpowiedź, ponieważ kod @ Jerdak czerpie tyle niepotrzebnych linii, ale ten kod tylko raz przechodzi przez każdy kąt i rysuje w jednym przejściu. Trzeba jednak pamiętać, że dla linii imperforate powinieneś zrobić to zamiast: 'Size = (int) ((1f/ThetaScale) + 2f)' –