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,