unity笔记

物体的各种控制方法

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Componentl : MonoBehaviour
{
    // Transform transform;
    GameObject obj;
    public float floSpeed = 0;
    public float floRotate = 0;


    // Start is called before the first frame update
    void Start()
    {
        #region 第一节课
        // obj = GameObject.Find("Sphere"); // 找到球体
        //Debug.Log(transform.name); // 名字
        //Debug.Log(transform.tag); // 标签
        //Debug.Log(transform.position); // 位置
        //Debug.Log(transform.rotation); // 角度
        //Debug.Log(transform.eulerAngles); // 欧拉角
        //Debug.Log(transform.localEulerAngles); // 局部欧拉角
        //Debug.Log(transform.localPosition); // 局部位置
        //Debug.Log(transform.localRotation); // 局部角度
        //Debug.Log(transform.localScale); // 局部缩放
        //Debug.Log(transform.parent); // 父物体
        //Debug.Log(transform.childCount); // 子物体数量
        //Debug.Log(transform.forward); // 前方
        //Debug.Log(transform.up); // 上方
        //Debug.Log(transform.right); // 右边 



        // 其他常用方法
        // GameObject.Instantiate(obj, transform.position, transform.rotation); // 复制对象

        #endregion

        // 摄像机跟随物体
        // 控制摄像机
        Camera.main.transform.SetParent(transform); // 摄像机的transform变成当前物体的transform
        Camera.main.transform.localPosition = new Vector3(0, 3, -4); // 设置局部位置可以看到物体
        Camera.main.transform.localEulerAngles = new Vector3(6, 0, 0); // 摄像机稍微往下偏一点
    }

    // Update is called once per frame
    void Update()
    {
        #region 物体移动旋转
        //transform.Translate(Vector3.right * 0.01f);
        // 物体移动的第一种方法
        // transform.position += new Vector3(0, 2, 3); // 新建一个结构体
        // transform.position += Vector3.up * floSpeed * Time.deltaTime; // Time.deltaTime是每帧运行的时间
        // 1.在unity怎么调速度   2. 上节课运行了以后物体找不到了
        // ***********************
        // 物体移动的第二种方法
        //transform.Translate(Vector3.up * floSpeed * Time.deltaTime);

        // 物体旋转
        // transform.Rotate(Vector3.up * floRotate * Time.deltaTime);

        // 绕..物体旋转
        // transform.RotateAround(obj.transform.position, Vector3.up, floRotate * Time.deltaTime);

        // 盯住看
        // transform.LookAt(Camera.main.transform);

        // 其他常用方法
        // GameObject.Destroy(obj); // 删除游戏对象
        // Resources.Load(); // 加载游戏资源
        //  Application.Quit(); // 退出游戏

        //if (Input.GetKey(KeyCode.W)) {
        //    floRotate = 3000;
        //} else {
        //    floRotate = 0;
        //} 
        #endregion

        Move();
        Look();
    }

    // 鼠标控制物体旋转
    private void Look() {
        float x = Input.GetAxis("Mouse X") * floRotate * Time.deltaTime;
        // float y = Input.GetAxis("Mouse Y") * floRotate * Time.deltaTime;
        transform.Rotate(Vector3.up, x);
        // transform.Rotate(Vector3.up, y);
    }

    // 键盘控制物体平移
    private void Move() {
        float x = Input.GetAxis("Horizontal"); // 左右向
        float z = Input.GetAxis("Vertical"); // 前后向
        transform.Translate(new Vector3(x, 0, z) * floSpeed * Time.deltaTime);

        // 世界坐标系移动
        // cc.Move(new Vector3(x, 0, z) * floSpeed * Time.deltaTime);
        // cc.isGrounded(); // bool值 判断是否在地面
        // cc.SimpleMove(new Vector3(x, 0, z) * floSpeed);

        // 局部坐标系移动
        // cc.SimpleMove((transform.forward * z + transform.right * x) * floSpeed);
    }


    private void FixedUpdate() {
        
    }
}

输入系统、角色控制器、碰撞体、刚体、射线

  1. 输入系统 : InputSystem
  2. 角色控制器 CharacterController : 不能同时添加刚体组件
    Move(): 需要乘deltaTime, 不受重力影响, 需要使用isGrounded判断
    SimpleMove(): 不需要乘deltaTime, 不受重力影响
  3. 碰撞体 Collider
    碰撞检测:两方都有Collider, 至少一方有Rigidbody
  4. 刚体 Rigidbody
  5. 射线 Ray
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Componentl2 : MonoBehaviour
{
    public float floSpeed = 50;
    public float floRotate = 180;
    public GameObject Sphere;

    // CharacterController cc; // 创建一个容器
    Rigidbody rb;

    // Start is called before the first frame update
    void Start()
    {
        // cc = GetComponent(); // 把对象付给它
        rb = GetComponent<Rigidbody>();

        //rb.velocity = new Vector3(); // 物体初速度

        //rb.AddForce(new Vector3()); // 给物体添加力


    }

    // Update is called once per frame
    void Update()
    {
        #region 第二节课
        // 键盘控制代码
        //if (Input.GetKey(KeyCode.Escape)) {
        //    Debug.Log("按住空格");
        //}
        //if (Input.GetKeyUp(KeyCode.Space)) {
        //    Debug.Log("抬起空格");
        //    transform.Translate(Vector3.up * 10);
        //}
        //if (Input.GetKeyDown(KeyCode.Space)) {
        //    Debug.Log("按下空格");
        //}

        // 鼠标控制代码
        //if (Input.GetMouseButton(0)) {
        //    Debug.Log("按住鼠标左键");
        //}
        //if (Input.GetMouseButtonUp(0)) {
        //    Debug.Log("抬起鼠标左键");
        //    transform.Translate(Vector3.up * 10);
        //}
        //if (Input.GetMouseButtonDown(0)) {
        //    Debug.Log("按下鼠标左键");
        //}

        // 虚拟控制器控制
        //Debug.Log(Input.GetAxis("Horizontal"));
        //Debug.Log(Input.GetAxis("Vertical"));
        //Debug.Log(Input.GetAxisRaw("Horizontal"));
        //Debug.Log(Input.GetAxisRaw("Vertical"));

        // 鼠标转动视角
        //Input.mousePosition();
        //Input.GetAxis("Mouse X");
        //Input.GetAxis("Mouse Y");

        //Debug.Log(""); 
        #endregion

        learnRay();
    }

    private void learnRay() {
        if (Input.GetMouseButtonDown(0)) { // 单击鼠标左键
            // 创建一道射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            // 检测射线
            // out关键字 会输出一个信息 return只能return一个值,是一个bool值 out返回物体的信息
            if (Physics.Raycast(ray, out RaycastHit hitInfo)) {
                Debug.Log(hitInfo.transform.name);
                Debug.Log(hitInfo.point);
                //hitInfo.point; // 射线撞击点

                GameObject shell = Instantiate(Sphere,transform.position,transform.rotation);
                shell.GetComponent<Rigidbody>().velocity = Vector3.Normalize(hitInfo.point - transform.position) * 20;
            }
        }
    }

    #region 碰撞检测的方法
     碰撞检测的方法
     碰撞刚发生
    //private void OnCollisionEnter(Collision collision) {
    //    // Destroy(collision.transform.gameObject); 
    //    Debug.Log("刚碰到");
    //}
     碰撞结束
    //private void OnCollisionExit(Collision collision) {
    //    Debug.Log("碰完了");
    //}
     碰撞进行时
    //private void OnCollisionStay(Collision collision) {
    //    Debug.Log(collision.transform.name);
    //} 




    private void OnTriggerEnter(Collider other) {
        rb.AddForce(transform.up * 500); // 撞到以后跳一下
        //Debug.Log("我进来啦");
    }

    private void OnTriggerStay(Collider other) {
        Debug.Log(other.transform.name);
    }

    private void OnTriggerExit(Collider other) {
        Debug.Log("我走啦");
    }

    #endregion
}

Unity音视频系统

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class Component3 : MonoBehaviour
{
    AudioSource ads;
    AudioClip ac;
    List<AudioClip> acs = new List<AudioClip>();
    int j = 0;
    // Start is called before the first frame update
    void Start()
    {
        ads = GetComponent<AudioSource>(); // 找到组件

        #region AudioSource常用属性和方法
        //ads.Play(); // 播放
        //ads.Pause(); // 暂停
        //ads.UnPause(); // 继续播放
        //ads.PlayOneShot(); // 播放一次 配合音效使用
        //ads.volume = 1.0f; // 音量
        //ads.playOnAwake = true; // 唤醒时播放
        //ads.mute = false; // 静音
        //ads.loop = false; // 循环
        //ads.isPlaying = false; // 是否播放中
        //ads.clip; // 声音片段 
        #endregion

        // 加载音频资源的方法
        // ac = Resources.Load("AudioClips/1");
        for (int i = 0; i < 3; i ++ ) {
            ac = Resources.Load<AudioClip>("AudioClips/" + (i + 1));
            acs.Add(ac);
        }
    }

    // Update is called once per frame
    void Update()
    {
        changeVolume();
        playMusic();
        changeMusic();
    }

    private void changeVolume() {
        if (Input.GetKeyDown(KeyCode.M)) {
            ads.volume += 0.05f;
        } else if (Input.GetKeyDown(KeyCode.N)) {
            ads.volume -= 0.05f;
        }
    }

    private void playMusic() {
        if (Input.GetKeyDown(KeyCode.B)) {
            if (ads.isPlaying) {
                ads.Pause(); // 暂停
            } else {
                ads.Pause();
            }
        }
    }

    private void changeMusic() {
        if (Input.GetKeyDown (KeyCode.Tab)) {
            ads.clip = acs[j];
            ads.Play();

            if (j < acs.Count - 1) {
                j ++ ;
            } else {
                j = 0;
            }
        }
    }
}

学习动画控制器组件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Component4 : MonoBehaviour
{
    Animator am;
    // Start is called before the first frame update
    void Start()
    {
        am = GetComponent<Animator>();

        StartCoroutine(learnConroutine());
        // 关闭协程
        //StopCoroutine(learnConroutine()); 
        //StopAllCoroutines();
    }

    // Update is called once per frame
    void Update()
    {
        //if (Input.GetKeyDown(KeyCode.F)) {   
        //    am.SetTrigger("pickup"); // 设置触发
        //    //am.SetBool(); // 设置bool值
        //    //am.SetFloat(); // 设置浮点数
        //    //am.SetInteger(); // 设置整数值

        //}
    }

    // Unity中协程的使用,采用的是yield return ,返回值是一个协程器
    // 协程:介于进程和线程之间的一个定义,简单理解为一段一段的程序
    IEnumerator learnConroutine() { // 协程器
        // 技能CD
        while (true) {
            if (Input.GetKeyDown(KeyCode.F)) {
                am.SetTrigger("pickup"); // 设置触发
                yield return new WaitForSeconds(5); 
            } else {
                yield return null;
            }
            ...
            //yield return new WaitForSeconds(5); // 过5秒再执行
            ...
            //yield return null; // 把程序变成要的之前先执行,下次再执行的话,到要的之后再执行
        }
        
    }

}

学习GUI系统

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // 旧版GUI命名空间
using TMPro; // 新版GUI命名空间
using UnityEngine.SceneManagement; // 场景管理
using System;

public class Component5 : MonoBehaviour
{
    // 给GUI对象赋值的两种方式:
    // 第一种方式:getcomponent
    //Text t;
    // 第二种方式:public + 外界赋值
    public Text t;
    public Image image;
    public RawImage rawImage;
    public Button button;
    public InputField inputField;
    public Toggle toggle;
    public Slider slider;
    public Scrollbar scrollbar;
    public Dropdown dropdown;

    //TextMeshPro tmp;
    // Start is called before the first frame update
    void Start()
    {
        // 文本Text
        //t.GetComponentInChildren(); 
        t.text = "好好听课别玩了"; // 更改文本内容
        //t.font; // 字体

        // 图片 Image
        //image.sprite = Resources.Load("") as Sprite; // 更改图片

        // 原始图片 RawImage
        rawImage.texture = Resources.Load<Texture>("Images/bg2") as Texture; // 更改背景图片

        // 按钮 Button
        // 调用方法的第一种方式:public + Unity中设置

        // 调用方法的第二种方式:AddListener
        button.onClick.AddListener(clickButton); // 添加监听 保证没有很多对外接口

        // 文本输入框 InputField
        //inputField.text; // 输入的内容

        // 切换 Toggle
        toggle.onValueChanged.AddListener(clickToggle); // 改变值的写法
        //toggle.isOn; // 不改变值

        // 滑动条 Slider
        slider.onValueChanged.AddListener(changeSlider);
        //slider.value;

        // 滚动条 Scrollbar
        scrollbar.onValueChanged.AddListener(changeSlider);
        //scrollbar.value;

        // 下拉列表 Dropdown
        InitDropdown();
        dropdown.onValueChanged.AddListener(changeDropdown);
    }

    public void InitDropdown() {
        dropdown.options.Clear(); // 清除列表
        Dropdown.OptionData opl = new Dropdown.OptionData();
        opl.text = "比尔吉沃特";
        dropdown.options.Add(opl);
        Dropdown.OptionData op2 = new Dropdown.OptionData();
        op2.text = "德玛西亚";
        dropdown.options.Add(op2);
    }

    void changeDropdown(int intValue) {
        switch (intValue) {
            case 0:
                Debug.Log("登录比尔吉沃特");
                break;
            case 1:
                Debug.Log("登录德玛西亚");
                break;
            default:
                break;
        }
    }

    void clickButton() {
        if (inputField.text == "123") {
            Debug.Log("回答正确");
        } else {
            Debug.Log("回答错误");
        }
    }

    void clickToggle(bool isOn) { // 必须带bool参数
        if (isOn) {
            Debug.Log("静音");
        } else {
            Debug.Log("播放");
        }
    }

    void changeSlider(float floValue) {
        if (floValue < 0.3) {
            Debug.Log("血量太低了");
        } else {
            Debug.Log("血量健康");
        }
    }
}

学习Unity事件系统EventSystem

学习Unity事件系统EventSystem
IPointr ... Handler // 指针事件接口
I ... DragHandler // 拖拽事件接口

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; // 事件系统命名空间
using UnityEngine.UI;
using TMPro; // 新版文本命名空间

public class Component6 : MonoBehaviour, IPointerClickHandler, IDragHandler, IPointerEnterHandler, IPointerExitHandler {
    // 新版文本的类名称
    //TMP_Text;
    //TMP_InputField;
    //TMP_Dropdown dropdown
    public void OnDrag(PointerEventData eventData) { // 拖拽
        //transform.position = Input.mousePosition;
        transform.position = eventData.position; // 两个都可以实现
    }

    public void OnPointerClick(PointerEventData eventData) { // 点击
        Debug.Log("点击图片");
        
    }

    public void OnPointerEnter(PointerEventData eventData) { // 进入
        GetComponent<Image>().color = Color.blue;
    }

    public void OnPointerExit(PointerEventData eventData) { // 退出
        GetComponent<Image>().color = Color.white;
    }
}

控制声音的GUI组件、退出游戏

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Component7 : MonoBehaviour
{
    // 控制声音的GUI组件
    public Toggle toggle;
    public Slider slider;
    AudioSource ads;

    // 退出游戏
    public Button button;

    // Start is called before the first frame update
    void Start()
    {
        ads = GetComponent<AudioSource>();
        toggle.onValueChanged.AddListener(PlayMusic);
        slider.onValueChanged.AddListener(ChangeVolunme);
        button.onClick.AddListener(QuitGame);

    }
    private void QuitGame() {
        Application.Quit();
    }

    private void ChangeVolunme(float arg0) {
        ads.volume = arg0;
    }

    private void PlayMusic(bool arg0) { 
        if (arg0) {
            ads.Pause();
        } else {
            ads.UnPause();
        }
    }
}

学习数据库操作

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient; // MySQL连接命名空间
using System;
using Org.BouncyCastle.Security;

public class Component8 : MonoBehaviour
{
    // 服务器、端口号、数据库、用户名、密码、数据格式...
    string strConn = "server = localhost; port = 3306; database = dbforcsharp; username = root; password = LiuYue20030214; charset=utf8;";

    // 创建MySQL连接器
    MySqlConnection sqlConnection;

    // Start is called before the first frame update
    void Start()
    {
        // 操作数据库的第一步:
        try {
            sqlConnection = new MySqlConnection(strConn);
            sqlConnection.Open(); // 连接数据库
            Debug.Log(sqlConnection.State); // 输出状态

            //1.增 insert
            //int i1 = InsertData();
            //Debug.Log(i1);

            //2.删 delete
            //int i2 = DeleteData();
            //Debug.Log(i2);

            //3.改 update
            //int i3 = UpdateData();
            //Debug.Log(i3);

            // 4. 查
            selectData();

        } catch (System.Exception) {

            throw;
        } finally {
            if (sqlConnection.State.ToString() == "Open") {
                // 操作数据库的最后一步
                sqlConnection.Close();
                Debug.Log(sqlConnection.State);
            }
        }
    }
    /// 
    /// 查询某一行数据
    /// 

    private void selectData() {
        // 第一步 写SQL语句
        string strSql = "select * from peo where name = '虚竹';";

        // 第二步 使用MySQLCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection)) {

            // 第三步 执行ExecuteReader方法 
            using (MySqlDataReader mysqlDataReader = mySqlCommand.ExecuteReader()) {

                // 第四步 通过MySQLDataReader读取数据
                while (mysqlDataReader.Read()) {
                    // 使用GetXXX获取不同的数据
                    Debug.Log(mysqlDataReader.GetString(0));
                    Debug.Log(mysqlDataReader.GetString(1));
                    Debug.Log(mysqlDataReader.GetString(2));
                }
            }


        }

    }

    /// 
    ///  所有的非查询操作都是一样的步骤
    /// 

    private int InsertData() {
        // 第一步 写SQL语句
        string strSql = "insert into peo (name, age) values ('虚竹', 25);";

        // using降低内存占用
        // 第二步 使用MySQLCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection)) {
            
            // 第三步 执行ExecuteNonQuery方法 执行非查询操作 返回int 当数字不为0 表示第i行发生更改
            return mySqlCommand.ExecuteNonQuery();

        }
    }

    private int DeleteData() {
        // 第一步 写SQL语句
        string strSql = "delete from peo where name = '刘悦';"; // where 其中

        // using降低内存占用
        // 第二步 使用MySQLCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection)) {

            // 第三步 执行ExecuteNonQuery方法 执行非查询操作 返回int 当数字不为0 表示第i行发生更改
            return mySqlCommand.ExecuteNonQuery();

        }
    }

    private int UpdateData() {
        // 第一步 写SQL语句
        string strSql = "update peo set name = '张三疯' where name = '张三丰';";

        // using降低内存占用
        // 第二步 使用MySQLCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection)) {

            // 第三步 执行ExecuteNonQuery方法 执行非查询操作 返回int 当数字不为0 表示第i行发生更改
            return mySqlCommand.ExecuteNonQuery();

        }
    }
}

实现登录和注册功能

  • 登录: 获取输入框内容 -> 连接并打开数据库 -> 查找用户名和密码 -> 关闭数据库
    Y -> 对比用户名和密码 -> Y -> 登录成功
    Y -> 对比用户名和密码 -> N -> 提示登录失败
    N -> 提示登录失败
  • 注册: 获取输入框内容 -> 连接并打开数据库 -> 查找用户名和密码
    Y -> 关闭数据库 -> 提示用户已存在
    N -> 添加用户名和密码 -> 关闭数据库 -> 注册成功

  • 分解: 按照顺序分解成一个一个模块, 不一定优
  1. 连接并打开数据库
  2. 查找用户名和密码
  3. 关闭数据库
  4. 对比用户名和密码
  5. 添加用户名和密码

  • 接口:
  1. 登录 1234
  2. 注册 1235

  • 对象: GUI:输入框2 按钮2 文本

  • 连接数据库: MySqlConnection, ...command, ...reader

  • 字符串: 连接数据库, 用户名2, 密码2(用户输入+数据库)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient;
using TMPro;
using UnityEngine.UI;
using System;
using UnityEngine.SceneManagement;

public class Component9 : MonoBehaviour
{
    // 创建GUI
    // 新版 待改 -> 已改旧版
    public InputField inputField1;
    public InputField inputField2;
    public Button button1;
    public Button button2;
    public Text tip;

    // 服务器、端口号、数据库、用户名、密码、数据格式...
    string strConn = "server = localhost; port = 3306; database = dbforcsharp; username = root; password = LiuYue20030214; charset=utf8;";

    // 创建MySQL连接器
    MySqlConnection sqlConnection;

    string username;
    string password;
    string usernameDB;
    string passwordDB;

    // 事件 监听 执行
    // Start is called before the first frame update
    void Start()
    {
        button1.onClick.AddListener(Login);
        button2.onClick.AddListener(Registrations);
    }

    public void Login() {
        username = inputField1.text;
        password = inputField2.text;
        //1.连接并打开数据库
        ConnectDB();
        //2.查找用户名和密码
        SelectDB(username);
        //3.关闭数据库
        CloseDB();
        //4.对比用户名和密码
        CompareDB();
    }

    public void Registrations() {
        username = inputField1.text;
        password = inputField2.text;
        //1.连接并打开数据库
        ConnectDB();
        //2.查找用户名和密码

        // 我写的
        //if (username == usernameDB) {
        //    tip.text = "用户名已存在, 请重新输入";
        //} else {
        //    int i = InsertDB(username, password);
        //    CloseDB();
        //    tip.text = "创建成功";
        //}

        // 老师写的
        if (SelectDB(username)) {
            tip.text = "用户名已存在";
        } else {
            // 3. 添加用户名和密码
            if (InsertDB(username, password) == 1) {
                tip.text = "注册成功";
            } else {
                tip.text = "注册失败";
            }
            
        }

        // 4. 关闭数据库
        CloseDB();
    }

    private void ConnectDB() {
        try {
            sqlConnection = new MySqlConnection(strConn);
            sqlConnection.Open(); // 连接数据库
            Debug.Log(sqlConnection.State); // 输出状态
        } catch (Exception) {

            throw;
        }
    }

    private bool SelectDB(string n) {
        bool isExist = false;
        // 第一步 写SQL语句
        string strSql = "select * from user where username = '" + n + "';";

        // 第二步 使用MySQLCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection)) {

            // 第三步 执行ExecuteReader方法 
            using (MySqlDataReader mysqlDataReader = mySqlCommand.ExecuteReader()) {

                // 第四步 通过MySQLDataReader读取数据
                while (mysqlDataReader.Read()) {
                    isExist = true;
                    usernameDB = mysqlDataReader.GetString(0);
                    passwordDB = mysqlDataReader.GetString(1);
                }
            }
        }
        return isExist;
    }

    private void CloseDB() {
        if (sqlConnection.State.ToString() == "Open") {
            // 操作数据库的最后一步
            sqlConnection.Close();
            Debug.Log(sqlConnection.State);
        }
    }

    private void CompareDB() {
        if (usernameDB == username && passwordDB == password) {
            // tip.text = "登录成功";
            SceneManager.LoadScene(1);
            // SceneManager.LoadScene("Scene1");
        } else {
            tip.text = "登录失败";
        }
    }

    private int InsertDB(string u, string p) {
        // 第一步 写SQL语句
        string strSql = "insert into user (username, password) values ('" + u + "', '" + p + "');";

        // using降低内存占用
        // 第二步 使用MySQLCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection)) {

            // 第三步 执行ExecuteNonQuery方法 执行非查询操作 返回int 当数字不为0 表示第i行发生更改
            return mySqlCommand.ExecuteNonQuery();

        }
    }
}

你可能感兴趣的:(考研,unity,笔记)