游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:550

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 232|回复: 7
发新帖

[技术讨论] 用高通的AR插件, 怎么用手势操控识别的物体

[复制链接]  [移动端链接]
5熟悉之中
882/1000
排名
2119
昨日变化
2

7

主题

70

帖子

882

积分

Rank: 5Rank: 5

UID
10613
好友
1
蛮牛币
1871
威望
0
注册时间
2013-12-19
在线时间
199 小时
最后登录
2018-8-25
跳转到指定楼层
楼主
发表于 2018-8-17 16:45:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20蛮牛币
就是想要物体识别出以后可以360°旋转,跟普通房地产项目一样能够左右上下滑动模型

回复

使用道具 举报

4四处流浪
397/500
排名
8063
昨日变化
167

1

主题

146

帖子

397

积分

Rank: 4

UID
231366
好友
4
蛮牛币
769
威望
0
注册时间
2017-7-10
在线时间
112 小时
最后登录
2018-8-24
沙发
发表于 2018-8-17 16:45:20 | 只看该作者

   
说明一下模型是分为两部分的,控制上下旋转和左右旋转不是同一transform   一个是父物体,一个是子物体
即给模型加一个空的父物体。



public GameObject CamreaMain;
    public float speed = 10;


    private int MouseWheelSensitivity = 1;
    private bool onDrag = false;
    private float axisX;
    private float axisY;
    private float interval = 0;
    private Touch oldTouch1;  //上次触摸点1(手指1)
    private Touch oldTouch2;  //上次触摸点2(手指2)
    private bool IsTwoTouch;
    // private float cXY;
    //旋转速度//  
    private float tempSpeed;
    private float distance = 1;



    void Update()
    {

        if (Input.touchCount <= 0)
        {
            Invoke("InvokeEvent", 0.5f);
        }

#if !UNITY_EDITOR && UNITY_IOS
        //触摸类型为移动触摸  
        if (Input.GetMouseButton(0)&& Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved && IsTwoTouch)//
            {
#elif UNITY_EDITOR
        //触摸类型为移动触摸  
        if (Input.GetMouseButton(0))//
        {
#endif

            if (Input.GetMouseButtonDown(0)) interval = 0;

            if (Input.GetMouseButton(0)) interval += Time.deltaTime;

            if (interval < 0.2f) return;
            //控制旋转
            axisX += Input.GetAxis("Mouse X") * speed;
            axisY += Input.GetAxis("Mouse Y") * speed;
            axisY = Mathf.Clamp(axisY, -45, 35);


            float temp = Input.GetAxis("Mouse ScrollWheel");
            if (temp != 0)
            {

                if (temp > 0)
                {
                    // 这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改   
                    //camera.fieldOfView -= 0.5f;
                    //camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 30, 90);
                    if (distance > 0.8f)
                    {
                        distance -= 0.1f;
                    }
                }
                if (temp < 0)
                {
                    // 这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改   
                    //camera.fieldOfView  += 0.5f;
                    //camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 30, 90);
                    if (distance < 1.7f)
                    {
                        distance += 0.1f;
                    }
                }

                //重新计算位置   
                CamreaMain.transform.position = CamreaMain.transform.rotation * new Vector3(0.0F, 0.0F, -distance) + transform.position;

            }
        }
    }




    void LateUpdate()
    {
        if (Input.GetMouseButton(0))
        {

            transform.localEulerAngles = new Vector3(CheckAngle(axisY), 0, 0);
            Transform child = transform.GetChild(0);
            child.localEulerAngles = new Vector3(0, -CheckAngle(axisX), 0);

        }
        TouchManger();

    }




    void TouchManger()
    {
        //多点触摸, 放大缩小
        if (Input.touchCount == 2)
        {
            IsTwoTouch = false;
            Touch newTouch1 = Input.GetTouch(0);
            Touch newTouch2 = Input.GetTouch(1);
            //第2点刚开始接触屏幕, 只记录,不做处理
            if (newTouch2.phase == TouchPhase.Began)
            {
                oldTouch2 = newTouch2;
                oldTouch1 = newTouch1;
                return;
            }

            //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
            float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
            float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
            //两个距离之差,为正表示放大手势, 为负表示缩小手势
            float offset = newDistance - oldDistance;

            if (offset != 0)
            {
                if (offset > 0)
                {
                    if (distance > 0.8f)
                    {
                        distance -= Time.deltaTime * 0.5f;

                    }
                }
                if (offset < 0)
                {
                    if (distance < 1.7f)
                    {
                        distance += Time.deltaTime * 0.5f;
                    }
                }
                //重新计算位置   
                CamreaMain.transform.position = CamreaMain.transform.rotation * new Vector3(0.0F, 0.0F, -distance) + transform.position;


            }
            ////放大因子, 一个像素按 0.01倍来算(100可调整)
            //float scaleFactor = offset / 100f;

            //Vector3 localScale = CamreaMain.transform.position;
            ////Vector3 scale = new Vector3(localScale.x,
            //                            //localScale.y,
            //                            //localScale.z - scaleFactor);

            ////在什么情况下进行缩放

            //if (localScale.z <= 0.2f && localScale.z >= -1.2f)
            //{
            //    Debug.Log(scaleFactor);
            //    CamreaMain.transform.position = CamreaMain.transform.rotation * new Vector3(0.0F, 0.0F, -scaleFactor) + transform.position;
            //}

            //记住最新的触摸点,下次使用
            oldTouch1 = newTouch1;
            oldTouch2 = newTouch2;
        }
    }

    public float CheckAngle(float value)
    {
        float angle = value - 180;

        if (angle > 0)
            return angle - 180;

        return angle + 180;
    }

    void InvokeEvent()
    {
        IsTwoTouch = true;
    }

回复

使用道具 举报

4四处流浪
397/500
排名
8063
昨日变化
167

1

主题

146

帖子

397

积分

Rank: 4

UID
231366
好友
4
蛮牛币
769
威望
0
注册时间
2017-7-10
在线时间
112 小时
最后登录
2018-8-24
板凳
发表于 2018-8-17 17:03:48 | 只看该作者
我有代码

回复

使用道具 举报

5熟悉之中
882/1000
排名
2119
昨日变化
2

7

主题

70

帖子

882

积分

Rank: 5Rank: 5

UID
10613
好友
1
蛮牛币
1871
威望
0
注册时间
2013-12-19
在线时间
199 小时
最后登录
2018-8-25
地板
 楼主| 发表于 7 天前 | 只看该作者
安生李 发表于 2018-8-17 17:14
说明一下模型是分为两部分的,控制上下旋转和左右旋转不是同一transform   一个是父物体,一个是子 ...

这个不是AR的吧?

回复

使用道具 举报

3偶尔光临
228/300
排名
14645
昨日变化
590

6

主题

132

帖子

228

积分

Rank: 3Rank: 3Rank: 3

UID
288872
好友
3
蛮牛币
146
威望
0
注册时间
2018-7-7
在线时间
44 小时
最后登录
2018-8-24
5#
发表于 5 天前 | 只看该作者
这不是手机触摸屏吗

回复

使用道具 举报

5熟悉之中
615/1000
排名
4342
昨日变化
26

0

主题

91

帖子

615

积分

Rank: 5Rank: 5

UID
68132
好友
5
蛮牛币
1431
威望
0
注册时间
2015-1-13
在线时间
232 小时
最后登录
2018-8-24
6#
发表于 3 天前 | 只看该作者
BBoyLong 发表于 2018-8-20 11:31
这不是手机触摸屏吗

A高通AR就是手机里面背景换成摄像机,操作和手机正常APP有区别嘛?你要对模型进行操作,就是触屏手势识别,具体要求看你怎么扩展

回复

使用道具 举报

排名
27233
昨日变化
2306

0

主题

10

帖子

50

积分

Rank: 2Rank: 2

UID
113190
好友
1
蛮牛币
127
威望
0
注册时间
2015-7-12
在线时间
30 小时
最后登录
2018-8-24
7#
发表于 昨天 15:38 | 只看该作者
碎心775825 发表于 2018-8-22 10:53
A高通AR就是手机里面背景换成摄像机,操作和手机正常APP有区别嘛?你要对模型进行操作,就是触屏手势识别 ...

他是想实现在真实环境中用手势控制虚拟物体?不接触屏幕?
[发帖际遇]: 凯撒的风景 捡了钱没交公 蛮牛币 降了 2 . 幸运榜 / 衰神榜

回复

使用道具 举报

5熟悉之中
615/1000
排名
4342
昨日变化
26

0

主题

91

帖子

615

积分

Rank: 5Rank: 5

UID
68132
好友
5
蛮牛币
1431
威望
0
注册时间
2015-1-13
在线时间
232 小时
最后登录
2018-8-24
8#
发表于 昨天 15:58 | 只看该作者
凯撒的风景 发表于 2018-8-24 15:38
他是想实现在真实环境中用手势控制虚拟物体?不接触屏幕?

他想要的应该是可以操作模型,滑动模型的,用手势识别滑动,MR的话才是真正的空间识别

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表