Unity学习笔记(零基础到就业)|Chapter01:C#入门

news2024/11/17 5:34:39

Unity学习笔记(零基础到就业)|Chapter01:C#入门

  • 前言
  • 一、控制台输入输出语句
  • 二、初识变量
    • 1.一些好用的tips
    • 2.变量声明的固定写法
    • 3.变量类型
  • 三、变量的本质
    • 1.变量的存储空间
    • 2.变量的本质:2进制
  • 四、变量的命名规范
    • 1.必须遵守的规则
    • 2.常用命名规范
  • 五、常量
    • 1.常量的声明
    • 2.常量的特点
  • 六、转义字符
    • 1.转义字符的使用
    • 2.取消转义字符
  • 七、类型转换(不同变量类型之间的相互转换)
    • 1.隐式转换
      • (1)相同大类型之间的转换规则
      • (2)不同大类型之间的转换规则
    • 2.显式转换
      • (1)括号强转
      • (2)Parse法
      • (3)Convert法
      • (4)其他类型转string(ToString)
  • 八、异常捕获
  • 九、运算符
    • 1.算数运算符
    • 2.字符串拼接
    • 3.条件运算符
    • 4.逻辑运算符
    • 5.位运算符
    • 6.三目运算符
  • 十、条件分支语句
    • 1.if
      • (1)if语句
      • (2)if else语句
      • (3)if else if else语句
    • 2.Switch
  • 十一、循环语句
    • 1.while
    • 2.do while
    • 3.for
    • 4.foreach
  • 总结


前言

游戏作为一种情感表达的载体,在让玩家感到有趣和感动的同时,也建立了人与人之间的链接,我想看看更多在不同意识形态和文化背景下的知识的碰撞和思想的迸发,所以开始了游戏开发的自学之路,人生就这一次,就这么几十年,喜欢什么想要尝试什么咱就去做吧~

这系列的学习笔记主要是根据唐老狮的unity实战路线课程整理的,加入了自己的一些补充和理解,该课程涉及的知识内容非常多,我并未学完,而是根据就业需求挑选学习的,也对后续框架部分进行了一些修改,希望能通过整理并时常阅读这些笔记巩固开发知识,也希望能跟在学习unity的小伙伴一起分享、探讨,笔记中有疑问或出错的部分也希望大佬们能够给予指导鸭~🙏


一、控制台输入输出语句

console.wirteline
console.wirte
console.readline:按回车键才会继续执行后续代码
console.readkey:检测玩家是否按键,只要输入任意键就会继续执行后续代码,不会把输入的内容显示在控制台上

二、初识变量

1.一些好用的tips

(1)折叠代码

#region 知识点一 变量
//代码内容
#endregion

(2)代码注释
单行注释

//注释内容

选中多行快速注释/取消注释
选中后同时按下ctrl+k+/ 则实现快速注释
选中后同时按下ctrl+c+/ 则实现快速取消注释
(mac电脑为command+k+/ 以及 command+c+/ )

多行注释

/*
注释内容01
注释内容02
*/

代码块注释

/// <summary>
/// 函数用处说明
/// </summary>
/// <param name="name">对于name参数的描述</param>
/// <param name="num">对于num参数的描述</param>
private void Tip(string name,int num)
{
}

2.变量声明的固定写法

变量类型 变量名=初始值;
【注1】多个相同类型变量同时声明时,用逗号隔开
【注2】变量声明时可以不设置初始值,但在使用时必须是赋了值的

int a1=1,b1=2,c1=3;
string s1="123",s2="234";

c#可以使用var声明临时变量,例如:
var i=10;
并且var在编译时会被推断为正确的类型,所以在运行时不会引入额外的性能开销。var声明临时变量只会影响代码的可读性和可维护性(双刃剑)

3.变量类型

变量类型简单了解

三、变量的本质

1.变量的存储空间

可以通过sizeof方法得到变量类型所占的内存空间(字节数),但不能得到string类型的(字符串类型的长度是变化的)

int sbyteSize=sizeof(sbyte);
Console.WriteLine("sbyte 所占的字节数为:"+sbyteSize);

2.变量的本质:2进制

变量的本质是2进制(计算机中所有数据的本质都是二进制,是一堆0和1)

数据传递只能通过电信号,只有开和关两种状态,所以就用0和1来表示这两种状态。计算机中的存储单位最小为bit(位),它只能表示0和1两个数字,1bit就是1个数,要么是0,要么是1。

为了方便数据表示,出现一个叫byte(字节)的单位,它是由8个bit组成的存储单位,所以一般说一个字节为8位。

【注】2进制和10进制的转换:

在这里插入图片描述

四、变量的命名规范

1.必须遵守的规则

不能重名、不能以数字开头、不能以程序关键字命名、不能有特殊符号(下划线除外)、建议用英文(拼音)表示变量且要有准确的含义

2.常用命名规范

 //变量:驼峰命名法(首字母小写,之后单词首字母大写) 
 int studentName;
 //函数、类:所有单词首字母大写 
 private void MyFunc(){}
 public class MyClass{}

五、常量

1.常量的声明

加上const关键字:
const 类型 常量名=初始值

2.常量的特点

(1)必须初始化(2)不能被修改值

六、转义字符

1.转义字符的使用

什么是转义字符:字符串中的一部分,用来表示一些特殊含义的字符,如单引号’、双引号"、空行\n、斜杠\、制表符\t(空一个tab键)、光标退格\b
固定写法:\字符

2.取消转义字符

在string前加@,就会忽略所有转义字符

七、类型转换(不同变量类型之间的相互转换)

1.隐式转换

基本规则:不同类型之间进行自动的转换,但必须是小范围的转到大范围的(大范围装小范围

(1)相同大类型之间的转换规则

long l=1;
int i=1;
short s=1;
sbyte sb=1;
//不能够用小范围的类型去装大范围的类型
//i=l; 会报错
//int隐式转换为了long
l=i;

(2)不同大类型之间的转换规则

case1:有符号与无符号之间(正负号)
(a)有符号的是不能隐式转换成无符号的(负数不可能转换过来)
(b)无符号变量可以转为有符号变量,前提是有符号变量的范围涵盖了无符号变量的范围
case2:特殊类型和其他类型之间
(a)string和bool不参与隐式转换
(b)char可以转为整数,整数可以转为浮点数,反之不能

2.显式转换

基本规则:手动处理,强制转换

(1)括号强转

主要用于数值类型之间的转换,将高精度的类型强制转为低精度的,可能会因范围问题造成结果异常:
变量类型a 变量名=(变量类型a)变量

(2)Parse法

把字符串转为其他类型的方法。注意字符串必须能够转为对应类型(类型与范围都要合法合规),否则会报错 :
变量类型.Parse(“字符串”)

string str1="123";
int i=int.Parse(str1);
//i=int.Parse("123.45");就会报错

(3)Convert法

更准确(比括号强转好)地将各个类型之间进行相互转换(可四舍五入)(如果是字符串转其他类型,也像parse一样要合法合规) :
Convert.To目标类型(变量或常量)

int a;
a=Convert.ToInt32(1.45845f);
Console.WriteLine(a);
//布尔类型也可以转为数值类型,true对应1,false对应0
a=Convert.ToInt32(true);
Console.WriteLine(a);
a=Convert.ToInt32(false);
Console.WriteLine(a);

(4)其他类型转string(ToString)

变量.ToString()

string str1=1.ToString();
string str2=true.ToString();
string str3='A'.ToString();
string str4=1.234f.ToString();

int a=123;
string sa=a.ToString();

//当我们进行字符串的拼接时,就自动会调用Tostring :
Console.WriteLine('hello'+123+true);

八、异常捕获

作用:避免当代码报错时,造成程序卡死的情况,可将容易出错的代码放入try语句块中,出现问题了就会跳过这个异常,执行catch中的代码,也可通过变量e打印出具体的错误信息 。
在这里插入图片描述
代码示例:

try
{
	string str=Console.ReadLine();
	int i=int.Parse(str);
	Console.WriteLine(i);
}
catch
{
	Console.WriteLine("请输入合法数字");
}

在这里插入图片描述

九、运算符

1.算数运算符

(1)赋值符号 =
(2)算数运算符 + - * / %
(3)复合运算符 += -= *= /= %=
(4)自增减运算符 i++ i-- ++i --i

【注1】整形变量做除法,默认小数位会丢失,所以要将至少其中一个数加上f 
【注2】取余跟乘除的优先级是一样的 
【注3】先用再加/减:i++  i-- 
      先加/减再用:++i  --i 

2.字符串拼接

(1)+号进行拼接
注意字符串中的+是拼接而非运算,并且也可以使用复合运算符

string str1;
str1=""+1+2+3+4;//1234

string str2="string";
str2+=""+1+2+3+4;//string1234

string str3="";
str3 += 1 + 2 +""+ 3 + 4;//334

string str4="";
str4+=1+2+""+(3+4);//37

(2)string.Format(”待拼接的内容”,内容1,内容2,…)
固定规则:想要被拼接的内容用占位符替代{数字},数字是0~n

string str;
str=string.Format("我是{0},今年{1}岁,我想要{2}","feifei","27","学习unity");

(3)控制台打印拼接

(4)StringBuilder.Append(“字符串内容”);

【注1】StringBuilder也可以用来拼接字符串,StringBuilder.Append();
【注2】String每次修改拼接时会重新分配内存空间,产生垃圾,而StringBuilder修改字符串时不会创建新的对象,因此需要频繁修改和拼接的字符串可以用StringBuilder,可以提升性能。但String提供了更多方法供使用,需要使用这些特殊方法来处理一些特殊逻辑时可以使String。

3.条件运算符

条件运算符:用来比较两个变量或常量
(1) >
(2)<
(3)==
(4)!=
(5)>=
(6)<=

【注】char类型可以进行大小比较(会自动转换为ascii码值进行判断),因此要判断某个字符是否在a~z之间就可以将该字符与a、z比较大小

4.逻辑运算符

(1)&& (逻辑与)
(2)|| (逻辑或)
(3)!(逻辑非,对一个bool值取反)逻辑非的优先级较高,要对一个条件运算结果取反的话要打上括号
(4)混合使用优先级:逻辑非 〉逻辑与 〉逻辑或
(5)逻辑运算符短路规则:只要 逻辑与 或着 逻辑或 左边满足了条件(逻辑或有真则真,逻辑与有假则假),后面的结果就不会再计算了。

5.位运算符

用数值类型进行计算的运算符,将数值转换为2进制,再进行运算 。
(1)位与: &
链接两个数值进行位运算,将数值转为2进制,有0则0。多个数值进行位运算,没有括号时,从左到右依次计算

int a=1;//001
int b=5;//101
int c=a&b;//001

(2)位或:|
对位运算,有1则1

int a=1;//001
int b=5;//101
int c=a|b;//101

(3)异或:^
对位运算,相同为0,不同为1

int a=1;//001
int b=5;//101
int c=a^b;//100

(4)位取反:~
0变1,1变0,需要注意的是要把前面补全,比如int类型有32位,第一位是正负符号,在取反后还要用反码补码
(5)左移<< 右移 >>
左移:让一个数的2进制数左移几位,右侧增加几个0
右移:右移几位,右侧去掉几个数

6.三目运算符

固定语法:bool类型(bool变量/条件表达式/逻辑运算符) ? bool类型为真返回的内容 :bool类型为假返回的内容

string str=false ? "条件为真":"条件为假";
Console.WriteLine(str);

int a=5;
string str=a<10 ? "a小于10":"a大于等于10";
Console.WriteLine(str);

int i=a>1 ? 123:234;
【注】三目运算符会有返回值,这个返回值类型必须一致,并且必须使用

十、条件分支语句

1.if

【注1】满足了一个后,之后的即使满足条件也都不会执行了 
【注2】括号中的bool类型值包括:bool变量/条件表达式/逻辑运算符

(1)if语句

if语句:让顺序执行的代码产生分支,满足条件时多执行一些代码,可以无限嵌套
固定语法:

if(bool类型值)
{
	满足条件要执行的代码,写在if代码块中;
}

(2)if else语句

if else语句:产生两条分支,满足条件做什么,没满足条件又做什么,可以嵌套
固定语法:

if(bool类型值)
{
	满足条件要执行的代码;
}else
{
	不满足第一个条件要执行的代码;
}

(3)if else if else语句

if else if else语句:产生n条分支,最先满足哪条分支的条件就执行该分支内的语句(其中最后那个else可以省略)
固定语法:

if(bool类型值)
{
	满足条件要执行的代码;
}else if(bool类型值)
{
	满足条件要执行的代码;
}else
{
	不满足上述条件要执行的代码;
}

2.Switch

固定语法:

switch(变量)
{
	//变量==常量,就满足条件会执行该case和break中的代码
	case 常量:
		满足条件执行的代码逻辑
		break;
	case 常量:
		满足条件执行的代码逻辑
		break;
	//case 可以有无数个
	default:
		如果上面case的条件都不满足,就会执行default中的代码
		break;
}
【注1】Switch一般要配合枚举使用
【注2】只能判断变量是否等于一个固定值,常量不能为一个范围/条件运算/逻辑运算,但可以自定义常量(即声明一个常量的变量)
【注3】default可省略(有点类似elseif中的else)
【注4】贯穿:当某些条件被满足后要执行的代码是一样的时候,就可以使用贯穿

贯穿举例:

int aa=1;
switch(aa)
{
	//不写case后配对的break,就叫做贯穿
	//满足1 3 4 2其中一个条件,就会执行之后的代码
	case 1:
	case 3:
	case 4:
	case 2:
		Console.WriteLine("是个数字");
		break;
	default:
		break;
}

十一、循环语句

1.while

固定语法:

while(bool类型值)
{ 
当满足条件时就会执行while语句块中的代码
...
...
...
当代码逻辑执行完,会回到while循环开头,再次进行条件判断
}

【注】流程控制关键字:continue和break。
continue后的语句都不会执行了,但会回到循环开始继续执行,break是直接跳出循环

//打印1到20之间的奇数
int index=0;
while(index<=20)
{
	++index;
	if(index%2==0){
	continue;}
	Console.WriteLine(index);
}

2.do while

先斩后奏,先至少执行一次循环语句中的代码,再去判断是否继续(实际开发中使用较少)
固定语法:

do
{
   要循环执行的逻辑;
}while(bool类型值);
【注1】do while语句在while后存在一个很重要的分号“;”,没写会报错
【注2】使用continue会回到while条件判断处

3.for

一般用来准确得到一个范围中的所有数
固定语法:

for(初始表达式;条件表达式;增量表达式)
{
	循环代码逻辑;
}

//初始表达式:就是申明临时变量,用来计数,可以连续声明用逗号隔开
//条件表达式:进入循环的条件,只要是bool类型值都可以
//增量表达式:执行一次循环逻辑过后要做的事情,做啥都行,一般是进行自增减运算
for(int i=0,j=0;i<10&&j<5;++i,j+=i){}

//for循环可以嵌套,但声明的变量不能是同一个
for(int i=0;i<10;i++)
{
	for(int j=0;j<10;j++)
	{
		Console.WriteLine(i+"_"+j);
	}
}

//这三个空可以为空
int k=0;
for(;k<10;)
{
	++k;
}

4.foreach

int scoreSum=0;
int[] myClassScores = new int[] { 90, 86, 87, 98, 100 };
foreach (int score in myclassScores)
{
    scoreSum += score;
}

总结

Chapter01(C#入门)中主要介绍了c#中变量、常量、转义字符、类型转换、异常捕获、运算符、条件分支语句与循环语句的语法知识内容。特别是变量类型、类型转换、运算符和条件、循环语句在后续开发中运用的非常多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyExcel合并相同内容单元格及动态标题功能的实现

一、最初版本 导出的结果&#xff1a; 对应实体类代码&#xff1a; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentLoopMerge; import com.al…

qt-C++笔记之使用QLabel和QPushButton实现一个bool状态的指示灯

qt-C笔记之使用QLabel和QPushButton实现一个bool状态的指示灯 code review! 文章目录 qt-C笔记之使用QLabel和QPushButton实现一个bool状态的指示灯1.QPushButton实现2.QLabel实现2.QLabel实现-对错符号 1.QPushButton实现 运行 代码 #include <QtWidgets>class Ind…

Spring Boot + MinIO 实现文件切片极速上传技术

文章目录 1. 引言2. 文件切片上传简介3. 技术选型3.1 Spring Boot3.2 MinIO 4. 搭建Spring Boot项目5. 集成MinIO5.1 配置MinIO连接信息5.2 MinIO配置类 6. 文件切片上传实现6.1 控制器层6.2 服务层6.3 文件切片上传逻辑 7. 文件合并逻辑8. 页面展示9. 性能优化与拓展9.1 性能优…

ros2机器人在gazebo中移动方案

原文连接Gazebo - Docs: Moving the robot (gazebosim.org) 很重要的地方&#xff1a;使用虚拟机运行Ubuntu的时候&#xff0c;需要关闭”加速3D图形“的那个选项&#xff0c;否则gazebo无法正常显示。 Moving the robot&#xff08;使用命令移动机器人示例&#xff09; In t…

maven 项目导入异常问题

问题如下 一、 tomcat正再运行的包是哪一个 不同构建、打包情况下分别运行 out\artifacts下 当直接去Project Structure下去构建artifacts 后&#xff0c;运行tomcat 则会在out下target下 reimport项目后,则会在artifacts自动生成部署包。删除tomcat之前deployment 下的包(同…

一种基于外观-运动语义表示一致性的视频异常检测框架 论文阅读

A VIDEO ANOMALY DETECTION FRAMEWORK BASED ON APPEARANCE-MOTION SEMANTICS REPRESENTATION CONSISTENCY 论文阅读 ABSTRACT1. INTRODUCTION2. PROPOSED METHOD3. EXPERIMENTAL RESULTS4. CONCLUSION阅读总结&#xff1a; 论文标题&#xff1a;A VIDEO ANOMALY DETECTION FRA…

线上环境如何正确配置 Django 的 DEBUG?

Author&#xff1a;rab Django Version&#xff1a;3.2 Python Version&#xff1a;3.9 目录 前言一、DEBUG True二、DEBUG False三、页面异常解决总结 前言 由于最近在学习 Django 的知识&#xff0c;于是尝试开发了一套 Blog 系统&#xff0c;在本地测试时是页面显示没问题…

数据智慧:如何利用可视化提升效率

数据可视化是一项强大的工具&#xff0c;能够显著提高工作效率和决策的准确性。下面我就以可视化从业者的角度&#xff0c;简单谈谈数据可视化是如何助力效率提升的。 直观理解复杂数据 数据可视化将抽象的数据转化为图表、图形或仪表盘&#xff0c;使数据更易于理解。这种直观…

智能优化算法应用:基于瞬态优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于瞬态优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于瞬态优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.瞬态优化算法4.实验参数设定5.算法结果6.…

中小型企业怎么选SD-WAN?

随着网络技术的发展&#xff0c;SD-WAN作为一种高效灵活的网络连接被越来越多的企业选用。在SD-WAN的组网过程中&#xff0c;中小型企业需要怎么做&#xff0c;以确保SD-WAN的成功实施&#xff1f;本文将详细介绍中小型企业在SD-WAN组网时需要考虑的关键因素&#xff0c;助力企…

IDEA shorten command line介绍和JAR manifest 导致mybatis找不到接口类处理

如果类路径太长&#xff0c;或者有许多VM参数&#xff0c;程序就无法启动。原因是大多数操作系统都有命令行长度限制。在这种情况下&#xff0c;IntelliJIDEA将试图缩短类路径。最好选中 classpath file模式。 shorten command line 选项提供三种选项缩短类路径。 none&#x…

node.js mongoose中间件(middleware)

目录 简介 定义模型 注册中间件 创建doc实例&#xff0c;并进行增删改查 方法名和注册的中间件名相匹配 执行结果 分析 错误处理中间件 手动抛出错误 注意点 简介 在mongoose中&#xff0c;中间件是一种允许在执行数据库操作前&#xff08;pre&#xff09;或后&…

机器学习---聚类(原型聚类、密度聚类、层次聚类)

1. 原型聚类 原型聚类也称为“基于原型的聚类” (prototype-based clustering)&#xff0c;此类算法假设聚类结构能通过一 组原型刻画。算法过程&#xff1a;通常情况下&#xff0c;算法先对原型进行初始化&#xff0c;再对原型进行迭代更新求解。著 名的原型聚类算法&#…

SQL进阶理论篇(十四):CBO优化器是如何计算代价的?

文章目录 简介能调整的代价模型的参数有哪些&#xff1f;mysql.server_costmysql.engine_cost 如何修改这些代价参数&#xff1f;代价模型具体是如何计算的参考文献 简介 大部分RDBMS都支持基于代价的优化器CBO&#xff0c;但其实CBO仍然存在缺陷&#xff08;比如参数配置的不…

OpenAI 疑似正在进行 GPT-4.5 灰度测试!

‍ 大家好&#xff0c;我是二狗。 今天&#xff0c;有网友爆料OpenAI疑似正在进行GPT-4.5灰度测试&#xff01; 当网友询问ChatGPT API调用查询模型的确切名称是什么时&#xff1f; ChatGPT的回答竟然是 gpt-4.5-turbo。 也有网友测试之后发现仍然是GPT-4模型。 这是有网友指…

解决腾讯云CentOS 6硬盘空间不足问题:从快照到数据迁移

引言&#xff1a; 随着数据的不断增加&#xff0c;服务器硬盘空间不足变成了许多运维人员必须面对的问题。此主机运行了httpd&#xff08;apache服务&#xff09;&#xff0c;提供对外web访问服务,web资源挂载在**/data/wwwroot目录下,http日志存放在/data/wwwlogs目录下&…

【MATLAB源码-第101期】基于matlab的蝙蝠优化算BA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蝙蝠算法&#xff08;BA&#xff09;是一种基于群体智能的优化算法&#xff0c;灵感来源于蝙蝠捕食时的回声定位行为。这种算法模拟蝙蝠使用回声定位来探测猎物、避开障碍物的能力。在蝙蝠算法中&#xff0c;每只虚拟蝙蝠代表…

【Hadoop精讲】HDFS详解

目录 理论知识点 角色功能 元数据持久化 安全模式 SecondaryNameNode(SNN) 副本放置策略 HDFS写流程 HDFS读流程 HA高可用 CPA原则 Paxos算法 HA解决方案 HDFS-Fedration解决方案&#xff08;联邦机制&#xff09; 理论知识点 角色功能 元数据持久化 另一台机器就…

SpringCloud微服务 【实用篇】| Docker镜像、容器、数据卷操作

目录 一&#xff1a;Docker基本操作 1. 镜像操作 镜像相关命令 2. 容器操作 容器相关命令 3. 数据卷&#xff08;容器数据管理&#xff09; 数据卷 操作数据卷 挂载数据卷 挂载的方式区别 前些天突然发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0…

MySQL面试经典50题

本文使用的MySQL版本为5.7.21&#xff0c;需要的数据表创建如下&#xff1a; 1.学生表student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10))…