Unity适配微信

Unity 转微信:GitHub - wechat-miniprogram/minigame-unity-webgl-transform

使用的是微信开发的插件 GitHub - wechat-miniprogram/minigame-unity-webgl-transform

路径相关:Unity:Application.streamingAssetsPath   --> 配置的cdn路径+StreamingAssets

搭建本地cdn : Tomcat安装及配置教程(超详细)_AAACod的博客-CSDN博客


异步方案:UniTask

网络方案:WebSocket

播放视频:
在plugins 里面添加  minigame-unity-webgl-transform/Demo/WX_Video/Assets/Plugins/TransparentBackground.jslib at main · wechat-miniprogram/minigame-unity-webgl-transform · GitHub

 public class WeChatMoviePlayer
 {
     WXVideo video;
     public Action OnPlayEnd;
     public Action OnReady;
     public bool isLoop;
     public void SetClip(string rPath)
     {
         WX.InitSDK((int code) => {
             var systemInfo = WX.GetSystemInfoSync();
             rPath = AssetsProxy.CDN + rPath;//+ "?v=" + DateTime.Now.ToString();
             Debug.Log("++++++++++++++++wechat movie player is ready to run path =" + rPath);
             video = WX.CreateVideo(new WXCreateVideoParam()
             {
                 src = rPath,
                 controls = false,
                 showProgress = false,
                 showProgressInControlMode = false,
                 autoplay = true,
                 showCenterPlayBtn = false,
                 underGameView = true,
                 loop = isLoop,
                 width = ((int)systemInfo.screenWidth),
                 height = ((int)systemInfo.screenHeight),
             });

             video.OnPlay(() =>
             {
                 Close3DCamera();
                 Debug.Log("++++++++++++++++wechat movie player is running path =" + rPath);
                 OnReady?.Invoke();
             });

             video.OnEnded(() =>
             {
                 Debug.Log("++++++++++++++++wechat movie player is ended path =" + rPath);
                 OnPlayEnd?.Invoke();
                 if (!isLoop)
                 {
                     Destory();
                 }
             });
         });
     }

     public void Stop()
     {
         Debug.Log("++++++++++++++++wechat movie player is Stop");
         video?.Stop();

     }

     public void Play()
     {
         video?.Play();
     }


     public void Pause(bool rPause)
     {
         if (rPause)
         {
             Debug.Log("++++++++++++++++wechat movie player is Pause");
             video?.Pause();
         }
         else
         {
             Debug.Log("++++++++++++++++wechat movie player is Play");
             video?.Play();
         }
     }
     public void Destory()
     {
         Debug.Log("++++++++++++++++wechat movie player is destory");
         Open3DCamera();
         video?.Destroy();
     }
     public void InitUICamera()
     {
         Debug.Log("++++++++++++++++wechat movie player InitUICamera");
         Canvas[] canvases = GameObject.FindObjectsOfType<Canvas>();
         foreach (var canvas in canvases)
         {
             if (canvas.renderMode == RenderMode.ScreenSpaceCamera)
             {
                 UICanvas = canvas;
                 UICamera = canvas.worldCamera;
             }
         }
     }
     public Canvas UICanvas;
     public Camera UICamera;

     private void Close3DCamera()
     {
         Debug.Log("++++++++++++++++wechat movie player Close3DCamera");
         Camera[] cameras = GameObject.FindObjectsOfType<Camera>();
         foreach (var cam in cameras)
         {
             CameraData cd = new CameraData { mCamera = cam, mFlags = cam.clearFlags, mBgColor = cam.backgroundColor };
             if (!cd.IsVedioCamera && cam.enabled)
             {
                 Debug.Log("close camera = " + cam.gameObject.name);
                 cam.gameObject.SetActive(false);
                 camera3dList.Add(cd);
             }
             else
             {
                 UICanvas.worldCamera = cam;
             }
         }
     }

     public struct CameraData
     {
         public Camera mCamera;
         public CameraClearFlags mFlags;
         public Color mBgColor;
         public bool IsVedioCamera => mCamera.name == "VedioCamera";//  mCamera != null && ((mCamera.cullingMask & LayerMask.GetMask(new string[] { "UI" })) == 0);
     }

     private void Open3DCamera()
     {
         Debug.Log("++++++++++++++++wechat movie player Open3DCamera");
         foreach (var cam in camera3dList)
         {
             cam.mCamera.gameObject.SetActive(true);
         }
         camera3dList.Clear();
         UICanvas.worldCamera = UICamera;
     }
     public List<CameraData> camera3dList = new List<CameraData>();
 }

IOS 视频播放发现一个bug,播放路径不能带后面的随机值

 rPath = AssetsProxy.CDN + rPath;//+ "?v=" + DateTime.Now.ToString();

   ugui坐标转wechat坐标
   x = (int)((int)trans1.anchoredPosition.x + (int)trans1.rect.width / 2),
   y = (int)((int)trans1.rect.height - ((int)trans1.anchoredPosition.y + (int)trans1.rect.height / 2)),
   width = (int)trans1.rect.width, 
   height = (int)trans1.rect.height,  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值