Reality Composer使用+QuickLook初探

本文介绍了如何利用Apple的RealityComposer工具进行3D建模,详细阐述了从打开工具、选择场景、编辑模型、添加行为、设置文本标志,到在Xcode中新建AR项目并整合资源的全过程。通过此教程,读者可以学会如何为iOS应用创建AR内容,包括让机器人模型在AR环境中执行特定行为。
摘要由CSDN通过智能技术生成

 Reality Composer

苹果公司为了填补在3D建模这一块的空白,给我们提供了这样一个强大的3D建模工具——Reality  Composer,接下来就让我们研究一下如何使用这件工具。

官网介绍:https://developer.apple.com/documentation/realitykit/creating-3d-content-with-reality-composer

step1——打开方式:xcode中按如下方式打开,新建

step2—— 选择场景

在这里选择你所需要的大场景,相当于RealityKit中的AnchorEntity,在这里共有五种选择,水平面、垂直面、图像、人脸、物体,也就是说可以把虚拟物体定位到这五种真实世界的对象中。 

step3——编辑

这里我们就选择官网提供的一个机器人模型来进行reality composer的编辑。

素材地址:https://developer.apple.com/augmented-reality/quick-look/

这次我们就选择最常用的水平面进去,首先映入眼帘的是一个正方体,一个文本,通过触摸板或鼠标操控可以控制移动和旋转,网格即为水平面。

 在上方可以选择添加新的物体,点击物体可以在右侧属性板调整属性,也可以对多个物体进行成组操作,类似于把几个物体捆绑在一起,可以赋予相同行为。

step4-添加模型

将下载好的机器人模型直接拖入,点击空白处右侧属性板显示的则是大场景(相当于AnchorEntity)的属性,名字最好设为英文,点击机器人显示的则是模型(相当于ModelEntity)的属性

step5-添加行为

点击右上角行为,选择机器人,选择轻点与翻转即可为机器人添加一个翻转行为,可以选择受影响的对象和操作序列,操作序列就是可以添加多个行为,将不同的行为拉到一起即可让这些行为同时进行,如果想要model有碰撞效果,点击模型,在属性面板中参与物理行为,选择不同的材质即会有不同的碰撞效果。

为了达到该文章的项目需求,我们可以设置成如下行为,场景开始时隐藏机器人,设置触发器为通知,即用代码来添加触发器(需设置一个标识符),触发后实现机器人从远处走到原点处,动画使用的是下载时自带的usdz文件的动画,我们可以将迭代设置为2,让动画执行时间延长。 

 step6-添加文本标志

在平面中添加一个文本,若能看到文本说明已经检测到平面,这时候就配置完成可以保存文件了。

 step7-新建项目文件

xcode新建一个AR项目,将AR模版拖入xcode,写入以下代码,除了label的设置以外就只剩一点点代码了,仔细看看会发现很简单。

//
//  ViewController.swift
//  RealityComposer
//
//  Created by mac on 2022/10/24.
//

import UIKit
import RealityKit

class ViewController: UIViewController {

    @IBOutlet var arView: ARView!
    
    var robotWalk: AR.RobotWalk!//由于viewDidload以外也要使用,所以设为全局变量
    
    //添加一个可点击的label,点击召唤机器人
    lazy var startLabel:UILabel = {
       let startLabel = UILabel()
        startLabel.translatesAutoresizingMaskIntoConstraints = false
        startLabel.textAlignment = .center
        startLabel.text = "点击召唤机器人"
        startLabel.textColor = .yellow
        startLabel.font = .systemFont(ofSize: 24,weight: .heavy)
        return startLabel
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //给label设置手势
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(tap:)))
        view.addSubview(startLabel)
        startLabel.isUserInteractionEnabled = true
        startLabel.addGestureRecognizer(tap)
        
        //设置label的约束
        startLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 70).isActive = true
        startLabel.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 100).isActive = true
        startLabel.widthAnchor.constraint(equalToConstant: 200).isActive = true
        
        
        //robotWalk就相当于AnchorEntity,自带的load函数后面的RobotWalk是自己取的场景名,将场景加载出来
        //可以进入AR的定义文件中查看
        robotWalk = try! AR.loadRobotWalk()
        //将场景放入arView
        arView.scene.addAnchor(robotWalk)
    }
    
    //设置点击事件
    @objc func handleTap(tap:UITapGestureRecognizer){
        //调用大场景中的notifications,walkstart即为定义的标识符,调用他的post即可触发行为
        
        if tap.state == .ended{
            //walkStart被实例成NotificationTrigger,其中有一个post方法发送指令,调用即可触发行为
            robotWalk.notifications.walkStart.post()
            
        }
    }
}

step8-项目中修改

如果对于物体的属性还需要调整可以直接在xcode中打开文件,修改后代码也会实时更新。

step9-项目演示 

RealityComposer项目演示

QuickLook

QuickLook是ios的一个AR集成框架,当app的主要功能不是AR时可以使用QuickLook实现一个简要的AR预览。

官网介绍:https://developer.apple.com/documentation/quicklook

https://developer.apple.com/documentation/arkit/previewing_a_model_with_ar_quick_look

首先可以在Reality Composer中创建一个模型(不包含子节点),导出成reality或usdz格式放入xcode中,接着实现以下代码(在xcode中我放入的模型名叫house)即可生成一个简易的AR模型预览功能。

import UIKit
import ARKit
import QuickLook

class ViewController: UIViewController, QLPreviewControllerDataSource {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        let previewController = QLPreviewController()
        previewController.dataSource = self
        present(previewController, animated: true, completion: nil)
    }
    
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }
    
    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        let url = Bundle.main.url(forResource: "house", withExtension: "usdz")!
        return url as QLPreviewItem
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值