2015-11-09 5 views
2

Я пытаюсь объединить единство для проекта, в котором я нахожусь.Рисунок 3D-многоугольник на единстве 3d

Я пытаюсь нарисовать 3D-многоугольник из набора координат, который у меня есть.

Так что я делаю сейчас, это построить ряд кубов между двумя точками. Я планирую построить эти точки в виде сплошной формы или просто «стены», чтобы сформировать комнату. Однако, похоже, что он работает не так, как ожидалось. Пожалуйста, порекомендуйте.

drawCube(Vector3(10,0,14),Vector3(70,0,14)); 
drawCube(Vector3(90,0,14),Vector3(60,87,45)); 

function drawCube(v1,v2) { 



pA = v1; 
pB = v2; 
var plane : GameObject = GameObject.CreatePrimitive(PrimitiveType.Cube); 

var between:Vector3 = pB - pA; 
    var distance:float = between.magnitude; 
plane.transform.localScale.x = distance; 
plane.transform.localScale.y=10; 
plane.transform.position = pA + (between/2.0); 
plane.transform.LookAt(pB); 

} 

обновлено: Я также пробовал использовать сетку, но все, что я получил, было изображением внизу. Что я делаю не так?

[! [Введите описание изображения здесь] [2]] [2]

Я пытаюсь добиться чего-то вроде этого

enter image description here

+0

Не было бы лучше построить сетку с этими точками? Btw. почему вы используете Cubes для создания треугольников? Или я что-то ошибаюсь? – AntiHeadshot

+0

Я пробовал использовать сетку, но все, что я получаю, это плоское изображение. я не знаю, как превратить его в 3D-объект. пожалуйста, дайте мне прямо, что я могу изучить. И для сетки я должен определить как точки вектора3, так и треугольники для правильной формы? – user2760642

+0

Ваш рисунок показывает 2D-изображение, какую форму вы хотите получить? Теоретически вам нужно только определить треугольники, но для их создания вам нужны точки. – AntiHeadshot

ответ

1

Вы могли бы сделать примитивы и манипулировать им, но это будет ограничьте вас, если вам нужно масштабировать или изменить свои требования в будущем. Я бы рекомендовал использовать процедурные сетки для создания необходимой вам геометрии по мере необходимости. Основы не слишком сложны, это всего лишь вопрос о создании объекта Mesh из его базовых компонентов с учетом некоторых вершин. Вот пример построения 3d-четырехугольника:

using UnityEngine; 
using System.Collections.Generic; 

public class SquareMaker : MonoBehaviour { 

    public List<Vector3> points; 

    void Start() 
    { 
    GameObject threeDSquare = new GameObject("3DSquare"); 
    threeDSquare.AddComponent<MeshRenderer>(); 
    threeDSquare.AddComponent<MeshFilter>(); 
    threeDSquare.GetComponent<MeshFilter>().mesh = CreateMesh(points); 
    } 

    private Mesh CreateMesh(List<Vector3> points) 
    { 
    List<int> tris = new List<int>(); // Every 3 ints represents a triangle 
    List<Vector2> uvs = new List<Vector2>(); // Vertex position in 0-1 UV space 
    /* 4 points in the list for the square made of two triangles: 
    0 *--* 1 
     | /| 
     |/ | 
    3 *--* 2 
    */ 
    tris.Add(1); 
    tris.Add(2); 
    tris.Add(3); 
    tris.Add(3); 
    tris.Add(0); 
    tris.Add(1); 
    // uvs determine vert (point) coordinates in uv space 
    uvs.Add(new Vector2(0f, 1f)); 
    uvs.Add(new Vector2(1f, 1f)); 
    uvs.Add(new Vector2(1f, 0f)); 
    uvs.Add(new Vector2(0f, 0f)); 

    Mesh mesh = new Mesh(); 
    mesh.vertices = points.ToArray(); 
    mesh.uv = uvs.ToArray(); 
    mesh.triangles = tris.ToArray(); 
    mesh.RecalculateNormals(); 
    return mesh; 
    } 
}