Unity6学习笔记·脚本基础(二)
Unity稳定手册Unity6->Help->Unity ManualUnity6文档手册:https://docs.unity3d.com/cn/current/Manual/UnityManual.html 创建与使用脚本创建脚本 Project目录->右键->Create->Scripting->Monobehaviour Script 重命名脚本 使用脚本 拖拽到目标物体上 目标物体Inspector面板->AddComponent->New script(起名,创建新脚本) 基础模板(新建默认脚本)1234567891011121314151617using UnityEngine;// 脚本类名必须和文件名完全一致public class TestScript : MonoBehaviour{ // 物体启用时执行一次,游戏开始前 void Start() { Debug.Log("游戏启动"); } // 每帧执行,帧间隔...
Unity6学习笔记·基本功能(一)
unity安装 unity hub下载,注册,授权 对应untiy编辑器归档网站下载地址:Unity Download Archive 下载vs地址:VS2022 Community unity窗口界面![[unity6-study-notes-1-windows.png]] high definition 3d hdrp layout->tail布局->project窗口设置one column layout Project窗口 - 工程窗口 - 展示工程中有哪些文件 Scene窗口 - 场景窗口 - 当前打开的场景的样子 Game窗口 - 游戏窗口 - 当前场景-游戏运行起...
C#异常(十七)
异常概述异常定义:异常属于运行时错误,是违背系统/程序约束的非正常状况,发生时系统会捕获错误并抛出(raise)异常对象。例如,程序试图将一个数除以0或试图写入一个只读文件。未处理异常后果:代码如果没有异常处理逻辑,程序直接崩溃终止,输出原始、不友好的报错信息,示例中除零会抛出DivideByZeroException。 12345static void Main(){ int x = 10, y = 0; x /= y; //用0除一个数时抛出一个异常} 12Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero. at Exceptions_1.Program.Main() in C:\Progs\Exceptions\Program.cs:line 12. 异常处理的目的: 条件允许时修复问题,让程序继续运行; 留存异常日志,方便开发排查; 释放数据库连接这类外部资源; 给用户展示易懂的提示。 原则:...
C#枚举器和迭代器(十六)
枚举器和可枚举类型使用foreach语句 foreach 作用:用来遍历数组等可枚举集合,依次读取每一个元素,迭代变量(iteration variable)只能读取,不能修改。 数组属于可枚举类型,具备GetEnumerator()方法;调用该方法会返回一个枚举器(enumerator)对象。 可枚举类型(enumerable type):拥有GetEnumerator()方法,产出枚举器实例。 枚举器(enumerator):记录集合遍历位置,可以依次返回集合内的每一项元素。 1234int[] arr1 = { 10, 11, 12, 13 }; //定义数组foreach (int item in arr1) //枚举元素 Console.WriteLine($"Item value: { item }"); 1234Item value: 10Item value: 11Item value: 12Item value: 13 foreach结构设计...
C#泛型(十五)
泛型概述泛型(generic)特性提供了一种更优雅的方式,可以让多个类型共享一组代码。泛型允许我们声明类型参数化(type‑parameterized)的代码,用不同的类型进行实例化。也就是说,可以用 “类型占位符” 来写代码,然后在创建类的实例时在指明真实的类型。类型不是对象而是对象的模板,同样,泛型类型也不是类型,而是类型的模板。C#提供了5种泛型:类、结构、接口、委托和方法。前面4个是类型,而方法是成员。 123456789class MyStack<T>{ int StackPointer = 0; T [] StackArray; public void Push(T x ) {//...} public T Pop() {//...} //...} 泛型类声明泛型类在泛型类的声明中并没有特殊的关键字。取而代之的是尖括号中的类型参数列表,它可以区分泛型类与普通类的声明。 在类名之后放置一组尖括号。 在尖括号中用逗号分隔的占位符字符串来表示需要提供的类型。这叫作...
C#转换(十四)
转换概述 转换(conversion)是接受一个类型的值并将它用作另一个类型的等价的值的过程。 转换后的值应和源值一样,但其类型为目标类型。 隐式转换有些类型的转换不会丢失数据或精度,而且不会丢失数据。例如,将8位的值转换为16位是非常容易的。 语言会自动做这些转换,这叫作隐式转换。 从位数更少的源类型转换为位数更多的目标类型时,目标中多出来的位需要用0或1填充。 当从更小的无符号类型转换为更大的无符号类型时,目标类型多出来的最高位都以0进行填充,这叫作零扩展(zero extension)。 对于有符号类型的转换而言,额外的最高位用源表达式的符号位进行填充。 这样就维持了被转换的值的正确符号和大小。 这叫作符号扩展(sign extension)。![[csharp-14-conv-1.png]] 显示转换和强制转换从源类型转换为目标类型时,不发生数据丢失的情况下,C#会自动将一个数据类型转换为另一个数据类型。如果源类型的任意值在被转换成目标类型时会丢失值,那么C#是不会提供这两种类型的自动转换的。如果希望对这样的类型进行转换,就必须使用显式转换。这叫作强制转换表达式...
C#接口(十三)
接口概述接口是指定一组函数成员而不实现它们的引用类型。所以只能类和结构来实现接口。 12345678910111213141516171819202122232425262728293031323334353637383940414243//声明接口interface IInfo{ string GetName(); string GetAge();}//声明实现接口的CA类class CA : IInfo{ public string Name; public int Age; //在CA类中实现两个接口方法 public string GetName() { return Name; } public string GetAge() { return Age.ToString(); }}//声明实现接口的CB类class CB : IInfo{ public string First; public string Last; p...
C#事件(十二)
发布者和订阅者很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。发布者/订阅者模式(publisher/subscriber pattern)可以满足这种需求。在这种模式中,发布者类定义了一系列程序的其他部分可能感兴趣的事件。其他类可以 “注册”,以便在这些事件发生时收到发布者的通知。这些订阅者类通过向发布者提供一个方法来 “注册” 以获取通知。当事件发生时,发布者 “触发事件”,然后执行订阅者提交的所有事件。 由订阅者提供的方法称为回调方法,因为发布者通过执行这些方法来 “往回调用订阅者的方法”。还可以将它们称为事件处理程序,因为它们是为处理事件而调用的代码。 发布者(publisher):发布某个事件的类或结构,其他类可以在该事件发生时得到通知。 订阅者(subscriber):注册并在事件发生时得到通知的类或结构。 事件处理程序(event handler):由订阅者注册到事件的方法,在发布者触发事件时执行。事件处理程序方法可以定义在事件所在的类或结构中,也可以定义在不同的类或结构中。 触发(rais...
C#委托(十一)
委托概述委托和类一样,是一种用户定义类型。但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列预定义操作。委托相当于是一个类型安全的、面向对象的C++函数指针。可以把delegate看作一个包含有序方法列表的对象,这些方法具有相同的签名和返回类型,如下图所示。 方法的列表称为调用列表。 委托持有的方法可以来自任何类或结构,只要它们在下面两方面匹配: 委托的返回类型; 委托的签名(包括ref和out修饰符)。 调用列表中的方法可以是实例方法也可以是静态方法。 在调用委托的时候,会执行其调用列表中的所有方法。![[csharp-11-delegate-liebiao.png]] 1234567891011121314151617181920212223242526272829303132delegate void MyDel(int value); //声明委托类型class Program{ void PrintLow( int value ) { Console.WriteLine($"...
C#类和继承(十)
类继承通过继承可以定义一个新类,新类纳入一个已经声明的类并进行扩展。已存在的类称为基类(base class),新类称为派生类(derived class)。 派生类扩展它的基类,因为它包含了基类的成员,还有派生类本身声明中的新增功能。 派生类不能删除它所继承的任何成员。 1234class OtherClass : SomeClass{ //...} 访问继承的成员12345678910111213141516171819202122232425class SomeClass //基类{ public string Field1 = "base class field "; public void Method1( string value ) { Console.WriteLine($"Base class -- Method1: { value }"); }}class OtherClass: Some...
