ARKit--手势控制GameObj移动及缩放
来源:互联网 发布:斑马旅游怎么样 知乎 编辑:程序博客网 时间:2024/06/06 14:08
step 1:
打开unity
导入ARpackage,选择一个AR场景open
创建c#脚本
创建一个GameObject或者使用现有的将要操作的obj
step 2:
将下面脚本拖到GameObject,或Gameobj父类上
share c# code
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.XR.iOS;public class MuOuContoller : MonoBehaviour { public Transform MuouObj; private Touch oldTouch1; private Touch oldTouch2; // Use this for initialization void Start () { } // Update is called once per frame void Update() { if (Input.touchCount > 0 && MuouObj != null) { if(Input.touchCount == 1) { var touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved) { var screenPosition = Camera.main.ScreenToViewportPoint(touch.position); ARPoint point = new ARPoint { x = screenPosition.x, y = screenPosition.y }; ARHitTestResultType[] resultTypes = { ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent, ARHitTestResultType.ARHitTestResultTypeHorizontalPlane, ARHitTestResultType.ARHitTestResultTypeFeaturePoint }; foreach (ARHitTestResultType resultType in resultTypes) { if (HitTestWithResultType(point, resultType)) { return; } } } } Touch newTouch1 = Input.GetTouch(0); Touch newTouch2 = Input.GetTouch(1); if (newTouch2.phase == TouchPhase.Began) { oldTouch1 = newTouch1; oldTouch2 = newTouch2; return; } float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position); float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position); float offset = newDistance - oldDistance; float scaleFactor = offset / 100f; Vector3 localScale = transform.localScale; Vector3 scale = new Vector3(localScale.x + scaleFactor, localScale.y + scaleFactor, localScale.z + scaleFactor); if (scale.x > 0.5f && scale.y > 0.5f && scale.z > 0.5f) { transform.localScale = scale; } oldTouch1 = newTouch1; oldTouch2 = newTouch2; } } bool HitTestWithResultType(ARPoint point, ARHitTestResultType resultTypes) { List<ARHitTestResult> hitResults = UnityARSessionNativeInterface.GetARSessionNativeInterface().HitTest(point, resultTypes); if (hitResults.Count > 0) { foreach (var hitResult in hitResults) { MuouObj.position = UnityARMatrixOps.GetPosition(hitResult.worldTransform); MuouObj.rotation = UnityARMatrixOps.GetRotation(hitResult.worldTransform); MuouObj.transform.LookAt(new Vector3(Camera.main.transform.position.x, MuouObj.transform.position.y, Camera.main.transform.position.z)); return true; } } return false; }}
将public出去的对象位置拖入要操作的对象
step3:
导出iOS版本
阅读全文
0 0
- ARKit--手势控制GameObj移动及缩放
- Unity 移动端简单手势控制(移动,旋转,缩放)
- 手势状态控制图片的缩放和移动(双击放大,俩指滑动图片缩放)
- web手势库AlloyFinger运用( 控制CANVAS中图片移动、缩放、旋转)
- android实现手势缩放、移动图片
- Android view手势缩放与移动
- 通过手势缩放、移动ImageView的图片
- 自定义控件:手势缩放移动,遮罩
- 187,使用手势控制图片的缩放
- 触摸屏手势控制镜头旋转与缩放
- 触摸屏手势控制镜头旋转与缩放
- 移动端web缩放控制
- 无标题窗口移动及缩放
- SeekBar的使用(二):控制Button的缩放,移动及旋转
- 手势控制四轮智能车移动
- 手势缩放
- 使用手势UIGestureRecognizer对图像进行缩放、移动、旋转操作
- Android之关于手势操作图片的缩放与移动
- HTTP请求方法
- Apache Thrift学习一
- 29 SEP 17 合理安排时间,寻找合适机会
- Android静默方式实现批量安装卸载APK
- Java文件操作方法
- ARKit--手势控制GameObj移动及缩放
- Android的10毫秒问题 解读Android系统音频通道延迟缺陷
- 三分设计感的纯React-Native项目 Mung
- Android Fragment操作区别
- Little tip
- 我们为什么需要DTO(数据传输对象)
- node 数据采集-cookie处理,图片验证
- 获取当前日期 星期 方法
- MAC 开发配置