Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы SceneKit ссылка класса SCNPhysicsWorld

Опции
Развертывание Target:

На этой странице
Язык:

SCNPhysicsWorld

SCNPhysicsWorld объект моделирует коллизии и другие физические свойства в сцене. Вы не создаете SCNPhysicsWorld объекты непосредственно; вместо этого, читайте physicsWorld свойство SCNScene объект.

Используйте объект мира физики выполнить следующие задачи:

  • Управляйте глобальными свойствами моделирования, такими как его скорость и постоянная сила тяжести. (Для более точного управления силы тяжести и подобных эффектов, посмотрите SCNPhysicsField класс.)

  • Способы поведения регистра, изменяющие взаимодействия между организациями физики сцены, такими как соединения и механизмы. Для получения дополнительной информации посмотрите Ссылку класса SCNPhysicsBehavior.

  • Укажите объект делегата получить сообщения, когда две организации физики свяжутся друг с другом

  • Выполните определенные тесты контакта и ищите организации физики в сцене с помощью тестов развертки и луча.

Наследование


Оператор импорта


Swift

import SceneKit

Objective C

@import SceneKit;

Доступность


Доступный в OS X v10.10 и позже.
  • Вектор, указывающий гравитационное ускорение, применился к организациям физики в мире физики.

    Объявление

    Swift

    var gravity: SCNVector3

    Objective C

    @property(nonatomic) SCNVector3 gravity

    Обсуждение

    Компоненты этого вектора измеряются в метрах в секунду в секунду. Значение по умолчанию (0.0,-9.8,0.0).

    Это свойство применяет постоянное ускорение ко всем организациям физики в мире, моделируя эффект силы тяжести около поверхности Земли. Для более сложных эффектов силы тяжести, включая ограниченные области эффекта и силы, пропорциональной расстоянию, использование SCNPhysicsField класс. При использовании полей можно хотеть установить это свойство в нулевой вектор так, чтобы поля обеспечили все эффекты силы тяжести в мире физики.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • Уровень, на котором выполняется моделирование.

    Объявление

    Swift

    var speed: CGFloat

    Objective C

    @property(nonatomic) CGFloat speed

    Обсуждение

    Значение по умолчанию 1.0, что означает, что моделирование работает в нормальной скорости. Значение кроме значения по умолчанию изменяет уровень, на котором время передает на моделировании физики. Например, значение скорости 2.0 указывает то время в передачах моделирования физики дважды с такой скоростью, как время моделирования сцены. Значение 0.0 приостанавливает моделирование физики.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • такт такт Свойство

    Временной интервал между обновлениями к моделированию физики.

    Объявление

    Swift

    var timeStep: NSTimeInterval

    Objective 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 и позже.

    См. также

    contactDelegate

  • Добавляет поведение к миру физики.

    Объявление

    Swift

    func addBehavior(_ behavior: SCNPhysicsBehavior!)

    Objective C

    - (void)addBehavior:(SCNPhysicsBehavior *)behavior

    Параметры

    behavior

    Поведение, которое будет добавлено.

    Обсуждение

    Способы поведения физики ограничивают или изменяют эффекты моделирования физики на наборах организаций физики. Например, SCNPhysicsHingeJoint поведение заставляет две организации перемещаться как будто связанный стержнем что центры вокруг определенной оси, и SCNPhysicsVehicle поведение заставляет организацию прокручиваться как автомобиль или другой колесный механизм.

    Для использования поведения в сцене выполните эти шаги:

    1. Создать SCNPhysicsBody объекты и присоединяют их к каждому узлу, участвующему в поведении.

    2. Создайте и сконфигурируйте объект поведения присоединение к организациям физики. Посмотрите Ссылку класса SCNPhysicsBehavior для списка классов поведения.

    3. Вызвать addBehavior: на физике Вашей сцены мир возражают для добавления поведения к моделированию физики.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.10 и позже.

    См. также

    – removeBehavior:

  • Удаляет поведение из мира физики.

    Объявление

    Swift

    func removeBehavior(_ behavior: SCNPhysicsBehavior!)

    Objective C

    - (void)removeBehavior:(SCNPhysicsBehavior *)behavior

    Параметры

    behavior

    Поведение, которое будет удалено.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • Возвращает список организаций влияния способов поведения в мире физики.

    Объявление

    Swift

    func allBehaviors() -> [AnyObject]!

    Objective C

    - (NSArray *)allBehaviors

    Возвращаемое значение

    Массив 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!, andBody bodyB: SCNPhysicsBody!, options options: [NSObject : AnyObject]!) -> [AnyObject]!

    Objective C

    - (NSArray *)contactTestBetweenBody:(SCNPhysicsBody *)bodyA andBody:(SCNPhysicsBody *)bodyB options:(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!, options options: [NSObject : AnyObject]!) -> [AnyObject]!

    Objective C

    - (NSArray *)contactTestWithBody:(SCNPhysicsBody *)body options:(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, toPoint dest: SCNVector3, options options: [NSObject : AnyObject]!) -> [AnyObject]!

    Objective C

    - (NSArray *)rayTestWithSegmentFromPoint:(SCNVector3)origin toPoint:(SCNVector3)dest options:(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.position
    • toPoint:player.position
    • options: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 и позже.

  • Поиски организаций физики в пространстве, сформированном путем перемещения выпуклой формы через мир физики.

    Объявление

    Swift

    func convexSweepTestWithShape(_ shape: SCNPhysicsShape!, fromTransform from: SCNMatrix4, toTransform to: SCNMatrix4, options options: [NSObject : AnyObject]!) -> [AnyObject]!

    Objective C

    - (NSArray *)convexSweepTestWithShape:(SCNPhysicsShape *)shape fromTransform:(SCNMatrix4)from toTransform:(SCNMatrix4)to options:(NSDictionary *)options

    Параметры

    shape

    Форма физики. Эта форма должна включить выпуклый объем. Для получения дополнительной информации при создании форм, удовлетворяющих это требование, посмотрите Ссылку класса SCNPhysicsShape.

    from

    Матрица преобразования представление начальной позиции и ориентации формы.

    to

    Матрица преобразования представление заключительной позиции и ориентации формы.

    options

    Словарь опций, влияющих на тест, или nil использовать опции по умолчанию. Для применимых ключей и возможных значений, посмотрите Тестовые Ключи Опций Физики.

    Возвращаемое значение

    Массив SCNPhysicsContact объекты, описывающие любые контакты, которые произошли бы при перемещении формы физики через мир физики.

    Обсуждение

    Используйте этот метод, когда будет важно запланировать (или избежать) коллизии перед моделированием физики. Например, в игре Вы могли бы запланировать маневры летающий символ для адаптации через разрывы между статическими организациями в мире физики, как проиллюстрировано ниже:

    Swift

    • // Look for potential collisions along the spaceship's current path.
    • let current = spaceship.transform
    • let 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.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

    @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

    Константы

    • SCNPhysicsTestCollisionBitMaskKey

      SCNPhysicsTestCollisionBitMaskKey

      Ключ для выбора, который категории организаций физики, которые SceneKit должен протестировать на контакты.

      Значение для этого ключа NSNumber объект, содержащий NSUInteger значение. SceneKit тестирует на контакты только с организациями физики чей categoryBitMask свойство накладывается с этой битовой маской. Значение по умолчанию SCNPhysicsCollisionCategoryAll, указание, что поиски должны протестировать все организации физики независимо от своей категории.

      Доступный в OS X v10.10 и позже.

    • SCNPhysicsTestSearchModeKey

      SCNPhysicsTestSearchModeKey

      Ключ для выбора числа и порядка контактов, которые будут протестированы.

      Посмотрите Тестовые Режимы поиска Физики для возможных значений. Значение по умолчанию SCNPhysicsTestSearchModeAny.

      Этот ключ применяется только для излучения и выпуклые тесты развертки.

      Доступный в OS X v10.10 и позже.

    • SCNPhysicsTestBackfaceCullingKey

      SCNPhysicsTestBackfaceCullingKey

      Ключ для выбора, проигнорировать ли обращенные к задней стороне многоугольники в физике, формирует при поиске контактов.

      Значение для этого ключа 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

    Константы

    • SCNPhysicsTestSearchModeAny

      SCNPhysicsTestSearchModeAny

      Поиски должны возвратить только первый контакт, найденный независимо от его позиции относительно поисковых параметров.

      Доступный в OS X v10.10 и позже.

    • SCNPhysicsTestSearchModeClosest

      SCNPhysicsTestSearchModeClosest

      Поиски должны возвратить только самый близкий контакт началу поиска.

      Доступный в OS X v10.10 и позже.

    • SCNPhysicsTestSearchModeAll

      SCNPhysicsTestSearchModeAll

      Поиски должны возвратить все контакты, соответствующие поисковые параметры.

      Доступный в OS X v10.10 и позже.