Unity动态改变src的解决方法

在c#程序(winform,wpf)中可以嵌入unity控件,从而实现三维场景。通过设置unity控件的src属性来设置场景,然而src必须是绝对路径,而且只能在设计器进行设置,不能在代码中动态修改,这在需要运行时动态切换场景的时就悲剧了。当然网上有很多关于Unity 如何动态改变src的方法,其方法是正确的,最大的问题莫过于没有说明代码该放在什么地方,干着急。

下面假设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,再取出来的方式得到需要的字符串资源。然后再将值赋给重新创建的控件。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值