Я хочу использовать SpatialTapGesture < /code>, чтобы получить координату TAP Local для объекта. /p>
Код: Выделить всё
SpatialTapGesture(coordinateSpace: .local)
.targetedToAnyEntity()
.onEnded { tap in
let entity = tap.entity
// Converts from the local space of the View this gesture is attached to the local coordinate space of the Entity that was tapped.
let localPoint3D = tap.convert(tap.location3D, from: .local, to: entity)
// …
}
< /code>
Однако, согласно документам, функция конверта, по -видимому, существует только в Visionos, а не в iOS.
Итак, как я могу сделать это преобразование в iOS?
[b] edit: [/b]
Поскольку функция конвертирует
в некоторых случаях может потенциально использовать следующую функцию RealityViewCamerAcontent < /code>: < /p>
Код: Выделить всё
func unproject(
_ point: CGPoint,
from space: some CoordinateSpaceProtocol,
to realitySpace: some RealityCoordinateSpace,
ontoPlane: float4x4
) -> SIMD3?
< /code>
Docu говорит: < /p>
2D -точка в пространстве координат представления может ссылаться на любую точку вдоль
Сегмент линии в 3D -координатном пространстве. Неспроизводство получает 3D -положение точки точки вдоль этого линейного сегмента, которая пересекает плоскость
. Нарученная трехмерная позиция на вершине организации совета директоров, например, Плана.
я попытался использовать unproction < /code>, передав в плоскость, которая параллельна верхней части моей платы. < /p>
Вот мой код. Сначала я сохраняю RealityViewCamerAcontent
Код: Выделить всё
@State private var savedContent: RealityViewCameraContent?
Код: Выделить всё
SpatialTapGesture(coordinateSpace: .local)
.targetedToAnyEntity()
.onEnded { tap in
// Create the 4x4 matrix representing the plane
var planeMatrix = matrix_identity_float4x4
planeMatrix.columns.0 = SIMD4(1, 0, 0, 0) // x-axis
planeMatrix.columns.1 = SIMD4(0, 1, 0, 0) // y-axis (normal)
planeMatrix.columns.2 = SIMD4(0, 0, 1, 0) // z-axis
planeMatrix.columns.3 = SIMD4(0, 0, -3.4, 1) // Translation
guard let localPoint3D = savedContent?.unproject(tap.location,
from: .global,
to: .camera,
ontoPlane: planeMatrix) else {
return
}
print(localPoint3D)
}
, если я установил на на .scene , функция всегда возвращает Nil , Возможно, потому что у меня есть приложение без AR. Если я установите на на .camera , я получаю точку в 3D -пространстве, и эта точка зависит от того, где я нажимаю на экран. Тем не менее, значения координат всегда чрезвычайно малы, что-то вроде 1.0E-7, и я не понимаю, почему. Настройка из на .global и .local не имеет большого значения. Что -то не так с моим кодом?
Подробнее здесь: https://stackoverflow.com/questions/790 ... y-coordina