Unity C#学习

周飞飞的C#学习笔记 #Day 5

Posted on 2021-03-04,4 min read

今天开始学习Unity官方的C#中级教程了

终于是回到学校啦,吃完一顿久违的粤饺皇就跑到一教A来啦,没想到这里已经有这么多卷人了嚯!

今日重点

1. 创建属性(字段)

  • 属性的名称最好是变量的名称开头大写
  • 属性相较于直接声明public的优势在于可以添加/删除get,set函数来达到只读或只写的目的;同时也可视作函数在访问时进行其他操作

2. 通用(泛型)

  • 可以通过where来限制通用类型
  • 可以创建泛用类

3.成员隐藏

  • 意即在子类中对父类的成员变量进行重新声明

4. 接口(interface)

  • 声明接口的名称时开头一般会有大写字母I,且一般以-able结尾,当然具体还是要根据接口的功能
  • 接口用于跨多个类定义通用功能

5. 扩展方法

  • 扩展方法必须放在一个非泛型静态类中,所以最好新建一个类来存放他们

6. 列表和字典

  • 使用列表和字典需要添加 using System.Collections.Generic
  • 在类中定义List时应当注意方法
  • List可以结合IComparable接口使用其自带的Sort()方法对任何对象进行排序

7. 协程

8. 四元数

9. 委托

  • 使用delegate关键字创建委托
  • 使用同一委托来调用不同的方法
  • 使用+=来同时调用多个方法

10. 特性

  • 通过特性可以直接对变量进行限制,而不需要用if等语句来进行限制

11. 事件

  • 与公共多播委托相似

今日练习

求求你戳戳人家嘛
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

List<Badguy> badguys = new List<Badguy>();  //创建一个Badguy的列表
badguys.Add(new Badguy(1, "Adam"));  //此处有疑问,为什么这两句放在类里面就不可以???


public interface IKillable   //创建接口,这样其他类就可以引用该接口
{
    void Kill();
}


public class StudyDay3 : MonoBehaviour
{
    delegate void Delegate();
    Delegate myDelegate;

    [Range(-100,100)]public int speed;         //通过添加特性直接对变量进行限制
    private int experience;
    public int Experience           //声明一个属性,通过属性来访问私有成员
    {
        get
        {
            return experience;
        }
        set
        {
            experience = value;
        }
    }

    public T GenericMethod<T>(T param) where T: struct  //创建通用方法,后面的限制可以让T只能是值类型,同样可以添加其他限制,详情请查询
    {
        return param;
    }

    
    
    public int Health { get; set; }   //这样可以自动完成

    // Start is called before the first frame update
    void Start()
    {
        transform.ResetTransform();  //注意,该扩展方法就属于transform类,因此可以直接调用,并且不需要参数
        myDelegate = Space;          //使用委托来代替Space方法
        myDelegate(); 
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    void Space()
    {

    }
}

public class InterfaceTest : MonoBehaviour, IKillable  //引用并实现接口
{
    public void Kill()
    {
    }
}

public static class ExtensionMethod
{
    public static void ResetTransform(this Transform trans) //注意必须添加static,同时使用this来让它编程扩展方法而不是静态方法
    {
        //该函数的第一个参数即调用对象,因此在调用该函数时,无需提供参数
        trans.position = Vector3.zero;
    }

}

public class Badguy
{
    int id;
    string name;

    public Badguy(int i,string n)
    {
        id = i;
        name = n;
    }
}

今日总结

今天看完了所有的C#中级编程的内容,当然,只是“看完“,基本上从协程开始就听得迷迷糊糊的了。但我也并没有深究,想到这些内容或许我会比较少用到,而用到的时候也可以针对该内容进行深挖。接下来我希望试试通过编写代码来完成点击GUI,生成物品的操作。
😉😉😉


下一篇: 以后,也请多多指教!😁→

loading...