• 根据XX对XX产生行为的方法(角色对应武器)


    可以用委托来搞定 

    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);
        }
    }
  • 相关阅读:
    Java枚举和反射
    Java网络编程
    django 中文乱码问题
    chrome 开发人员工具
    js 编码问题
    js 复制内容到剪切板
    网页获取页面上选择的内容
    git命令
    Jquery和Javascript对象之间的转换
    Spring Data Elasticsearch
  • 原文地址:https://www.cnblogs.com/signzun/p/7455511.html
Copyright © 2020-2023  润新知