在 RealityKit 中导入多个 .usdz 对象并为其设置动画
Importing and animating multiple .usdz objects in RealityKit
我有一个简单的 RealityKit 场景,它显示了一头 .USDZ 奶牛。我看到了这些问题的几个答案,但我无法将它们实现到我的代码中:
- 如何播放此文件中内置的动画?
- 我如何才能将第二个对象(比如说一匹马)带入场景?
此外,我可以做些什么来清理我的代码/使其更易于阅读?
我很感激能得到的任何帮助!
谢谢,
import UIKit
import RealityKit
import ARKit
class WelcomeViewController: UIViewController {
//delay app launch to show splash screen
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Thread.sleep(forTimeInterval: 3.0)
// Override point for customization after application launch.
return true
}
//end splash screen delay
@IBAction func gotPressed(_ sender: Any) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let viewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as? ViewController {
self.present(viewController, animated: true, completion: nil) /// present the view controller (the one with the ARKit)!
} }
}
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
overlayCoachingView()
}
//Overlay coaching view "adjust iphone scan"
func overlayCoachingView () {
let coachingView = ARCoachingOverlayView(frame: CGRect(x: 0, y: 0, width: arView.frame.width, height: arView.frame.height))
coachingView.session = arView.session
coachingView.activatesAutomatically = true
coachingView.goal = .horizontalPlane
view.addSubview(coachingView)
}//end overlay
{
let cow = try! ModelEntity.load(named: "COW_ANIMATIONS")
let horse = try! ModelEntity.load(named: "White_Horse")
cow.position.x = -1.0
horse.position.x = 1.0
let anchor = AnchorEntity()
cow.setParent(anchor)
horse.setParent(anchor)
arView.scene.anchors.append(anchor)
let cowAnimationResource = cow.availableAnimations[0]
let horseAnimationResource = horse.availableAnimations[0]
cow.playAnimation(cowAnimationResource.repeat(duration: .infinity),
transitionDuration: 1.25,
startsPaused: false)
horse.playAnimation(horseAnimationResource.repeat(duration: .infinity),
transitionDuration: 0.75,
startsPaused: false)}
}
在 RealityKit API 中播放包含在 .usdz
文件中的动画,您可以使用以下代码:
let cow = try ModelEntity.load(named: "cow")
let horse = try ModelEntity.load(named: "horse")
cow.position.x = -1.0
horse.position.x = 1.0
let anchor = AnchorEntity()
cow.setParent(anchor)
horse.setParent(anchor)
arView.scene.anchors.append(anchor)
let cowAnimationResource = cow.availableAnimations[0]
let horseAnimationResource = horse.availableAnimations[0]
cow.playAnimation(cowAnimationResource.repeat(duration: .infinity),
transitionDuration: 1.25,
startsPaused: false)
horse.playAnimation(horseAnimationResource.repeat(duration: .infinity),
transitionDuration: 0.75,
startsPaused: false)
很遗憾,但在 RealityKit 2.0 中,您只能播放文件中的第一个动画 – 其他动画目前不可用。
我有一个简单的 RealityKit 场景,它显示了一头 .USDZ 奶牛。我看到了这些问题的几个答案,但我无法将它们实现到我的代码中:
- 如何播放此文件中内置的动画?
- 我如何才能将第二个对象(比如说一匹马)带入场景?
此外,我可以做些什么来清理我的代码/使其更易于阅读?
我很感激能得到的任何帮助! 谢谢,
import UIKit
import RealityKit
import ARKit
class WelcomeViewController: UIViewController {
//delay app launch to show splash screen
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Thread.sleep(forTimeInterval: 3.0)
// Override point for customization after application launch.
return true
}
//end splash screen delay
@IBAction func gotPressed(_ sender: Any) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let viewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as? ViewController {
self.present(viewController, animated: true, completion: nil) /// present the view controller (the one with the ARKit)!
} }
}
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
overlayCoachingView()
}
//Overlay coaching view "adjust iphone scan"
func overlayCoachingView () {
let coachingView = ARCoachingOverlayView(frame: CGRect(x: 0, y: 0, width: arView.frame.width, height: arView.frame.height))
coachingView.session = arView.session
coachingView.activatesAutomatically = true
coachingView.goal = .horizontalPlane
view.addSubview(coachingView)
}//end overlay
{
let cow = try! ModelEntity.load(named: "COW_ANIMATIONS")
let horse = try! ModelEntity.load(named: "White_Horse")
cow.position.x = -1.0
horse.position.x = 1.0
let anchor = AnchorEntity()
cow.setParent(anchor)
horse.setParent(anchor)
arView.scene.anchors.append(anchor)
let cowAnimationResource = cow.availableAnimations[0]
let horseAnimationResource = horse.availableAnimations[0]
cow.playAnimation(cowAnimationResource.repeat(duration: .infinity),
transitionDuration: 1.25,
startsPaused: false)
horse.playAnimation(horseAnimationResource.repeat(duration: .infinity),
transitionDuration: 0.75,
startsPaused: false)}
}
在 RealityKit API 中播放包含在 .usdz
文件中的动画,您可以使用以下代码:
let cow = try ModelEntity.load(named: "cow")
let horse = try ModelEntity.load(named: "horse")
cow.position.x = -1.0
horse.position.x = 1.0
let anchor = AnchorEntity()
cow.setParent(anchor)
horse.setParent(anchor)
arView.scene.anchors.append(anchor)
let cowAnimationResource = cow.availableAnimations[0]
let horseAnimationResource = horse.availableAnimations[0]
cow.playAnimation(cowAnimationResource.repeat(duration: .infinity),
transitionDuration: 1.25,
startsPaused: false)
horse.playAnimation(horseAnimationResource.repeat(duration: .infinity),
transitionDuration: 0.75,
startsPaused: false)
很遗憾,但在 RealityKit 2.0 中,您只能播放文件中的第一个动画 – 其他动画目前不可用。