qq_42514040 2024-05-20 00:16 采纳率: 0%
浏览 21
已结题

Unity接入微信SDK 无法开启摄像头

目前Unity接入 微信SDK制作小游戏
发现获取罗盘数值 “StartCompassOption” 是可以正常使用,可以获取到数值
但是摄像头 无法启动,麻烦帮忙看下是 哪里的问题
摄像头权限是 已经获取到,但是开启摄像头的方法 “Success”并未调用。
不用制作拍照和录像,只用获取到摄像头画面即可。

 public RawImage img_target;

 private void Awake()
 {
     WX.InitSDK(InitCallBack);

    WX.OnNeedPrivacyAuthorization((sub) =>
    {
        Debug.Log(sub);
    });
     WXInit();
 }

 public void WXInit()
 {
     AuthorizeOption ao = new AuthorizeOption();
     ao.scope = "scope.camera";
     WX.Authorize(ao);

     //开启陀螺仪
     sco = new StartCompassOption();
     sco.success += Success;
     sco.fail += Fail;
     WX.StartCompass(sco);
     WX.OnCompassChange((result) =>
     {
        Debug.Log(result.direction);
     }

     //开启摄像头
     CreateCameraOption cco = new CreateCameraOption();
     cco.devicePosition = "back";
     cco.fail += Fail;
     cco.success += Success;
     WXCamera wxCam = WXBase.CreateCamera(cco);
     wxCam.ListenFrameChange();
     wxCam.OnCameraFrame((data) =>
     {
        Debug.Log("=====" + data.data.Length);
        Texture2D texture = ConvertArrayBufferToTexture(data.data);
        if (texture != null)
        {
            img_target.material.mainTexture = texture;
        }
     });

     var a = WX.GetAppAuthorizeSetting();
     Debug.Log("摄像头权限:" + a.cameraAuthorized);
}

 public void InitCallBack(int i)
 {
     Debug.Log("WXInit Success!!-----------" + i);
 }


public void Success(GeneralCallbackResult gg)
{
     var a = WX.GetAppAuthorizeSetting();
     Debug.Log("相机权限:" + a.cameraAuthorized);
}

 public void Fail(GeneralCallbackResult gg)
 {
     Debug.LogError("失败!!");
 }


Texture2D ConvertArrayBufferToTexture(byte[] buffer)
{
    int width = 500;
    int height = 500;

    Texture2D texture = new Texture2D(width, height);
    if (texture.LoadImage(buffer))
    {
        return texture;
    }
    return null;
}
  • 写回答

26条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-20 00:16
    关注
    获得0.90元问题酬金

    引自免费微信小程序:皆我百晓生

    根据您提供的代码,我发现了几个可能的问题。首先,在初始化微信SDK时,确保已正确设置APPID。其次,检查微信SDK是否正确安装并配置了所需的插件。再次,确保在Unity项目中启用了Android或iOS的摄像头功能,并且在隐私设置中请求了相应的权限。最后,优化代码结构以提高可读性和错误处理。下面是修改后的代码:

    1. 确保在Awake()方法中添加APPID:
    private const string WeChatAppId = "YOUR_WECHAT_APP_ID";
    
    void Awake()
    {
        WX.InitSDK(WeChatAppId, InitCallBack);
        ...
    }
    
    1. 添加权限请求逻辑:
    private async void RequestPermissions()
    {
        bool cameraPermission = await Application.RequestUserAuthorization(UserAuthorization.Camera);
        if (!cameraPermission)
        {
            Debug.LogError("用户拒绝访问摄像头");
            return;
        }
    }
    
    1. WXInit()方法开始时添加权限请求:
    public void WXInit()
    {
        RequestPermissions();
    
        ...
    }
    
    1. 将纹理创建函数修改为异步,以便正确加载图像数据:
    async Task<Texture2D> ConvertArrayBufferToTextureAsync(byte[] buffer)
    {
        int width = 500;
        int height = 500;
    
        using (var memStream = new MemoryStream(buffer))
        {
            Texture2D texture = new Texture2D(width, height, TextureFormat.RGB24, false);
            await texture.LoadImageAsync(memStream.ToArray());
            return texture;
        }
    }
    
    1. 更新OnCameraFrame中的回调:
    wxCam.OnCameraFrame(async (data) =>
    {
        Debug.Log("=====" + data.data.Length);
        Texture2D texture = await ConvertArrayBufferToTextureAsync(data.data);
        if (texture != null)
        {
            img_target.material.mainTexture = texture;
        }
    });
    
    1. 最后,确保您的设备支持Unity的摄像头功能,并在隐私设置中授予应用访问摄像头的权限。

    按照以上步骤修改代码后,应该能解决摄像头无法启动的问题。若仍然存在问题,请检查微信SDK的日志输出,以便更准确地定位问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月28日
  • 创建了问题 5月20日

悬赏问题

  • ¥15 关于#linux#的问题(输入输出错误):出现这个界面接着我重新装系统,又让修电脑的师傅帮我扫描硬盘(没有问题)用着用着又卡死(相关搜索:固态硬盘)
  • ¥15 cv::resize不同线程时间不同
  • ¥15 web课程,怎么做啊😭没好好听课 根本不知道怎么下手
  • ¥15 做一个关于单片机的比较难的代码,然后搞一个PPT进行解释
  • ¥15 python提取.csv文件中的链接会经常出现爬取失败
  • ¥15 数据结构中的数组地址问题
  • ¥15 maya的mel里,怎样先选择模型A,然后利用mel脚本自动选择有相同名字的模型B呢。
  • ¥15 Python题,根本不会啊
  • ¥15 会会信号与系统和python的来
  • ¥15 关于#python#的问题