Создание UnityEngine.Plane из плоскости UnityEngine.GameObject - PullRequest
0 голосов
/ 04 декабря 2018

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

Но в коде мне нужно UnityEngine.Plane, а не UnityEngine.Gameobject.

Я узнал, что не могу сделать GetComponent<>(), потому что Planeструктура, а не компонент.

Но как мне преобразовать плоскость Gameobject, которую я имею, в UnityEngine.Plane или создать новую плоскость с этим?

Я нашел это , но я не знаю, как это мне поможет.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вы правы, Plane примитив - это не то же самое, что Plane the struct.

Чтобы создать UnityEngine.Plane, используйте его конструктор https://docs.unity3d.com/ScriptReference/Plane-ctor.html

В простейшем случае он выглядиткак это

Plane plane=new Plane(Vector3.up, Vector3.zero);

Вверх означает нормальный вектор плоскости (в этом случае я предполагаю, что вы хотите, чтобы плоскость была горизонтальной, поэтому «смотря вверх», второй вектор - это точка, через которую плоскостьдолжен пройти (в этом случае ноль, так как я предположил, что вы хотите, чтобы самолет был на одном уровне с землей).

0 голосов
/ 04 декабря 2018

Я думаю, вы неправильно поняли, что такое UnityEngine.Plane.

Из Документация Unity :

Представление плоскости в трехмерном пространстве.

Так же, как Vector3 или Quaternion, это не примитивная сетка и вовсе не 3D-сетка.Вы не можете преобразовать свой Plane GameObject в эту структуру.

Что вы можете сделать, так это создать представление вашей плоской сетки, чтобы выполнить с ней некоторые вычисления.Но вы не сможете создать новую плоскость с ней.

Если вы хотите создать плоскость, представляющую ваш план GameObject, вы можете вызвать конструктор UnityEngine.Plane с некоторыми данными из вашего * 1016.* и MeshFilter вашего Плоского GameObject.

var filter = GetComponent<MeshFilter>();
Vector3 normal;

if(filter && filter.mesh.normals.Length > 0)
    normal = filter.transform.TransformDirection(filter.mesh.normals[0]);

var plane = new Plane(normal, transform.position);

Это должно дать вам плоскостное представление вашего плоского GameObject, смотрящего в том же направлении и проходящего через положение вашей плоскости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...