自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

转载 C#中@字符的三个作用

这篇文章是转载的在写代码的时候总是用到这个关键字,但是没有总结过以前只知道@在C#中为了写文件路径的\不要加转义符而在前面加上@标识符,没想到@还有其他的作用三个作用忽略转义字符string fileName = "D:\\文本文件\\text.txt";string fileName = @"D:\文本文件\text.txt";让字符串跨行tring strSQL ...

2018-10-31 23:53:24 133

原创 ref与out参数

区别:ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。2、使用ref和out...

2018-10-31 23:45:11 165

原创 C#中网络编程异步操作方法与 粘包和分包问题

前言前面介绍了通过线程来实现异步的方法下面是回调的方式请看代码客户端服务端

2018-10-31 22:12:10 1034

原创 C# socket编程TcpClient与TcpListener UdpClient

前言TCPClient与TCPListener是对socket的一层封装使用起来更加方便他们用NetworkStream类表示网络,使用GetStream方法返回网络流,然后调用read和get方法

2018-10-31 20:55:23 495

原创 C# Socket编程 通过线程方式的异步

文章目录前言TCP编程前言通过几个图可以很好的总结编程逻辑https://www.cnblogs.com/dream844/archive/2012/06/12/2546083.html这个博客总结的很好,但是有些内容我不是很理解,以后遇到再去研究好了https://www.cnblogs.com/jikexianfeng/p/6413262.html 介绍什么是DMA异步是目的,为...

2018-10-31 20:37:54 3126 1

原创 C#网络编程基础

文章目录前言层级关系前言这段时间学了一下用C#网络编程补了一下这方面的知识其实我以前也系统学习过这方面的知识,但总是抓不住重点,看完就忘记了层级关系OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。...

2018-10-31 19:31:58 717

原创 C# XML文件读取

前言xml也是一种文本格式我们一般将信息存储在节点属性和节点内容中, 通过遍历获得步骤获取根节点然后获取根节点的所有子节点遍历节点,将属性值或节点内容赋给实体类的属性C#中内置有对xml的解析库, using System. Xml<SkillInfo> <SkillList> <Skill Sk.

2018-10-31 17:58:39 10977

原创 C# Json文件读取

文章目录前言Json语法格式JsonData 转化为Json格式字符串前言关于用litjson来解析json格式的文件,我看过两个教程,第一个并没有讲json的语法原理,只讲了怎么使用。第二个很清晰明了说了数组和对象这个概念但凡是有数组的地方,都可以用list来进行替换JSON跟XML一样是一种是数据格式,都是文本文件Json语法格式JSON 使用 JavaScript 语法来描...

2018-10-31 17:36:56 29100 1

原创 C# 文件读取

文章目录前言文件读取属性通过File读写文件使用流来读写文件通过FileStream来读取数据通过StreamWrite读取Path类前言任何类的存在都是为了某个功能,而实现这些功能,有一套广而有效的抽象逻辑准则只要这个准则掌握了,那些具体的实现细节和api的调用就很容易理解了文件对于文件,我们有 读取, 创建, 剪切,复制,写入,追加写入等操作在System.IO命名空间下面...

2018-10-31 16:47:43 5399

原创 C#中创建线程的四种方式

文章目录前言利用委托开启线程步骤传递参数获得函数结果利用Thread类直接开启线程传递参数注意事项利用线程池开启线程利用任务开启线程连续任务任务层次结构线程资源争夺前言我们利用线程是为了更好的利用多核pu的资源有这么几个要点,在线程执行完后,我们要如何获得结果线程之间的资源争夺导致的问题线程的执行顺序,其实线程可能由于cpu资源的动态变化,运行顺序完全随机的,不可控线程开启以及消...

2018-10-25 21:33:52 42416 3

原创 Action 和Func

前言系统提前为我们预定义了两个委托类型即Action FuncActionAcition 属于无参无返回值的函数类型Action< T>通过设置泛型,我们可以定义有多个参数, 无返回值的函数当函数有多个重载的时候,系统会自动匹配Action是没有返回值的参数也是0或者最多16个泛型形式 static void PrintStr(string name) ...

2018-10-25 17:40:42 5313

原创 事件

委托类型的变量可以作为类的成员,也可以作为方法的局部变量public event MyDelegate myDelegate在一个委托类型的变量前面加上event,就声明了一个事件事件只能作为类的成员被声明...

2018-10-25 17:20:24 162

原创 Lambda表达式与委托

属于匿名方法的一种简写形式和委托相结合,不用写关键字delegate语法格式=>左边列出需要的参数 右边是方法体 Func<int, int, int> a = (x, y) => { return x + y; }; Console.Writ

2018-10-25 01:29:55 835

原创 委托

委托委托和类一样,是一种用户自定义的类型,类表示的是数据的集合,委托保存的是一个或多个方法步骤使用特定签名和返回类型声明一个新的委托类型使用新的委托类型声明委托变量创建委托类型的对象,把它赋值给委托变量。新的委托对象包括指向方法的引用,这个方法需要和第一步定义的签名一致为委托对象增加其它方法,这些方法必须与第一步中有相同的签名和返回类型可以像调用方法一样调用委托,在调用委托时候...

2018-10-25 00:15:18 177

原创 抽象高于实现 ——unity框架提取

前言我想提取框架在完成一把枪械的逻辑后,抽取该枪械逻辑的结构关系,形成枪械的代码结构框架抽象高于实现, 应该在抽象出来的代码结构内,去完成针对性的实现逻辑抽象的约束,即有了约束和规范多态的三种形式 虚方法 接口,抽象类,议论虚方法无法起到约束的作用,子类可以重写,也可以选择不重写抽象类可以起到约束的作用接口对于接口,我们可以将共有的字段和属性封装到一个普通的父类中然...

2018-10-24 22:21:03 243

原创 单例模式

就是在整个程序的运行期间只存在一个实例对象注意事项单例设计模式用于非静态类中使用步骤声明一个静态且私有的当前类类型字段private static ClassName instance;创建私有无参构造方法,保证外部无法实例化这个类private ClassName( ) { }创建一个静态方法,用于创建此类的唯一对象public static Clas...

2018-10-24 17:39:58 84

原创 C#特性

前言特性(attribute)是一种允许我们向程序的程序集增加元数据的语言结构.NET预定义了很多特性,也可以声明自定义特性应用特性的程序结构叫目标用来获取和使用元数据的程序叫特性的消费者目的告诉编译器把程序结构的某组元数据嵌入到程序集中使用步骤在源代码中将特性应用于程序结构编译器读取源代码并从特性产生元数据,将元数据放到程序集中消费者程序可以获取特性的元数据以及程序...

2018-10-24 16:54:24 124

原创 C#反射

有关程序及其类型的数据被称为元数据(metadata)保存在程序的程序集中一个运行的程序查看本身的元数据或其他程序的元数据的行为叫做反射使用 System.Reflection 命名空间Type 类前情概要BCL声明了 一个叫 Type抽象类,不能有实例在运行时 CLR会创建从Type派生类的实例访问实例时,CLR会返回Type基类的引用Type类的成员属性Na...

2018-10-24 16:34:53 520

原创 C#中 构造函数的执行

构造函数的执行派生类对象有一部分就是基类对象基类的一个构造函数被作为创建实例过程的一部分被调用继承层次链中的每个类在执行它自己的构造函数体之前执行它的基类的构造函数顺序初始化实例成员——》调用基类构造函数——》执行实例构造函数的方法体构造函数初始化语句默认情况下,对象被构造时,基类的无参构造函数被调用,但构造函数可以被重载,如果希望使用一个指定的基类构造函数,就需要在构造函...

2018-10-24 15:32:42 990

原创 StringBuilder使用方法

字符串的特点字符串是引用类型 存储在堆空间中,在栈中存储了该数据的引用地址字符串是不可改变的,当给字符串重新赋值的时候,旧值并没有销毁,而是重新开辟一块新空间来存储新值,并把新的地址赋给变量当对一个字符串变量重复赋值的时候,会产生大量垃圾数据信息。执行效率很低String Builder简介引用类型字符串构建器它会一直操作同一块内存空间,不会产生垃圾数据,且效率高于string...

2018-10-24 15:12:47 3904 1

原创 Stopwatch类的使用

今天了解到C#中一个很好玩的类Stopwatch 秒表计时器 用来记录程序运行的时间依赖于System.Diagnostics 命名空间使用步骤创建Stopwatch 类型对象Stopwatch sw = new Stopwatch();sw.Start(); //计时器开始sw.Stop(); //计时器结束sw.Elapsed; //开始到结束之间的时长应用场景...

2018-10-24 15:09:32 6297

原创 枚举

定义在命名空间namespace下,在当前的命名空间下,所有的类都可以使用该枚举枚举是一种数据类型,用于存储数据在案例中,需要重复的使用到某些特定字符串,就可以定义相应类型的枚举定义枚举的目的,就是规范一些数据的值public enum 枚举名{ 值1, 值2, 值N}最后一个不用逗号注意是逗号枚举类型 变量名 = 枚举类型 . 值应用案例比如切水果游戏,可...

2018-10-24 14:41:42 216

原创 C#中常用字符串操作

IsNullOrEmptyIsNullOrEmpty 判断一个字符串是否为Null或者空如果·为null或者空,返回真,否则返回假null不占内存空间,空字符串占内存空间string.IsNullOrEmpty(str);...

2018-10-24 14:27:04 244

原创 C# 面向对象

前言我以前没有很深入的去理解过多态,在敲了一些代码之后,回过头看这些解释性的语句,顿悟了这些是什么意思面向对象有三大特性 封装 继承 多态在继承关系下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不同的行为,这就叫多态C# 中体现多态的三种方式, 虚方法,抽象类,接口父类中用virtual修饰的方法,可以用于实现该方法共有的功能,然后在子类重写该方法时,使用base关键字调...

2018-10-24 12:42:01 635

转载 Pivot与Center的区别

Unity中Pivot与 Center的问题,首先 说一下 Pivot 与 Center:pivot就是模型坐标轴的真实位置,也就是说再模型软件中设定的坐标轴。center是unity自己根据模型的mesh计算的中心位置,和模型真实坐标轴没关系了。transform.position 的坐标轴就是这个 pivot因此在实际操作时候,注意把工具栏设置为pivot...

2018-10-19 15:39:23 2836

转载 unity改变物体轴心

改变物体轴心的方法有两种:(1)再导入模型之前就在3DMAX中修改轴心;(2)导入unity中修改方式:先建立一个空物体,将其轴心位置调整为为你需要的轴心位置,再将需要需要改变轴心的物体成为这个空物体的自物体就行了;...

2018-10-12 12:11:00 19035

原创 将图片变换成3d对象

选中图片点击右侧inspector ——texture type —— sprite 2D即可物体身上会多一个 Sprite Renderer组件将2d图片转换为3d物体

2018-10-11 08:48:00 1959 1

原创 在Unity进行平台打包发布的时候需要注意的一些细节问题

问题 我在网上看了一些视频,很多老师都是讲完怎么制作就没有后续了,但是打包环节也有很多需要注意的事项。由于目前我只在pc平台,安卓平台打包过,所以下面将列举这两个注意事项。其他平台遇到再补充Android平台设置product name company name icon设置 Jdk sdk 路径 Edit——preferences——external tools 进行设置...

2018-10-10 22:53:26 4661 1

原创 unity 小tip

collider 编辑器,通过它可以在界面进行编辑碰撞器的大小我们可以预先调整预制体,通过预制体来保存一些预先的设置,这样就不用在代码里面调整了通过onDestroy事件来传递消息,当怪物死亡时候,往往要对其销毁,可以利用这个方法向父物体传送死亡的消息在特效里面有一个属性是camerafacing,似乎是面向摄像机,具体不太明白NGUI可以在一个脚本里面给多个按钮添加事件,但是UGUI必...

2018-10-06 11:10:19 191

原创 在NGUI界面的一些问题

在制作商城模块的时候,需要把模型预制体显现在UI界面上,但是尺寸的各种大小等有很大问题。解决: NGUI的物体是在第八层,Unity把前七层全部占用了,我们只需要把物体设置在第八层即可在给NGUI的对象设置onClick事件的时候如果把物体全部设置为透明,是无法触发事件的...

2018-10-06 11:01:36 210

原创 鼠标点击切换的两种思路

第一种思路:在实例化生成预制体的时候,把所有物体全部禁用,并加入集合当中,然后设置currentIndex,即当前要显示的物体编号,先把上一个物体禁用,然后把下一个物体启用,并把编号赋给currentIndexprivate List<GameObject> list;private int currentIndex = -1 //初始化0显示Start(){ Chang...

2018-10-06 10:20:19 914

原创 小怪出生与跟随

我们可以通过设置预埋点的方式,然后通过脚本管理器获得这些点的位置,再在这些点上生成怪物,为了避免小怪交叠,我们可以留一个时间间隔.private list<Transform> points;private GameObject monster;public IEnumerator CreateMonster(){ for(int i = 0; i<10; i++...

2018-10-06 00:05:44 173

原创 协程实现动画效果

我们可以在协程里面实现短暂的时间间隔,然后实现一个动画效果,代码如下在这里插入代码片

2018-10-05 20:17:49 725

原创 设置角速度及生成四元数及利用刚体

在对物体的rotation属性赋值的时候,往往是四元数,所以我们需要把角度值转换成四元数代码如下://转换为四元数Vector3 rotationVector3 = new Vector3(0f, 30f, 0f);Quaternion rotation = Quaternion.Euler(rotationVector3);myTransform.rotation = rotati...

2018-10-05 20:11:22 2400

原创 在属性里面写方法体

在游戏中,在玩家脚本中会有相关的得分变量,而这些变量往往需要实时更新在UI界面上,这时,我们可以在UI脚本中写label更新方法,然后在对应属性的set里面更新该UIlabel...

2018-10-05 19:37:51 317

原创 时间暂停效果

在游戏里面经常会有暂停键我们可以通过Time.timeScale = 0来实现,Time.timeScale是一个时间缩放量,是静态属性,但是可以赋值Time.timeScale = 1; 游戏正常运行Time.timeScale = 0.5; 游戏处于慢放的状态Time.timeScale = 0; 游戏暂停状态...

2018-10-05 19:33:58 1506

原创 相机跟随与鼠标拖拽

我们经常需要使用相机跟随物体,之所以把两个放到一起,是因为有相同的技巧offset = currentObject.position - playerObject.position,然后实时的将角色位置加上偏移量,并插值赋予当前物体首先是相机的代码, 一般来说,都要设置一个标志位,当游戏开始时,才开始·跟随移动Vector3 offset = currentObject.position...

2018-10-05 19:23:49 663

原创 实现追踪效果

我们可以通过3d数学的知识,实现追踪效果思路 用目标位置— 当前物体位置,获得方向向量,然后用Vector3.Lerp()函数,将当前物体的前方缓慢插值过渡到该方向,并且在其间一直前进的状态normalForwar = Vector3.forward;private void FollowShip(){ Vector3 dir = target.positon - myTrans...

2018-10-05 18:43:54 655

原创 Invoke函数的妙用

众所周知,invoke函数有两个重载方式1 Invoke(methodName, time)经过多长时间后,调用该方法一次在实际中,切换到游戏开始场景后,一般要等待几秒给玩家缓冲,然后再开始运行角色,可以使用这个方法2 InvokeRepeating(methodName, time, repeatTime), 经过time时间后调用该方法,并且每过repeatTime再重新调用一次第二...

2018-10-05 18:33:45 15069

原创 利用协程实现计时效果

实现计时效果思路1 在update函数里面进行累加,初始值+Time.delatTime,然后判断是否超过60,超过的话就进行转换时:分:秒思路2 在协程里面,对初始值+1,然后等待1s,继续加1,最后显示在屏幕上个人觉得,协程实现最为方便巧妙,代码如下int time =0 ;public IEnumerator TimeCount(){ time++ yield retur...

2018-10-05 17:53:08 1722

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除