Я пытаюсь добавить BoxCollider и BoundingBox в GameObject, но когда я добавляю компонент BoundingBox, генерируется исключение NullReferenceException, которое ссылается на строку 395 объекта BoundsExtensions, которая, по-видимому, проверяет границы MeshCollider:
else if (collider is MeshCollider)
{
MeshCollider mc = collider as MeshCollider;
Bounds meshBounds = mc.sharedMesh.bounds; //<---failing here
meshBounds.GetCornerPositions(mc.transform, ref corners);
boundsPoints.AddRange(corners);
}
Я не уверен, почему он обнаружил, что коллайдер был типа MeshCollider, когда я четко добавил BoxCollider и установил параметры до этого. Вот мой код:
BoxCollider collider = part.EnsureComponent<BoxCollider>();
collider.center = info.colliderCenter; //colliderCenter is type Vector3
collider.size = info.colliderSize; //colliderSize is type Vector3
BoundingBox bb = part.EnsureComponent<BoundingBox>();
Немного предыстории: я создаю приложение hololens, где пользователь может подобрать объект, но затем он может разделить его и просмотреть отдельные компоненты, составляющие объект. и затем снова измените его, когда все будет готово, так что им снова можно манипулировать только одним объектом.
Чтобы разделить объект, я удаляю BoxCollider, BoundingBox, et c из родительского объекта, затем перебирайте дочерние объекты, пока не дойдете до тех, у которых есть me sh, а затем добавьте MeshCollider вместе с ManipulationHandler, NearInteractionGrabbable и Rigidbody.
Чтобы вернуть его обратно, я удаляю материал из дочерних элементов и добавьте BoxCollider, BoundingBox и др. c обратно к родителю.
Если вам нужен мой код, когда я удаляю материал из родительского и добавляю материал дочерним элементам и обратно, я могу опубликовать это.
Спасибо за помощь!