以往的AR教程里都是使用屏幕点击事件来实现 识别图物体的放大,缩小,旋转, 然后问题就是会和UI冲突,很长见得一个ScrollRcst滑动UI发现 你滑动UI时 物体也跟着旋转 , 这样 给人的体验很不好,解决方法如下(本人菜鸡一枚,只是想分享下,勿喷~)
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ChangeModelScale : MonoBehaviour {
public float xspeed = 150.0f;
private Touch oldTouch1;
private Touch oldTouch2;
public static Vector3 scale;
public GameObject chanGeModel;
Ray ray;
Quaternion rotation;
void Start () {
}
void Update()
{
if (DaYe.rayCanUse)
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Tmd"))
{
Debug.Log(hit.transform.gameObject.layer + "检测到了");
EarthRotation();
ChangeScale();
}
}
}
}
void EarthRotation()
{
//单点触摸控制地球的旋转
if(Input.GetMouseButton(0))
{
if (Input.touchCount == 1)
{
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
transform.Rotate(Vector3.up * Input.GetAxis("Mouse X") * -xspeed * Time.deltaTime, Space.World);
}
}
}
}
public void ChangeScale()
{
if (Input.touchCount == 2)
{
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;
//放大因子,一个像素按0.01倍来算(100可调整)
float scaleFactor = offset / 100f;
Vector3 localScale = transform.localScale;
scale = new Vector3(localScale.x + scaleFactor, localScale.y + scaleFactor, localScale.z + scaleFactor);
//最小缩小到0.3倍
if (scale.x > 0.3f && scale.x < 2.5f)
{
transform.localScale = scale;
}
//记住最新的触摸点,下次使用
oldTouch1 = newTouch1;
oldTouch2 = newTouch2;
}
}
}
在新建一个脚本不用挂载
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public static class DaYe
{
public static bool rayCanUse = true;
}
public class LitterItems : MonoBehaviour {
}
挂在物体上 加上Collider 就ok啦~嘿嘿~
屏幕UI记得要在相机面前加Panle 哦