位置: 编程技术 - 正文
推荐整理分享U3DPlayer UnityWebPlayer动态改变src,希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!
单机问题解决了,接下来是动态src的问题,之前有看到过有解决方案的。
今天参考了:Unity动态改变src的解决方法 - 智周万物
我的目的是实现可以打开任意.unity3d文件的功能,把他的代码整理了一下,能删的删,做成了一个用户控件。
不知道为什么我的是AxUnityWebPlayer ,他的是U3DPlayer,难道他已经封装了一层?反正直接用AxUnityWebPlayer代进去能用。
代码:
public partial class U3DPlayer : UserControl
{
public static U3DPlayer AppendTo(Control parent, string path)
{
try
{
U3DPlayer player = new U3DPlayer(path);
parent.Controls.Clear();
parent.Controls.Add(player);
return player;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return null;
}
}
public U3DPlayer(string path)
{
InitializeComponent();
_u3DPlayer = InitU3DPlayer();
OpenFile(path);
}
private AxUnityWebPlayer _u3DPlayer;
private void OpenFile(string path)
{
_u3DPlayer = CreateU3DPlayerEx(path, _u3DPlayer);
}
private AxUnityWebPlayer InitU3DPlayer()
{
var resources = new ComponentResourceManager(GetType());
AxHost.State state1 = ((AxHost.State)(resources.GetObject("u3dPlayer.OcxState")));
var player = CreateU3DPlayer(state1);
return player;
}
private AxUnityWebPlayer CreateU3DPlayerEx(string path, AxUnityWebPlayer player)
{
var state = GetState(path, player);
return CreateU3DPlayer(state);
}
/*
* 给unity设置src属性时,会自动生成字符串资源,并把它赋给属性OcxState。
* 由于没办法手动生成这个字符串,因而需要通过代码,即先赋给OcxState,再取出来的方式得到需要的字符串资源。
* 然后再将赋给重新创建的控件。
*/
/// <summary>
/// 获取需要的字符串资源
/// </summary>
/// <param name="path"></param>
/// <param name="player"></param>
/// <returns></returns>
private static AxHost.State GetState(string path, AxUnityWebPlayer player)
{
player.src = new FileInfo(path).FullName; //这里是重点
AxHost.State state = player.OcxState;
player.Dispose();//因为之后马上就要创建新的了
return state;
}
private AxUnityWebPlayer CreateU3DPlayer(AxHost.State state1)
{
var player = new AxUnityWebPlayer() { Dock = DockStyle.Fill };
((ISupportInitialize)(player)).BeginInit();
player.OcxState = state1;
Controls.Add(player);
((ISupportInitialize)(player)).EndInit();
return player;
}
}
最后,那个OpenFile是无法改成public的,应该说是,能改,前面两次调用也没问题,但是,第三次开始就会出异常关闭程序(具体原因我也没去深究)。所以使用时就一个U3DPlayer显示一个场景,要换的话,再创建一个就好了。也就是一开始的AppendTo方法。实际上我是有点想把构造函数直接改成private的,但是已经有些地方用了,还是算了。
物理引擎——刚体Rigidbody(二) 一、刚体交互当物体包含刚体的时候就可以收到物理引擎的影响,当物体包含碰撞器的时候物体可以发生碰撞,当物体含有碰撞器不含有刚体的时候可
unity3d移动平台性能优化专题(8):shader优化 当然如果你完全可以采用内置的Mobile下面的shader是最好,性能肯定是杠杠的。但是相信绝大部分游戏还是不得不自己写shader,那就要注意写出高性能的sh
Unity3D 学习笔记 (1) 在公司实习一个星期了,现在来写下这周实习的心得吧。公司用的是Unity3D这东西完全没用过……本来在学校学的是java只能从java转到C#上了,实习了一个
标签: U3DPlayer UnityWebPlayer动态改变src
本文链接地址:https://www.jiuchutong.com/biancheng/378815.html 转载请保留说明!友情链接: 武汉网站建设