Unity动态改变src的解决方法
2014-12-29 21:36
246 查看
在c#程序(winform,wpf)中可以嵌入unity控件,从而实现三维场景。通过设置unity控件的src属性来设置场景,然而src必须是绝对路径,而且只能在设计器进行设置,不能在代码中动态修改,这在需要运行时动态切换场景的时就悲剧了。当然网上有很多关于Unity 如何动态改变src的方法,其方法是正确的,最大的问题莫过于没有说明代码该放在什么地方,干着急。
下面假设unity控件的文件Unity3dControl.cs,那么打开Unity3dControl.designer.cs,找到函数private void InitializeComponent(),在
之后添加如下代码:
这当中,最关键的代码是u3dPlayer.src =ModelFilePath,通过静态属性ModelFilePath从外部传递源文件路径给unity控件,也可以使用其他方式。
根据网上的资料,在编辑器中,给unity设置src属性时,会自动生成字符串资源,并把它赋值给属性OcxState。由于没办法手动生成这个字符串,因而需要通过代码,即先赋值给OcxState,再取出来的方式得到需要的字符串资源。然后再将值赋给重新创建的控件。
下面假设unity控件的文件Unity3dControl.cs,那么打开Unity3dControl.designer.cs,找到函数private void InitializeComponent(),在
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Unity3dControl)); this.u3dPlayer = new U3DPlayer(); ((System.ComponentModel.ISupportInitialize)(this.u3dPlayer)).BeginInit(); this.SuspendLayout();
之后添加如下代码:
<span style="white-space:pre"> </span> this.u3dPlayer.Dock = System.Windows.Forms.DockStyle.Fill; this.u3dPlayer.Enabled = true; this.u3dPlayer.Location = new System.Drawing.Point(0, 0); this.u3dPlayer.Name = "U3DPlayer"; //this.u3dPlayer.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("u3dPlayer.OcxState"))); this.u3dPlayer.Size = new System.Drawing.Size(270, 285); this.u3dPlayer.TabIndex = 0; this.Controls.Add(this.u3dPlayer); ((System.ComponentModel.ISupportInitialize)(this.u3dPlayer)).EndInit(); u3dPlayer.src = ModelFilePath; _state = u3dPlayer.OcxState; u3dPlayer.Dispose(); u3dPlayer = new U3DPlayer(); ((System.ComponentModel.ISupportInitialize)(u3dPlayer)).BeginInit(); this.SuspendLayout(); u3dPlayer.Dock = DockStyle.Fill; u3dPlayer.Name = "Unity3D"; u3dPlayer.OcxState = _state; u3dPlayer.TabIndex = 0; Controls.Add(u3dPlayer); ((System.ComponentModel.ISupportInitialize)(u3dPlayer)).EndInit(); this.ResumeLayout(false);
这当中,最关键的代码是u3dPlayer.src =ModelFilePath,通过静态属性ModelFilePath从外部传递源文件路径给unity控件,也可以使用其他方式。
根据网上的资料,在编辑器中,给unity设置src属性时,会自动生成字符串资源,并把它赋值给属性OcxState。由于没办法手动生成这个字符串,因而需要通过代码,即先赋值给OcxState,再取出来的方式得到需要的字符串资源。然后再将值赋给重新创建的控件。
相关文章推荐
- javascript动态改变img的src属性图片不显示的解决方法
- javascript动态改变img的src属性图片不显示的解决方法
- VC Listview 在Release版本下无法动态改变图标的解决方法
- 视频 embed标签动态改变Src的值,局部刷新播放其他视频的javascript方法
- Unity动态字体文字破碎的解决方法(Dynamic Font Broken)
- jquery动态改变onclick属性导致失效的问题解决方法
- 解决javascript动态改变img的src属性图片不显示问题
- 解决IE6下JS动态设置图片IMG的SRC时图片无法加载错误的方法
- ListViewItem中的图片不能动态改变的解决方法
- ListViewItem中的图片不能动态改变的解决方法
- 解决javascript动态改变img的src属性图片不显示问题
- js改变img标签的src属性在IE下没反应的解决方法
- 解决javascript动态改变img的src属性图片不显示问题
- 动态改变select option时,宽度自动变短解决方法
- js改变img标签的src属性在IE下没反应的解决方法
- js改变img标签的src属性在IE下没反应的解决方法
- 在ifram中动态改变某个弹出层的位置的解决方法
- Unity中使用UGUI制作Prefab后,调用Instantiate动态生成Button无法点击的解决方法
- ExtJs6 发送ajax如何动态改变发送参数的参数名的解决方法
- 解决javascript动态改变img的src属性图片不显示问题