SCNPhysicsWorld
SCNPhysicsWorld объект моделирует коллизии и другие физические свойства в сцене. Вы не создаете SCNPhysicsWorld объекты непосредственно; вместо этого, читайте physicsWorld свойство SCNScene объект.
Используйте объект мира физики выполнить следующие задачи:
Управляйте глобальными свойствами моделирования, такими как его скорость и постоянная сила тяжести. (Для более точного управления силы тяжести и подобных эффектов, посмотрите
SCNPhysicsFieldкласс.)Способы поведения регистра, изменяющие взаимодействия между организациями физики сцены, такими как соединения и механизмы. Для получения дополнительной информации посмотрите Ссылку класса SCNPhysicsBehavior.
Укажите объект делегата получить сообщения, когда две организации физики свяжутся друг с другом
Выполните определенные тесты контакта и ищите организации физики в сцене с помощью тестов развертки и луча.
Соответствует
-
AnyObject -
CVarArgType -
Сопоставимый -
Hashable -
NSCoding -
NSObjectProtocol -
NSSecureCoding -
Печатаемый -
NSObject -
NSSecureCoding
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в OS X v10.10 и позже.
-
сила тяжести сила тяжестиСвойствоВектор, указывающий гравитационное ускорение, применился к организациям физики в мире физики.
Обсуждение
Компоненты этого вектора измеряются в метрах в секунду в секунду. Значение по умолчанию
(0.0,-9.8,0.0).Это свойство применяет постоянное ускорение ко всем организациям физики в мире, моделируя эффект силы тяжести около поверхности Земли. Для более сложных эффектов силы тяжести, включая ограниченные области эффекта и силы, пропорциональной расстоянию, использование
SCNPhysicsFieldкласс. При использовании полей можно хотеть установить это свойство в нулевой вектор так, чтобы поля обеспечили все эффекты силы тяжести в мире физики.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Уровень, на котором выполняется моделирование.
Обсуждение
Значение по умолчанию
1.0, что означает, что моделирование работает в нормальной скорости. Значение кроме значения по умолчанию изменяет уровень, на котором время передает на моделировании физики. Например, значение скорости2.0указывает то время в передачах моделирования физики дважды с такой скоростью, как время моделирования сцены. Значение0.0приостанавливает моделирование физики.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Временной интервал между обновлениями к моделированию физики.
Объявление
Swift
var timeStep: NSTimeIntervalObjective C
@property(nonatomic) NSTimeInterval timeStepОбсуждение
SceneKit обрабатывает моделирование физики и обновляет состояние всех организаций физики один раз на временной интервал, указанный этим свойством. Значение по умолчанию является 1/60 секундой (уровень 60 Гц).
Более быстрый уровень моделирования обеспечивает больше точности в результатах моделирования — таких как коллизии между стремительными объектами — но в более высокой стоимости в процессорное время (который может поочередно замедлить частоту кадров рендеринга Вашего приложения). Как правило, необходимо установить это свойство для соответствия цели, представляющей частоту кадров (как определено
preferredFramesPerSecondсвойствоSCNViewобъект, представляющий Вашу сцену).Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Вынуждает механизм физики переоценить возможные коллизии между организациями физики.
Объявление
Swift
func updateCollisionPairs()Objective C
- (void)updateCollisionPairsОбсуждение
По умолчанию SceneKit проверяет на коллизии между организациями физики только один раз на шаг моделирования. Если Вы непосредственно меняете положения каких-либо организаций физики за пределами a
SCNPhysicsContactDelegateметод, вызовитеupdateCollisionPairsметод перед использованием любого из методов, перечисленных в Поиск организаций физики Обнаружение контактов между организациями физики.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
См. также
-
Добавляет поведение к миру физики.
Объявление
Swift
func addBehavior(_behavior: SCNPhysicsBehavior!)Objective C
- (void)addBehavior:(SCNPhysicsBehavior *)behaviorПараметры
behaviorПоведение, которое будет добавлено.
Обсуждение
Способы поведения физики ограничивают или изменяют эффекты моделирования физики на наборах организаций физики. Например,
SCNPhysicsHingeJointповедение заставляет две организации перемещаться как будто связанный стержнем что центры вокруг определенной оси, иSCNPhysicsVehicleповедение заставляет организацию прокручиваться как автомобиль или другой колесный механизм.Для использования поведения в сцене выполните эти шаги:
Создать
SCNPhysicsBodyобъекты и присоединяют их к каждому узлу, участвующему в поведении.Создайте и сконфигурируйте объект поведения присоединение к организациям физики. Посмотрите Ссылку класса SCNPhysicsBehavior для списка классов поведения.
Вызвать
addBehavior:на физике Вашей сцены мир возражают для добавления поведения к моделированию физики.
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
См. также
-
Удаляет поведение из мира физики.
Объявление
Swift
func removeBehavior(_behavior: SCNPhysicsBehavior!)Objective C
- (void)removeBehavior:(SCNPhysicsBehavior *)behaviorПараметры
behaviorПоведение, которое будет удалено.
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
См. также
-
Возвращает список организаций влияния способов поведения в мире физики.
Возвращаемое значение
Массив
SCNPhysicsBehaviorобъекты.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
См. также
-
Удаляет все организации влияния способов поведения в мире физики.
Объявление
Swift
func removeAllBehaviors()Objective C
- (void)removeAllBehaviorsОператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
См. также
-
contactDelegate contactDelegateСвойствоДелегат, которого вызывают, когда две организации физики вступают в контакт друг с другом.
Объявление
Swift
unowned(unsafe) var contactDelegate: SCNPhysicsContactDelegate!Objective C
@property(atomic, assign) id< SCNPhysicsContactDelegate > contactDelegateОбсуждение
Когда два перекрытия организаций физики и одна из организаций физики имеют a, контакт создается
collisionBitMaskсвойство, накладывающееся с другой организациейcategoryBitMaskсвойство.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Проверки на контакты между двумя организациями физики.
Объявление
Swift
func contactTestBetweenBody(_bodyA: SCNPhysicsBody!, andBodybodyB: SCNPhysicsBody!, optionsoptions: [NSObject : AnyObject]!) -> [AnyObject]!Objective C
- (NSArray *)contactTestBetweenBody:(SCNPhysicsBody *)bodyAandBody:(SCNPhysicsBody *)bodyBoptions:(NSDictionary *)optionsПараметры
bodyAПервая организация (для тестирования на контакт со вторым).
bodyBВторая организация (для тестирования на контакт с первым).
optionsСловарь опций, влияющих на тест, или
nilиспользовать опции по умолчанию. Для применимых ключей и возможных значений, посмотрите Тестовые Ключи Опций Физики.Возвращаемое значение
Массив
SCNPhysicsContactобъекты, описывающие контакты между этими двумя организациями, илиnilесли организации не находятся в контакте.Обсуждение
SceneKit отправляет сообщения в физику, в мире
contactDelegateвозразите только, когда коллизии произойдут между организациями чейcollisionBitMaskиcategoryBitMaskперекрытие свойств, и только для коллизий между определенными типами организаций. (Для получения дополнительной информации посмотритеPhysics Body Types.) Используют этот метод для прямого тестирования на контакты между любыми двумя организациями во время выбора. Например, для реализации игры, где персонаж может взять элемент Вы могли бы вызвать этот метод, когда проигрыватель нажимает кнопку «погрузки», чтобы видеть, находится ли персонаж в контакте с элементом, который будет взят.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Проверки на контакты между одной организацией физики и любыми другими организациями в мире физики.
Объявление
Swift
func contactTestWithBody(_body: SCNPhysicsBody!, optionsoptions: [NSObject : AnyObject]!) -> [AnyObject]!Objective C
- (NSArray *)contactTestWithBody:(SCNPhysicsBody *)bodyoptions:(NSDictionary *)optionsПараметры
bodyОрганизация для тестирования на контакт.
optionsСловарь опций, влияющих на тест, или
nilиспользовать опции по умолчанию. Для применимых ключей и возможных значений, посмотрите Тестовые Ключи Опций Физики.Возвращаемое значение
Массив
SCNPhysicsContactобъекты, описывающие контакты между указанной организацией и любыми другими, илиnilесли организация не находится в контакте ни с какими другими организациями.Обсуждение
SceneKit отправляет сообщения в физику, которой contactdelegate в мире возражают только, когда коллизии происходят между организациями чей
collisionBitMaskиcategoryBitMaskперекрытие свойств, и только для коллизий между определенными типами организаций. (Для получения дополнительной информации посмотритеPhysics Body Types.) Используют этот метод для прямого тестирования на все контакты между одной организацией и любыми другими организациями во время выбора. Например, для реализации игры со “стеной переходят” эффект, Вы могли вызвать этот метод, когда проигрыватель нажимает кнопку перехода, чтобы видеть, находится ли персонаж в контакте с какими-либо стенами.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Поиски организаций физики вдоль линейного сегмента между двумя точками в мире физики.
Объявление
Swift
func rayTestWithSegmentFromPoint(_origin: SCNVector3, toPointdest: SCNVector3, optionsoptions: [NSObject : AnyObject]!) -> [AnyObject]!Objective C
- (NSArray *)rayTestWithSegmentFromPoint:(SCNVector3)origintoPoint:(SCNVector3)destoptions:(NSDictionary *)optionsПараметры
originКонечная точка линейного сегмента для поиска, указанный в системе мировой координаты сцены.
destДругая конечная точка линейного сегмента для поиска, указанный в системе мировой координаты сцены.
optionsСловарь опций, влияющих на тест, или
nilиспользовать опции по умолчанию. Для применимых ключей и возможных значений, посмотрите Тестовые Ключи Опций Физики.Возвращаемое значение
Массив
SCNHitTestResultобъекты, описывающие результаты поиска.Обсуждение
Используйте этот метод для реализации понятий, таких как угол обзора в приложении. Например, в игре Вы могли бы реализовать поведение для вражеского символа путем поиска организаций физики вдоль строки между позицией вражеского символа и позицией персонажа, как проиллюстрировано ниже:
Swift
// Options: Look only for the closest object along line of sight,// and use the collision bitmask to avoid finding the enemy itself.let options = [ SCNPhysicsTestSearchModeKey: SCNPhysicsTestSearchModeClosest,SCNPhysicsTestCollisionBitMaskKey: MyCategory.Player.toRaw() ]let results = physicsWorld.rayTestWithSegmentFromPoint(enemy.position, toPoint: player.position, options: options) as [SCNHitTestResult]if results.count > 0 && results[0].node == player {// Enemy can see player: begin pursuit.} else {// Enemy cannot see player: remain idle.}
Objective C
// Options: Look only for the closest object along line of sight,// and use the collision bitmask to avoid finding the enemy itself.NSDictionary *options = @{ SCNPhysicsTestSearchModeKey : SCNPhysicsTestSearchModeClosest,SCNPhysicsTestCollisionBitMaskKey : @(kMyCategoryPlayer) };NSArray *results = [physicsWorld rayTestWithSegmentFromPoint:enemy.positiontoPoint:player.positionoptions:options];if (results.firstObject.node == player) {// Enemy can see player: begin pursuit.} else {// Enemy cannot see player: remain idle.}
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
convexSweepTestWithShape (_: fromTransform:toTransform:options:) - convexSweepTestWithShape:fromTransform:toTransform:options:Поиски организаций физики в пространстве, сформированном путем перемещения выпуклой формы через мир физики.
Объявление
Swift
func convexSweepTestWithShape(_shape: SCNPhysicsShape!, fromTransformfrom: SCNMatrix4, toTransformto: SCNMatrix4, optionsoptions: [NSObject : AnyObject]!) -> [AnyObject]!Objective C
- (NSArray *)convexSweepTestWithShape:(SCNPhysicsShape *)shapefromTransform:(SCNMatrix4)fromtoTransform:(SCNMatrix4)tooptions:(NSDictionary *)optionsПараметры
shapeФорма физики. Эта форма должна включить выпуклый объем. Для получения дополнительной информации при создании форм, удовлетворяющих это требование, посмотрите Ссылку класса SCNPhysicsShape.
fromМатрица преобразования представление начальной позиции и ориентации формы.
toМатрица преобразования представление заключительной позиции и ориентации формы.
optionsСловарь опций, влияющих на тест, или
nilиспользовать опции по умолчанию. Для применимых ключей и возможных значений, посмотрите Тестовые Ключи Опций Физики.Возвращаемое значение
Массив
SCNPhysicsContactобъекты, описывающие любые контакты, которые произошли бы при перемещении формы физики через мир физики.Обсуждение
Используйте этот метод, когда будет важно запланировать (или избежать) коллизии перед моделированием физики. Например, в игре Вы могли бы запланировать маневры летающий символ для адаптации через разрывы между статическими организациями в мире физики, как проиллюстрировано ниже:
Swift
// Look for potential collisions along the spaceship's current path.let current = spaceship.transformlet upAhead = SCNMatrix4Translate(current, 0, 0, lookAheadDistance)let contacts = physicsWorld.convexSweepTestWithShape(spaceship.physicsBody.physicsShape, fromTransform: current, toTransform: upAhead, options: nil)if contacts.count == 0 {// Flight path looks okay.} else {// Flight path will cause a collision: look for another way around.}
Objective C
// Look for potential collisions along the spaceship's current path.SCNMatrix4 current = spaceship.transform;SCNMatrix4 upAhead = SCNMatrix4Translate(current, 0, 0, LOOK_AHEAD_DISTANCE);NSArray *contacts = [physicsWorld convexSweepTestWithShape:spaceship.physicsBody.physicsShapefromTransform:currenttoTransform:upAheadoptions:nil];if (contacts.count == 0) {// Flight path looks okay.} else {// Flight path will cause a collision: look for another way around.}
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Ключи в словарях опций, влияющих, как SceneKit ищет организации в коллизии, луче или тесте развертки.
Объявление
Swift
let SCNPhysicsTestCollisionBitMaskKey: NSString! let SCNPhysicsTestSearchModeKey: NSString! let SCNPhysicsTestBackfaceCullingKey: NSString!Objective C
NSString * const SCNPhysicsTestCollisionBitMaskKey NSString * const SCNPhysicsTestSearchModeKey NSString * const SCNPhysicsTestBackfaceCullingKeyКонстанты
-
SCNPhysicsTestCollisionBitMaskKeySCNPhysicsTestCollisionBitMaskKeyКлюч для выбора, который категории организаций физики, которые SceneKit должен протестировать на контакты.
Значение для этого ключа
NSNumberобъект, содержащийNSUIntegerзначение. SceneKit тестирует на контакты только с организациями физики чейcategoryBitMaskсвойство накладывается с этой битовой маской. Значение по умолчаниюSCNPhysicsCollisionCategoryAll, указание, что поиски должны протестировать все организации физики независимо от своей категории.Доступный в OS X v10.10 и позже.
-
SCNPhysicsTestSearchModeKeySCNPhysicsTestSearchModeKeyКлюч для выбора числа и порядка контактов, которые будут протестированы.
Посмотрите Тестовые Режимы поиска Физики для возможных значений. Значение по умолчанию
SCNPhysicsTestSearchModeAny.Этот ключ применяется только для излучения и выпуклые тесты развертки.
Доступный в OS X v10.10 и позже.
-
SCNPhysicsTestBackfaceCullingKeySCNPhysicsTestBackfaceCullingKeyКлюч для выбора, проигнорировать ли обращенные к задней стороне многоугольники в физике, формирует при поиске контактов.
Значение для этого ключа
NSNumberобъект, содержащий булево значение. Значение по умолчаниюYEStrue, указание, что поиск должен только возвратить контакты с внешними поверхностями любых форм физики. Измените значение наNOfalseрассматривать контакты и с внутренними и с внешними поверхностями.Этот ключ применяется только для излучения и выпуклые тесты развертки, и только к формам физики, создаваемым с помощью
SCNPhysicsShapeTypeConcavePolyhedronопция.Доступный в OS X v10.10 и позже.
Обсуждение
Передайте словарь, содержащий один или больше этих ключей (со значениями, как описано выше) для
optionsпараметр при вызове одного из этих методов: -
-
Влияние опций, как SceneKit ищет организации в коллизии, луче или тесте развертки, используемом с
SCNPhysicsTestSearchModeKeyключ.Объявление
Swift
let SCNPhysicsTestSearchModeAny: NSString! let SCNPhysicsTestSearchModeClosest: NSString! let SCNPhysicsTestSearchModeAll: NSString!Objective C
NSString * const SCNPhysicsTestSearchModeAny NSString * const SCNPhysicsTestSearchModeClosest NSString * const SCNPhysicsTestSearchModeAllКонстанты
-
SCNPhysicsTestSearchModeAnySCNPhysicsTestSearchModeAnyПоиски должны возвратить только первый контакт, найденный независимо от его позиции относительно поисковых параметров.
Доступный в OS X v10.10 и позже.
-
SCNPhysicsTestSearchModeClosestSCNPhysicsTestSearchModeClosestПоиски должны возвратить только самый близкий контакт началу поиска.
Доступный в OS X v10.10 и позже.
-
SCNPhysicsTestSearchModeAllSCNPhysicsTestSearchModeAllПоиски должны возвратить все контакты, соответствующие поисковые параметры.
Доступный в OS X v10.10 и позже.
-
