zoukankan      html  css  js  c++  java
  • untiy

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using System.Collections.Generic;
    using System.Threading;
    using System.Linq;
    using System.IO;
    using System.Data.SqlClient;
    using System;
    
    public class UnityTexture_SqlServer : MonoBehaviour
    {
        public GameObject cube;
        public InputField inputField;
    
        static string str_SQL_Server = "server=Yct201902261943\SQL_SERVER_2012;database=Unity;uid=sa;pwd=123";
    
        SqlConnection con = new SqlConnection(str_SQL_Server);
    
        private void Start()
        {
            if (cube == null)
            {
                cube = GameObject.Find("cube");
            }
            if (inputField == null)
            {
                inputField = GameObject.Find("inputField").GetComponent<InputField>();
            }
        }
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.Q))
            {
                SqlOpen();
                SQL_Texture();
                SqlClose();
                Debug.Log("Insert SQL Texture");
            }
            if (Input.GetKeyDown(KeyCode.W))
            {
                SqlOpen();
                Delete_TextureInfos(inputField.text);
                SqlClose();
                Debug.Log("Delete SQL Texture"); 
            }
            if (Input.GetKeyDown(KeyCode.E))
            {  
                Texture texture = cube.GetComponent<MeshRenderer>().material.mainTexture;
                Texture2D t2d = TextureToTexture2D(texture);
                byte[] bytesArr = t2d.EncodeToJPG();
                string Mesh_Texture = Convert.ToBase64String(bytesArr);
                SqlOpen();
                Update_TextureInfos(inputField.text, Mesh_Texture);
                SqlClose();
                Debug.Log("Update SQL Texture");
    
            }
            if (Input.GetKeyDown(KeyCode.R))
            {
                string Mesh_Texture = "";
                SqlOpen();
                
                string error = Select_TextureInfos(inputField.text, out Mesh_Texture);
                if (string.IsNullOrEmpty(error))
                {
                    byte[] byte_Texture = System.Convert.FromBase64String(Mesh_Texture);
    
                    Texture2D texture = new Texture2D(1, 1, TextureFormat.ARGB4444, false);
                    var Is_Success = texture.LoadImage(byte_Texture);
                    texture.Apply();
                    cube.GetComponent<MeshRenderer>().material.mainTexture = texture;
                }
                SqlClose();
                Debug.Log("Select SQL Texture");
            }
        }
        private void SQL_Texture()
        {
            string strPath = @"C:UsersAdministratorDesktopTexture";
    
            DirectoryInfo theFolder = new DirectoryInfo(strPath);
    
            FileInfo[] theFiles = theFolder.GetFiles();
    
            for (int i = 0; i < theFiles.Length; i++)
            {
                string Texture_Name = Path.GetFileNameWithoutExtension(theFiles[i].FullName);
    
                FileStream fs = new FileStream(theFiles[i].ToString(), FileMode.Open);
    
                byte[] byte_Texture = new byte[(int)fs.Length];
    
                fs.Read(byte_Texture, 0, (int)fs.Length);
    
                fs.Close();
    
                string Mesh_Texture = System.Convert.ToBase64String(byte_Texture);
    
                string str_error_meshInfos = Insert_TextureInfos(Texture_Name, Mesh_Texture);
    
                Thread.Sleep(100);
    
                if (str_error_meshInfos != null) { Debug.LogError(str_error_meshInfos); }
            }
        }
    
        private Texture2D TextureToTexture2D(Texture texture)
        {
            Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
            RenderTexture currentRT = RenderTexture.active;
            RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);
            Graphics.Blit(texture, renderTexture);
    
            RenderTexture.active = renderTexture;
            texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
            texture2D.Apply();
    
            RenderTexture.active = currentRT;
            RenderTexture.ReleaseTemporary(renderTexture);
    
            return texture2D;
        } 
    
        private void SqlOpen()
        {
            SqlClose();
            con.Open();
        }
    
        private string Insert_TextureInfos(string Texture_Name, string Mesh_Texture)
        {
            string str_return = null;
            try
            {
                string insert = "INSERT INTO[Unity].[dbo].[Table_Texture] ([Texture_Name],[Mesh_Texture]) values( '" + Texture_Name + "','" + Mesh_Texture + "')";
                SqlCommand com_insert = new SqlCommand(insert, con);
                com_insert.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                str_return = e.ToString();
            }
            return str_return;
        }
    
        private string Delete_TextureInfos(string Texture_Name)
        {
            string str_return = null;
            try
            {
                string delete = "DELETE FROM [Unity].[dbo].[Table_Texture] WHERE [Texture_Name] = '" + Texture_Name + "'";
                SqlCommand com_insert = new SqlCommand(delete, con);
                com_insert.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                str_return = e.ToString();
            }
            return str_return;
        }
    
        private string Update_TextureInfos(string Texture_Name, string Mesh_Texture)
        {
            string str_return = null;
            try
            {
                string update = "UPDATE [Unity].[dbo].[Table_Texture] SET [Mesh_Texture] = '" + Mesh_Texture + "' WHERE [Texture_Name] = '" + Texture_Name + "'";
                SqlCommand com_insert = new SqlCommand(update, con);
                com_insert.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                str_return = e.ToString();
            }
            return str_return;
        }
    
        private string Select_TextureInfos(string Texture_Name, out string Mesh_Texture)
        {
            string str_return = "";
            Mesh_Texture = null;
    
            try
            {
                string select = "SELECT * FROM [Unity].[dbo].[Table_Texture] WHERE [Texture_Name] = '" + Texture_Name + "'";
                SqlCommand com_select = new SqlCommand(select, con);
                com_select.ExecuteNonQuery();
    
                SqlDataReader read = com_select.ExecuteReader();
    
                if (read.Read())
                {
                    Mesh_Texture = read["Mesh_Texture"].ToString();
                }
                read.Close();
                com_select.Dispose();
            }
            catch (Exception e)
            {
                str_return = e.ToString();
                Mesh_Texture = null;
            }
            return str_return;
        } 
    
        private void SqlClose()
        {
            con.Close();
        }
    }
    

    如果在Unity调试测试都是可以的(本机数据库是SQL Server 2012 ),但是build后,运行生成的exe文件时却无法连接数据库。

    请把I18N.CJK.dll,I18N.dll ,I18N.West.dll 这个三个DLL 加入到Assets文件夹下,然后build就可以了。

    三个dll的位置:C:Program Files UnityEditorDataMonolibmonounity(本机),或者 :链接:https://pan.baidu.com/s/1iiUWGSCR7mgnAwSXexvD7g   提取码:qq53 

    支持个人观看使用,如商用或转载,请告知! -----萧朗(QQ:453929789 Email:xiaolang_xl@sina.com)
  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/XiaoLang0/p/14600126.html
Copyright © 2011-2022 走看看