C#基础知识
主要记录C#的学习过程,涉及到比较基础的C#知识,完全从零开始学习,或者作为自学的教程。
KingdomMicool
这个作者很懒,什么都没留下…
展开
-
Unity 一些注意事项
不要习惯于在unity面板赋值,这样你的资源导出后再利用时,这些赋值消失。也不要在public int a = 2;这样直接赋值,当场景加载后,可能不会加载出来,而应该在start等里面做赋值的动作。原创 2022-04-17 22:42:31 · 1377 阅读 · 0 评论 -
关于监听者模式使用的注意事项
EventCenter.instance.EventTrigger("Destory", this); EventCenter.instance.AddEventListener("Destory", GetDown);EventTrigger是发出指令的一方,AddEventListener是收到指令并执行GetDown这个方法的一方。他们两个靠的是"Destory"这个暗号来匹配,所以,这个暗号不能雷同,否则两个发命令的人用同一个暗号发命令,那么,所有不相关的人也会收到这个命令。那么,..原创 2022-04-04 21:43:44 · 341 阅读 · 1 评论 -
C#中Unity中,int如果做除法运算可能只会得到0
如果你int a = 4,int b = 5,那么a / b = 0,所以,你要得到正确的小数,要用float原创 2022-03-14 21:21:57 · 4172 阅读 · 0 评论 -
Unity Animator 如何用混合树转到混合树,并实现角色移动后保持朝向不变
做2D动画,我们都知道用混合树做四个朝向的移动,但是,一旦松开按键,角色就会回到idle的朝向,我想让他朝右边移动后停下,依然朝向右边静止。我有八个动画,分别为runFront,runBack,runRight,runLeft,idleFront,idleBack,runRight,runLeft我希望,当我runRight后停下,播放idleRight的动画。而且想都用混合树处理,怎么做?先上代码public class PlayerMove : MonoBehaviour{ pri.原创 2021-08-02 22:32:21 · 678 阅读 · 0 评论 -
为什么要用命名空间using
本来命名空间是没什么用的,你也可以把所有class放一个默认命名空间,那为什么要命名空间呢?为了方便引用别人的东西。比如,你从别人那里拿了一个包来用,里面有非常多的脚本,假如里面有个脚本叫做move,而你这里也有一个脚本叫做move,假如他们都在一个默认命名空间下面,就重复了。所以,要用一个不一样的命名空间,这样拷贝就不会重复。...原创 2021-07-06 20:43:45 · 78 阅读 · 0 评论 -
C# class 类是什么东西?
class,类,就是一个类型,一个抽象。比如奔驰、宝马、丰田、本田,将他们抽象一下,就可以定义一个class类叫做“小汽车”。在往下追溯,宝马X1,X2,X3,X4,X5,这些型号,将他们抽象一下,就可以定义一个class类叫做“宝马”。在往上追溯,小汽车、公交车、消防车,将他们抽象一下,就可以定义一个class类叫做“车”。如此看来,根据颗粒度的不同,定义类是可以随意的,你只要找到一个共同特性,将他们关联起来,就可以定义一个类。但是,为什么要定义类呢?因为要抽象,要泛型。当我们写一个方原创 2021-06-26 10:17:06 · 1214 阅读 · 0 评论 -
unity ScriptableObject里面怎么序列化
[CreateAssetMenu(fileName = "NewBossList", menuName = "List/BossList")]public class BossList : ScriptableObject{ public List<OneBossInfo> bossList = new List<OneBossInfo>(); public OneBossInfo[] one;}[System.Serializable]public c原创 2021-06-20 21:51:30 · 356 阅读 · 2 评论 -
Unity C# 委托delegate和Event事件之间的关系
delegate本身是设定一个框架函数,没有方法实体,但可以给这个框架赋值,赋予它一个方法A,如果使用delegate时,就会调用方法A,如果delegatedelegate只有方法框架和返回值类型和参数,使用delegate时可以输入参数,也就是delegate是可以提供:方法框架和参数。但他缺少方法体。delegate需要找方法体delegate可以用=号给他赋值具体方法体,这样当delegate执行时,就完整了,有参数也有方法体。delegate也可以用+=号来增加具体方法体,这样,当d.原创 2021-06-19 11:33:16 · 353 阅读 · 0 评论 -
Unity C# 委托delegate
变量是程序在内存中为数据开辟的一块空间,面向对象语言中变量可以存放一个具体的数值,或者某个对象的引用。C#则在该基础上更进一步,使用Delegate的机制让存放“函数(Function)”成为可能。用“变量”类比“委托”//定义委托delegate double ParocessDelegate(double param1,double param2);//声明委托类型的变量ProcessDelegate process;//初始化委托变量process =new ProcessDeleg.原创 2021-06-19 10:20:56 · 198 阅读 · 0 评论 -
Unity ISerializationCallbackReceiver 序列化字典
public class SerializationCallbackScript : MonoBehaviour, ISerializationCallbackReceiver{ public List<int> _keys = new List<int> { 3, 4, 5 }; public List<string> _values = new List<string> { "I", "Love", "Unity" }; //U原创 2021-06-18 22:19:00 · 696 阅读 · 1 评论 -
C# Unity return后面写debug是没用的,要写在他前面
C# Unity return后面写debug是没用的,要写在他前面原创 2021-06-17 16:28:03 · 115 阅读 · 1 评论 -
unity if 里面的判断可以判断是否为null
private void OnTriggerEnter(Collider other) { var item = other.GetComponent<Item>(); if (item) { inventory.AddItem(item.item, 1); Destroy(other.gameObject); } }if里面的判断,可以判断item是否为空nu.原创 2021-06-17 14:51:15 · 1344 阅读 · 0 评论 -
C# this,Func,Static
static方法还不能使用this等关键字(this指的是当前的对象),因为它是属于整个类。Func中用this,然后就可以 使用主体.方法 这样使用了,因为this指代当前对象,也就是使用主体,就是实例化的对象。...原创 2021-06-16 17:22:21 · 126 阅读 · 0 评论 -
C# 委托,匿名函数,匿名委托,lambda,Action<>,Func<>,Predicate<>
c# 委托 delegateC#中的lambda表达式匿名委托是为了简化委托,简化了“初始化委托变量,将方法与委托关联起来”这个过程。lambda表达式是为了简化匿名委托。匿名委托和lambda表达式本身都是一个方法来的,但他们都没有名字,所以没法直接调用,要用就只能调用其委托。...原创 2021-06-16 11:12:51 · 279 阅读 · 0 评论 -
unity 技能系统
关于技能系统里面的skillData表,是用来填写数据的,但里面可能包含图片、音频、prefab实体等,怎么用数据表示?这时,就要写一个string和一个gameobject,这个string是用来填写的,比如string写为ballAttack,然后在用到这个skillData时,先进行一次初始化,用ballAttack这个名字去Resources.Load这个gameobject下来。这样做,就是将非数据的东西进行数据化,整张skillData表全是数据。...原创 2021-06-03 15:20:49 · 608 阅读 · 2 评论 -
unity3D Quaternion LookRotation FromToRotation
unity3D Quaternion LookRotation FromToRotation SetLookRotation方法LookRotation的含义就是,计算让Z轴对齐forward,让y轴对齐upward 所需要的旋转四元数。public static Quaternion LookRotation (Vector3 forward, Vector3 upwards= Vector3.up);其中,参数可以只填写Vector3 forward,就是只让正面(默认的正面是立方体(0,0,-原创 2021-05-28 20:11:28 · 272 阅读 · 0 评论 -
C# Delegate委托、Lambda表达式
Delegate委托的作用是什么,为什么需要委托?因为有一个问题要解决,我们写一个方法时,会设定一个参数,这样可以传入不同参数,而输出不同的值。但是,如果我们要写一个方法,该方法可以传入不同参数来调用三种不同的方法,当然,这个可以用switch来实现,但这样多一步,而且维护麻烦。为了解决这个问题,就引入了“方法参数”这个东西,就是把方法作为一个参数来传递。正常的方法的参数不能是方法的,所以就有了委托,来实现把方法作为参数这件事情。public delegate void SpeakLanguag.原创 2021-05-27 11:17:17 · 400 阅读 · 0 评论 -
Unity关于C#属性的理解
public class PlayerDeckVisual : MonoBehaviour { public AreaPosition owner; public float HeightOfOneCard = 0.012f; void Start() { CardsInDeck = GlobalSettings.Instance.Players[owner].deck.cards.Count; } private int cardsIn原创 2021-05-09 14:34:29 · 170 阅读 · 0 评论 -
Unity中对单例的使用理解
单例是在什么时候用?比如两个人的卡牌游戏,轮流的代码就可以用单例,因为单例有唯一性,就是不可能同时出现两个,就是不可能同时又轮到你又轮到我,应该是轮到我了,你就没了,轮到你了,我就没了。这时,就可以设定一个东西,大家轮流用,就是单例。...原创 2021-05-08 18:04:21 · 101 阅读 · 0 评论 -
C#中常量、静态变量、动态变量
常量,是不能改变的。静态变量是独一份,你赋值A,就是A,你再赋值B,就会变成B。动态变量是可以建立副本new实例的,可以有动态变量甲,乙,丙,丁,然后甲可以赋值A,就是A,你再赋值B,就会变成B,乙也可以。...原创 2021-05-05 16:18:50 · 874 阅读 · 0 评论 -
unity中C#,创建回收池来重复利用prefab,不用重复生成和销毁
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Game : MonoBehaviour{ public Transform prefab; public List<Transform> prefabs; //几种预制体 int prefabsId; public Transform game1; //父级原创 2021-04-17 23:01:46 · 378 阅读 · 0 评论 -
Unity Physics2D.OverlapBox返回的值既是bool也是collider2D
Physics2D.OverlapBox返回的值既是bool也是collider2D当public Collider2D apple时,apple = Physics2D.OverlapBox(point1, size1, 0f, Player);然后,返回的apple是你这个Collider2D的名字,是一个碰撞体,就是你这个物体的名字。当public bool apple时,apple = Physics2D.OverlapBox(point1, size1, 0f, Player);然后,返回的原创 2021-04-15 11:25:31 · 2294 阅读 · 0 评论 -
Unity 动画animator中,动画A自动转到动画B
动画A自动转到动画B在animator中,有两个animation,分部为动画A和动画B,如果想从A转到B,要加一个transition条件,但我想A播完直接自动转到B,怎么处理?可以在parameter中设置一个bool,然后勾选其方框,让其默认值为true,在将这个条件加到A转B的条件里,这样就可以自动转了。...原创 2021-04-14 14:40:24 · 673 阅读 · 0 评论 -
Unity C# 编程时注意事项
不要随便改代码编程时,如果程序运转正常,就不要随便改代码。即使这个代码看起来没有什么关联,也没有用了,也不要随便删除。因为代码与代码之间有非常复杂的关系,你一删除,可能这个关系链条就断了,就影响其他代码。所以,你要研究非常清楚,再改动代码,改动你非常清楚的代码。而且,一次只改一小点代码,然后测试,没问题,再改一点,再测试。这如果发现问题,好知道哪里改错了。如果你一次性改很多代码,一旦出错,你都不知道哪里错了,而且,都不知道改过哪些代码了。...原创 2021-04-14 11:40:17 · 698 阅读 · 4 评论 -
Unity横版过关游戏,敌人的触发、激活问题
敌人触发比如超级玛丽第一关,那两只从上面掉下来的棕色怪,如果一开始就激活,它们会早早地走入陷阱而消失,不像乌龟走来走去在管道间循环。所以就有两种敌人,第一种一次性的,第二种在循环的。在循环的敌人,可以在关卡一开始就加载激活,让它一直循环就好;而第一种一次性的,一定要等主角到了,才激活,怎么做了?就是在敌人身上单独绑定一个脚本,检测与主角的距离,当距离小于时,就触发。不要绑定在主角身上,因为不用检测每一个敌人,大部分敌人都是循环的,不用检测。有些敌人是一定要检测的,比如上面掉落的石块,走过去断裂的桥,原创 2021-04-13 16:31:19 · 546 阅读 · 0 评论 -
Unity中update中if、else if的思考
update中if的思考if之后接if,还有if之后接else if的不同。if A之后接if B,在update中,每帧都要检测两个if,如果if B中还嵌套了fi B1等多个if,那么运算量是巨大的。这时,如果用if A之后接else if B,当A是对时,就可以不检测else if B了,省了很多运算。关于if接if,和if 接else if的关系if A,if B,if C,if D,先检测A,再检测B,再C,再D,不管前面检测是true还是false,都要检测后面的if,有多原创 2021-04-13 15:10:18 · 1538 阅读 · 0 评论 -
Unity 协程
协程什么时候用?1.当你想节省update资源时当你想节省update资源,不想每帧都去检测和调用时,比如你要检测主角500米范围内是否有敌人,可以每帧都检测一次,就用update;也可以每两秒钟检测一次,就可以使用协程。但同时,当你在两秒内有敌人靠近,会检测不到,但这没关系。就像体检,你是每天体检一次,还是一年体检一次?有些东西需要每时每刻检测,但有些东西不需要每时每刻检测。比如,你的移动要每时每刻检测,提示你是否保存了游戏则可以十分钟检测一次,提示你手枪的使用方法可以十分钟检测一次。2.当原创 2021-04-13 14:13:34 · 92 阅读 · 0 评论 -
C#方法调用
class Program { public static string name = "xiaoming"; string name2; string removeWord() { name2 = name.Remove(2, 2); //return name; return name2; } static void...原创 2021-03-24 21:30:02 · 2542 阅读 · 0 评论 -
C# 构造方法、this、new、static、实例化、访问修饰符
关于调用变量需不需要前面加类名:在自己的类里面时,可以不加类名在别人的类里面,要加类名,非static类全局变量、局部变量实例化与不用实例化使用:访问修饰符:public:公有访问,不受任何限制。private:私有访问,只限于本类成员访问,子类、实例都不能访问。(如果实例化在方法外,不能访问;如果实例化在方法里,可以访问,这个搞不清楚了。另外,如果private变量在方法里声明的,方法又可以用)protected:保护访问,只限于本类和子类访问,实例不能访问。...原创 2021-03-24 19:41:54 · 870 阅读 · 0 评论 -
C#中Directory.Move的使用
using System;using System.IO;namespace MyFile2{ class Program { static void Main(string[] args) { MoveTxt(); } static void MoveTxt() { string SourceDirec = @"D:\UNI\Test1\MyToy.tx原创 2021-03-17 20:42:21 · 1121 阅读 · 0 评论 -
c#编程实现生成指定范围的不同的随机数
我想设计一个猜数字的游戏,它是四个数字,所以我想能随机生成这四个数字。而且,这四个数字不能重复,从0-9中随机生成的四个不重复数字。新建一个控制台应用,代码如下:using System;using System.Collections; //要加这个Collections才能用ArrayListnamespace ConsoleApp7{ class Program { static void Main(string[] args) {原创 2021-03-15 22:18:24 · 1631 阅读 · 0 评论 -
在C#窗体中画方格图案/地图/马赛克
在C#窗体中画方格图案/地图/马赛克1.新建一个Windows窗体2.在窗体中生成一个方块(待更新)3.用for循环在窗体中生成很多方块(待更新)1.新建一个Windows窗体首先,打开Visual Studio 》》新建Windows窗体应用》》双击窗体进入代码编辑界面这个时候,其实已经新建好了一个窗体,它有默认的高度和宽度,但我希望能在代码中调整这个高度和宽度,所以进入代码界面。using System;using System.Collections.Generic;using Syste原创 2021-03-10 15:35:08 · 1552 阅读 · 0 评论