• 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

    1. public class WeChatMoviePlayer
    2. {
    3. WXVideo video;
    4. public Action OnPlayEnd;
    5. public Action OnReady;
    6. public bool isLoop;
    7. public void SetClip(string rPath)
    8. {
    9. WX.InitSDK((int code) => {
    10. var systemInfo = WX.GetSystemInfoSync();
    11. rPath = AssetsProxy.CDN + rPath;//+ "?v=" + DateTime.Now.ToString();
    12. Debug.Log("++++++++++++++++wechat movie player is ready to run path =" + rPath);
    13. video = WX.CreateVideo(new WXCreateVideoParam()
    14. {
    15. src = rPath,
    16. controls = false,
    17. showProgress = false,
    18. showProgressInControlMode = false,
    19. autoplay = true,
    20. showCenterPlayBtn = false,
    21. underGameView = true,
    22. loop = isLoop,
    23. width = ((int)systemInfo.screenWidth),
    24. height = ((int)systemInfo.screenHeight),
    25. });
    26. video.OnPlay(() =>
    27. {
    28. Close3DCamera();
    29. Debug.Log("++++++++++++++++wechat movie player is running path =" + rPath);
    30. OnReady?.Invoke();
    31. });
    32. video.OnEnded(() =>
    33. {
    34. Debug.Log("++++++++++++++++wechat movie player is ended path =" + rPath);
    35. OnPlayEnd?.Invoke();
    36. if (!isLoop)
    37. {
    38. Destory();
    39. }
    40. });
    41. });
    42. }
    43. public void Stop()
    44. {
    45. Debug.Log("++++++++++++++++wechat movie player is Stop");
    46. video?.Stop();
    47. }
    48. public void Play()
    49. {
    50. video?.Play();
    51. }
    52. public void Pause(bool rPause)
    53. {
    54. if (rPause)
    55. {
    56. Debug.Log("++++++++++++++++wechat movie player is Pause");
    57. video?.Pause();
    58. }
    59. else
    60. {
    61. Debug.Log("++++++++++++++++wechat movie player is Play");
    62. video?.Play();
    63. }
    64. }
    65. public void Destory()
    66. {
    67. Debug.Log("++++++++++++++++wechat movie player is destory");
    68. Open3DCamera();
    69. video?.Destroy();
    70. }
    71. public void InitUICamera()
    72. {
    73. Debug.Log("++++++++++++++++wechat movie player InitUICamera");
    74. Canvas[] canvases = GameObject.FindObjectsOfType();
    75. foreach (var canvas in canvases)
    76. {
    77. if (canvas.renderMode == RenderMode.ScreenSpaceCamera)
    78. {
    79. UICanvas = canvas;
    80. UICamera = canvas.worldCamera;
    81. }
    82. }
    83. }
    84. public Canvas UICanvas;
    85. public Camera UICamera;
    86. private void Close3DCamera()
    87. {
    88. Debug.Log("++++++++++++++++wechat movie player Close3DCamera");
    89. Camera[] cameras = GameObject.FindObjectsOfType();
    90. foreach (var cam in cameras)
    91. {
    92. CameraData cd = new CameraData { mCamera = cam, mFlags = cam.clearFlags, mBgColor = cam.backgroundColor };
    93. if (!cd.IsVedioCamera && cam.enabled)
    94. {
    95. Debug.Log("close camera = " + cam.gameObject.name);
    96. cam.gameObject.SetActive(false);
    97. camera3dList.Add(cd);
    98. }
    99. else
    100. {
    101. UICanvas.worldCamera = cam;
    102. }
    103. }
    104. }
    105. public struct CameraData
    106. {
    107. public Camera mCamera;
    108. public CameraClearFlags mFlags;
    109. public Color mBgColor;
    110. public bool IsVedioCamera => mCamera.name == "VedioCamera";// mCamera != null && ((mCamera.cullingMask & LayerMask.GetMask(new string[] { "UI" })) == 0);
    111. }
    112. private void Open3DCamera()
    113. {
    114. Debug.Log("++++++++++++++++wechat movie player Open3DCamera");
    115. foreach (var cam in camera3dList)
    116. {
    117. cam.mCamera.gameObject.SetActive(true);
    118. }
    119. camera3dList.Clear();
    120. UICanvas.worldCamera = UICamera;
    121. }
    122. public List camera3dList = new List();
    123. }

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

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

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

     

  • 相关阅读:
    力扣:11-盛最多水的容器
    智能小车循迹与避障运动控制系统的设计
    Go语言-big.Int
    汽车自动驾驶是人工智能吗,自动驾驶是人工智能
    详解HashMap源码解析(上)
    什么是ETL?
    【图像分类】2018-MobileNetV2
    道教和道家的区别
    天猫评价、销量计算逻辑规则再次变更
    Flutter 8 个优秀动画 Packages
  • 原文地址:https://blog.csdn.net/pdw_jsp/article/details/134220611