RealityKit——旋转一个实体会影响它的比例
RealityKit – Rotating an Entity affects its Scale
我正在使用 USDZ 文件加载实体。我想在加载实体后,我想永远旋转。我正在使用以下代码。
cancellable = ModelEntity.loadAsync(named: "toy_drummer").sink { [weak self] completion in
if case let .failure(error) = completion {
print("Unable to load model \(error)")
}
self?.cancellable?.cancel()
} receiveValue: { entity in
anchor.addChild(entity)
arView.scene.addAnchor(anchor)
let rotation = Transform(pitch: 0, yaw: .pi, roll: 0)
entity.move(to: rotation,
relativeTo: nil,
duration: 15.0,
timingFunction: .linear)
}
实体没有正确旋转,而是在缩放并变得越来越大。有什么想法吗?
您需要一个起始变换“点”和一个结束变换“点”。如果 referenceEntity
(relativeTo) 参数的值等于 nil
,则表示 relative to world space
。由于旋转值和缩放使用相同的4x4 matrix槽,当模型旋转时,它的比例也会同时改变,如果比例有差异的话。
perpetual transform animation 使用一些 RealityKit 2.0 技巧。
Max Frazer 的 RealityUI
也很酷。
这是您的代码的正确版本:
import UIKit
import RealityKit
import Combine
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
var cancellable: Cancellable? = nil
let anchor = AnchorEntity()
override func viewDidLoad() {
super.viewDidLoad()
cancellable = ModelEntity.loadAsync(named: "drummer.usdz").sink { _ in
self.cancellable?.cancel()
} receiveValue: { entity in
self.anchor.addChild(entity)
self.arView.scene.addAnchor(self.anchor)
let rotation = Transform(pitch: 0, yaw: .pi, roll: 0)
entity.move(to: rotation,
relativeTo: entity,
duration: 5.0,
timingFunction: .linear)
}
}
}
几年前我做了一个 swift 包,RealityUI,它确实包括像连续旋转这样的动画:
https://github.com/maxxfrazer/RealityUI/wiki/Animations#spin
您只需要包含包,然后调用:
entity.ruiSpin(by: [0, 1, 0], period: 1)
我正在使用 USDZ 文件加载实体。我想在加载实体后,我想永远旋转。我正在使用以下代码。
cancellable = ModelEntity.loadAsync(named: "toy_drummer").sink { [weak self] completion in
if case let .failure(error) = completion {
print("Unable to load model \(error)")
}
self?.cancellable?.cancel()
} receiveValue: { entity in
anchor.addChild(entity)
arView.scene.addAnchor(anchor)
let rotation = Transform(pitch: 0, yaw: .pi, roll: 0)
entity.move(to: rotation,
relativeTo: nil,
duration: 15.0,
timingFunction: .linear)
}
实体没有正确旋转,而是在缩放并变得越来越大。有什么想法吗?
您需要一个起始变换“点”和一个结束变换“点”。如果 referenceEntity
(relativeTo) 参数的值等于 nil
,则表示 relative to world space
。由于旋转值和缩放使用相同的4x4 matrix槽,当模型旋转时,它的比例也会同时改变,如果比例有差异的话。
perpetual transform animation 使用一些 RealityKit 2.0 技巧。
Max Frazer 的 RealityUI
也很酷。
这是您的代码的正确版本:
import UIKit
import RealityKit
import Combine
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
var cancellable: Cancellable? = nil
let anchor = AnchorEntity()
override func viewDidLoad() {
super.viewDidLoad()
cancellable = ModelEntity.loadAsync(named: "drummer.usdz").sink { _ in
self.cancellable?.cancel()
} receiveValue: { entity in
self.anchor.addChild(entity)
self.arView.scene.addAnchor(self.anchor)
let rotation = Transform(pitch: 0, yaw: .pi, roll: 0)
entity.move(to: rotation,
relativeTo: entity,
duration: 5.0,
timingFunction: .linear)
}
}
}
几年前我做了一个 swift 包,RealityUI,它确实包括像连续旋转这样的动画:
https://github.com/maxxfrazer/RealityUI/wiki/Animations#spin
您只需要包含包,然后调用:
entity.ruiSpin(by: [0, 1, 0], period: 1)