读取安卓本地文件的路径

  • 读取安卓本地文件的路径
  • 真机调试
  • 音频播放的bug
  • 双指控制摄像机缩放


读取安卓本地文件的路径

注意帖子里的路径文件前少了一个斜杠/
不加在真机调试的时候会出bug

真机调试


这两个帖子就可以完成

2021.9.8更新
真机调试需要的工具包在网上直接搜platform-tool就可以了,下载官网的然后放在任意非中文路径下即可
然后就是和上面帖子里一样的操作
由于unity已经帮我们配好了安卓的环境,所以只要你能打包apk,真机调试就一定是可以的


音频播放的bug

在调用服务器上的音频时,如果音频在前端显示的格式是

Unity Android 配置文件读取权限 unity打包安卓读取文件路径_本地文件


这样的,那么使用www.getaudioclip(true,true,audio.mpeg)这个方法直接读取就能播放完整了

但是如果是

Unity Android 配置文件读取权限 unity打包安卓读取文件路径_缩放_02


这种的话,那么用上面的方法你会发现播放的音频是不完整的,而且写入到本地的时候用播放器打开播放也是完整的。但是本地写入后如果还是用www.getaudioclip这个方法去访问本地的音频文件,依旧会有这个问题

这个时候,我尝试了用www的另一个方法getaudioclipcompressed()方法,就能播放完整了

问题应该是出在音频格式上,针对不同的格式,不同的方法读取的方式可能有所不同

顺带一提,网上说MP3其实也是mpeg的一种,但是mpeg实际上好像偏视频格式多一点,可能MP3只是mpeg里的小分支吧,所以用getaudiocilp方法里的audiotype.mpeg里显示是有mp3格式的

双指控制摄像机缩放

https://www.pianshen.com/article/99201245583/

参考的是这个帖子里相机的fieldofview属性,通过mathf.lerp方法控制缩放的阈值

if (Input.touchCount > 1)
        {
            //两次触摸都有滑动
            if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
            {
                //获取第一、二次两次触摸的位置
                Vector2 tempPosition1 = Input.GetTouch(0).position;
                Vector2 tempPosition2 = Input.GetTouch(1).position;
                //放大
                if (isEnlarge(oldPosition1, oldPosition2, tempPosition1, tempPosition2))
                {
                    /*float oldScaleX = model.transform.localScale.x;
                    float oldScaleY = model.transform.localScale.y;
                    float oldScaleZ = model.transform.localScale.z;
                    float newScale = 1.025f;*/
                    //model.transform.localScale = new Vector3(oldScaleX*newScale, oldScaleY* newScale, oldScaleZ*newScale);
                    test.fieldOfView = Mathf.Lerp(test.fieldOfView, 52, 0.1f);
                }
                else//缩小
                {
                    //model.transform.localScale = new Vector3(oldScaleX / newScale, oldScaleY / newScale, oldScaleZ / newScale);
                    test.fieldOfView = Mathf.Lerp(test.fieldOfView, 90, 0.1f);

                }
                //备份上一次触摸点的位置,用于对比   
                oldPosition1 = tempPosition1;
                oldPosition2 = tempPosition2;
            }
        }
        bool isEnlarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2)
        {
            //函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势   
            var leng1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y));
            var leng2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));
            if (leng1 < leng2)
            {
                //放大手势   
                return true;
            }
            else
            {
                //缩小手势   
                return false;
            }
        }

这是全部代码
里面需要的对象在一开始创建就可以了