Unity 收藏本版 已有9人收藏 +发表新主题
查看: 32029|回复: 3
打印 上一主题 下一主题

[新问题] 关于Unity+Vuforia开发的安卓应用,平板电脑的相机自动对焦

[复制链接]

[新问题] 关于Unity+Vuforia开发的安卓应用,平板电脑的相机自动对焦

ljl344788652 发表于 2015-12-16 15:14:00 浏览:  32029 回复:  3 只看该作者 复制链接
之前在论坛看到非常简洁并有用的对焦代码:Vuforia.CameraDevice.Instance.SetFocusMode(Vuforia.CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
这段代码在手机上很好使,但是在平板上就失效了,求大神来解答一下,怎么才能让平板的相机也自动对焦,谢谢啦!!!
分享至:
| 人收藏
回复

使用道具 举报

该用户从未签到

沙发
Garss 发表于 2015-12-18 09:20:40 只看该作者
CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_NORMAL);

这样就可以了!前提是你的平板是支持相机伸缩的!
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
ljl344788652
 楼主|
发表于 2015-12-28 10:28:54 只看该作者
解决了个别相机不对焦的问题,下面代码直接复制,放到相机上就可以了,也不敢说都好使,但是确实解决了我的难题;
using UnityEngine;
using System.Collections;
using Vuforia;

public class TestControl : MonoBehaviour
{
       
        private string label;
        private float touchduration;
        private Touch touch;
       
        // Use this for initialization
        void Start ()
        {
                Vuforia.CameraDevice.Instance.SetFocusMode(Vuforia.CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
        }
       
        // Update is called once per frame
        void Update ()
        {

                Vuforia.CameraDevice.Instance.SetFocusMode(Vuforia.CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);

                if (Input.GetKey (KeyCode.Escape)) {
                        Application.Quit ();      
                }
               
                if (Input.touchCount > 0) {
                        touchduration += Time.deltaTime;
                        touch = Input.GetTouch (0);
                        if (touch.phase == TouchPhase.Ended && touchduration < 0.2f) {
                                StartCoroutine ("singleOrDouble");
                        }
                }  else {
                        touchduration = 0;     
                }
        }
       
        IEnumerator singleOrDouble ()
        {
                yield return new WaitForSeconds (0.3f);
                if (touch.tapCount == 1)
                        //Debug.Log ("Single");
                        OnSingleTapped ();
                else if (touch.tapCount == 2) {
                        //this coroutine has been called twice. We should stop the next one here otherwise we get two double tap
                        StopCoroutine ("singleOrDouble");
                        //Debug.Log ("Double");
                        OnDoubleTapped();
                }
        }
//       
        private void OnSingleTapped ()
        {
                TriggerAutoFocus ();
                //label = "Tap the Screen!";
        }
       
        private void OnDoubleTapped ()
        {
                //label = "Double Tap the Screen!";
        }
       
        //SingleTap Gestures are captured by AppManager and calls this method for TapToFocus
        public void TriggerAutoFocus ()
        {
                StartCoroutine (TriggerAutoFocusAndEnableContinuousFocusIfSet ());
        }
       
        /// <summary>
        /// Activating trigger autofocus mode unsets continuous focus mode (if was previously enabled from the UI Options Menu)
        /// So, we wait for a second and turn continuous focus back on (if options menu shows as enabled)
        /// </returns>
        private IEnumerator TriggerAutoFocusAndEnableContinuousFocusIfSet ()
        {

                CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO);
                yield return new WaitForSeconds (1.0f);
                CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
        }

}
回复 支持 反对

使用道具 举报

该用户从未签到

地板
ljl344788652
 楼主|
发表于 2015-12-28 10:30:55 只看该作者
Garss 发表于 2015-12-18 09:20
CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_NORMAL);

这样就可以了!前提是 ...

这个一直用的,不过个别手机和平板不好使,不过还是谢谢你!
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2013-2017 ARinChina-增强现实中国技术论坛   All Rights Reserved.