记录自己设计程序的一些代码

此程序设计时使用了单例以及工程模式的设计想法;

此代码的作用是设计一个类 可以创建图片,并且动态的给图片添加一些点击事情  。代码如下:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
using UnityEngine.Video;

public class CreatImage
{

    private static CreatImage instance;
    public static CreatImage Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new CreatImage();
            }
            return instance;
        }
    }

    Sprite[] sprites ;
    Transform parents;
    List<Texture2D> allTex2d = new List<Texture2D>();
    public static int   i;
    GameObject game;
    public  VideoPlayer [] video;
   
    public void Initial()
    {
       
        // sprites = Resources.LoadAll<Sprite>("Mul");
        load();
       
        parents = GameObject.FindGameObjectWithTag("Based").transform;
    }

    public  GameObject CreatGameObject(int indexs, Vector3 pos,string name)
    {
        game = new GameObject();
        game.transform.parent = parents;

       // game.transform.localPosition = pos;  new的GameObject 创建的位置
      // game.transform.localScale = game.transform.localScale * 10; new的GameObject 创建的大小
        game.transform.SetAsFirstSibling(); //始终创建在最上端
        game.gameObject.name = name;// 游戏对象在面上上的名称
        Image tmpImage = game.AddComponent<Image>();//添加图片
        switch (name)
        {

//给不同的名称的图片绑定不同的点击事情   、此处有待优化 扩展性不高
            case "0":
                AddTriggersListener(game, EventTriggerType.PointerClick, click01);
                break;
            case "1":
                AddTriggersListener(game, EventTriggerType.PointerClick, click02);
                break;
            default:
                break;
        }
      
        indexs = indexs % sprites.Length; //防止下标越界
        tmpImage.sprite = sprites[indexs];
        
        return game;
    }
    void load()
    {
        DirectoryInfo direction = new DirectoryInfo(Application.persistentDataPath);

        FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories);
        Debug.Log(files.Length);

        sprites = new Sprite[files.Length];
        for (int i = 0; i < files.Length; i++)
        {
            //过滤掉临时文件   此处若是把资源放在SteamingAssets下 需要 若是在 persistentDataPath路径下 可以不用
            if (files[i].Name.EndsWith(".meta"))
            {
                continue;
            }
            string name = Path.GetFileNameWithoutExtension(files[i].ToString());
            Debug.Log(name);
            Texture2D tx = new Texture2D(100, 100);
            tx.LoadImage(getImageByte(Application.persistentDataPath + "/"+name+".jpg"));
            Debug.Log(Application.persistentDataPath + "/" + name + ".jpg");
            // allTex2d.Add(tx);

//给Sprite赋值,奖tex2D转成精灵图片
            sprites[i]= Sprite.Create(tx, new Rect(0, 0, tx.width, tx.height),new Vector2(0.5f,0.5f));
        }

    //    i = files.Length ;

//给对应的播放器赋值 此处其实也可以动态生成。因时间关系。故在面板中直接创建了       

video = new VideoPlayer[files.Length];
        for (int i = 0; i < video.Length; i++)
        {

//赋值
            video[i] = GameObject.FindGameObjectsWithTag("Video")[i].GetComponent<VideoPlayer>();
           
            Debug.Log(video[i].name);
        }

        for (int i = 0; i < video.Length; i++)
        {
            video[i].gameObject.SetActive(false);
        }

    }

  
    private static byte[] getImageByte(string imagePath)
    {
        FileStream files = new FileStream(imagePath, FileMode.Open);
        byte[] imgByte = new byte[files.Length];
        files.Read(imgByte, 0, imgByte.Length);
        files.Close();
        return imgByte;
    }

//给UI 添加事情

    private void AddTriggersListener(GameObject obj, EventTriggerType eventID, UnityAction<BaseEventData> action)
    {
        EventTrigger trigger = obj.GetComponent<EventTrigger>();
        if (trigger == null)
        {
            trigger = obj.AddComponent<EventTrigger>();
        }

        if (trigger.triggers.Count == 0)
        {
            trigger.triggers = new List<EventTrigger.Entry>();
        }

        UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = eventID;
        entry.callback.AddListener(callback);
        trigger.triggers.Add(entry);
    }

 

//回调的方法 此处应该可以继续优化

    void click01(BaseEventData data)
    {
        // Debug.Log("哈哈哈哈我是第一张图");
        video[0].gameObject.SetActive(true);
        video[0].transform.DOMoveX(960,2);
    }

    void click02(BaseEventData data)
    {
        video[1].gameObject.SetActive(true);
        video[1].transform.DOMoveX(960, 2);
        Debug.Log("哈哈哈哈我是第一张图");
    }
    void click03(BaseEventData data)
    {
        Debug.Log("哈哈哈哈我是第一张图");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值