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: 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 и позже.
См. также
-
Добавляет поведение к миру физики.
Объявление
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 *)
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!, optionsoptions
: [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, toPointdest
: SCNVector3, optionsoptions
: [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 и позже.
-
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 *)
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
объект, содержащий булево значение. Значение по умолчаниюYES
true
, указание, что поиск должен только возвратить контакты с внешними поверхностями любых форм физики. Измените значение наNO
false
рассматривать контакты и с внутренними и с внешними поверхностями.Этот ключ применяется только для излучения и выпуклые тесты развертки, и только к формам физики, создаваемым с помощью
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 и позже.
-