可以用委托来搞定
using System; using System.Collections.Generic; using System.Text; using UnityEngine; public delegate void u3d(string name);//创建一个委托,用来放绘制的方法 public class DM02Brridge:MonoBehaviour { private void Start() { u3d AA = new DirectX().Render ;//实例化Dir.把其中的Render方法放进去 Sphere l_Sphere = new Sphere(); //实例化球体的脚本 l_Sphere.Draw(new DirectX().Render);//球体脚本.其中的Draw方法(把执行哪条方法丢进去) l_Sphere.Draw(new OpenGL().Render); Cube l_Cube = new Cube(); l_Cube.Draw(); } } public class Sphere //球体的类,有自己的属性 { public string name = "Sphere"; public OpenGL openGL = new OpenGL(); public void Draw(u3d AA)//这样可以调用进来的方法,然后把本脚本的内容放过去. { AA(name); } } public class OpenGL//绘制的引擎 { public void Render(string name) { Debug.Log("OpenGL绘制了:" + name); } } public class Cube //球体的类,有自己的属性 { public string name = "Cube"; public OpenGL openGL = new OpenGL(); public void Draw() { openGL.Render(name); } } public class DirectX { public void Render(string name) { Debug.Log("DrectX绘制了:" + name); } }
也可以使用父类为接口继承的方法----桥接模式
父1-----子1
父2-----子2
调用父1,父1的类中创建父2...
这样调用父1后,所有的都可以调用实现
using System; using System.Collections.Generic; using System.Text; using UnityEngine; public delegate void u3d(string name); public class DM02Brridge:MonoBehaviour { private void Start() { EngineSystem AA = new OpenGL();//父对象类型,实例化子对象 Cube BB = new Cube(AA); BB.Draw(); AA = new DirectX(); Sphere SP = new Sphere(AA); SP.Draw(); } } public class IHshaPe //类型总类 { public string name; //字段名,让图形子类去直接赋值 public EngineSystem Eng;//引擎总类,让引擎分类被实例化的时候复制 public IHshaPe(EngineSystem l_eng)//让实例化后的括号里写入用何种引擎 { Eng = l_eng; } public void Draw()//子类共有的方法,让父类来写! { Eng.DrawEng(name); //引擎总类里的那个(目前是唯一)的方法 } } public abstract class EngineSystem//引擎总类 { public abstract void DrawEng(string name);//Eng..根据其中的值,去找下面的子类中的方法..DrawEng..子类中同名的方法(赋值的内容) } public class Sphere : IHshaPe //图形类都继承图形总类 { public Sphere(EngineSystem l_eng) : base(l_eng) { base.name = "Sphere"; } } public class OpenGL:EngineSystem { public override void DrawEng(string name) { Debug.Log("OpenGL绘制了:" + name); } } public class Cube:IHshaPe { public Cube(EngineSystem l_eng) : base(l_eng) { name = "Cube"; } } public class DirectX:EngineSystem//引擎都继承引擎总类 { public override void DrawEng(string name) { Debug.Log("DrectX绘制了:" + name); } }