Unity脚本的生命周期
生命周期中常用方法
特性序列化字段:在编辑器中显示私有变量12[SerializeField] private int a = 1;
在编译器中隐藏字段12[HideInInspector] public int b = 2;
只能在范围内设置值12[Range(0,15)] public int c = 3;
一、初始化相关的方法Awake()1private void Awake() {......}
脚本被加载到场景中时自动调用
是整个生命周期中最先执行的方法
当脚本实例被加载时会自动调用这个方法
整个生命周期中只执行一次
该方法主要用于在游戏开始之前初始化对象或游戏状态,如:使用 GameObject.FindWithTag()查询游戏对象。
OnEnable()1private void OnEnable() {......}
当对象变为可用或激活状态时调用,判断对象或脚本是否可用
执行完Awake()方法后,如果当前脚本可用或可激活,按正常执行顺序则会执行OnEnable()方法。
...
Unity查找物体的6种方法详解
前言
无论是哪种方法,为了性能的考虑,请不要将获取物体的代码写在Update里
请注意GameObject和gameObject的区别
请注意Transform和transform的区别
查找物体方法(速查表)
GameObject(Unity的所有物体的基类,针对全局,方法是静态方法,所以可以直接用)注意:非gameObject,注意大小写,gameObject指的是该物体,gameObject无这些方法
transform(是本物体的transform的组件,所以查找都是针对本物体的)注意:非Transform,注意大小写,Transform指的是Transform类型,Transform无这些方法
P.S. transform效率比GameObject高,强烈建议使用transform
查找物体的6种方法
方法
优点
缺点
GameObject.Find(物体名字)
递归遍历全局物体,直到找到第一个为Capsule的物体
全局搜索
1. 无法查找隐藏对象2.效率低下(相当于递归遍历查找)
GameObject.Find(“GameObject ...
Gameobject,gameObject,Transform,transform的区别和关联
Gameobject和gameobject
Gameobject是一个类型,所有的游戏物件都是这个类型的对象。
gameobject是一个对象, 就跟java里面的this一样, 指的是这个脚本所附着的游戏物件
12345678public class ShowSliderValue : MonoBehaviour { private GameObject obje; //定义GameObject类型的指针 void Start(){ Text lal =gameObject.GetComponent<Text> (); //通过gameObject获取到Text组件. Debug.Log ("Text" + lal.text); //打印获取到组件的中的text的属性 } }
Text lal =gameObject.GetComponent<Text> () 中不使用gameObject , 直接通过GetComponent& ...
Unity常用的基础 API
Unity常用的基础 API
在线手册
Unity 脚本API 2020.02
unity5圣典中文API手册.chm
组件
坐标系
鼠标事件
Time类
Vector3
Transform
Gameobject
lnput类
TransformTransform组件的成员变量
组件名称
组件作用
position
世界坐标中的位置
localPosition
父对象局部坐标系中的位置
enlerAngles
世界坐标系中以欧拉角表示的旋转
localEulerAngles
父对象局部坐标系中的欧拉角
right
对象在世界坐标系中的右方向
up
对象在世界坐标系中的上方向
forward
对象在世界坐标系中的前方向
rotation
世界坐标系中以以元数表示的旋转
localRotation
父对象局部坐标系中以四元数表示的旋转
localScale
父对象局部坐标系中的缩放比例
parent
父对象的Transform组件
Transform组件的成员函数
组件名称
组件作用
Translate
按指定的方向和 ...
Unity基础界面
Unity 版本号与许可证2017.1.0 、2017.1.1 、 2017.2.0 、2017.3.4 、 5.5.3 p4
小版本号高出现bug可能性更小;一台电脑可以安装多个版本的unity,但是需要安装在不同路径;安装Unity时不能有中文路径;unity项目路径也不要有中文
菜单栏与快捷键
File (文件菜单)
File 菜单主要用于打开和保存场景项目,同时也可以创建新场景。
File 菜单功能及快捷键列表:
命令
描述
快捷键
New Scene(新建场景)
创建一个新的场景
Ctrl + N
Open Scene(打开场景)
打开一个已经创建的场景
Ctrl + O
Save Scene(保存场景)
保存当前场景
Ctrl + S
Save Scene As(另存场景)
将当前场景另存为一个新场景
Ctrl + Shift + S
New Project(新建项目)
新建一个项目
无
Open Project(打开项目)
打开一个已经创建的项目
无
Save Project(保存项目)
保存当前项目
无
Build Setti ...
Unity简介
Unity 简介由 Unity Technologies 公司开发的用于轻松创建游戏和三维互动内容的开发工具,是一个国际领先的专业游戏引擎。
Unity 网站资源 (CN)
资源名称
网址
Unity中国官网
https://unity.cn/
Unity开发者社区
https://developer.unity.cn/
Unity Learn Premium
https://unity.com/cn/products/unity-learn
Unity 网站资源 (World)
资源名称
网址
Unity官网
http://unity3d.com
Unity论坛
http://forum.china.unity3d.com/fourm.php
Unity博客
http://answers.unity3d.com/index.html
Unity官方在线案例
http://unity3d.com/gallery/demos/live-demos
Unity官方项目源文件
http://nity3d.com/gallery/demos/de ...
C#笔记(40)if(){}try{}catch{}语句
try…catch 语句用来测试代码中的错误,try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。
用法12345try { //可能会导致错误的代码} catch (error) { //在错误发生时怎么处理}
实例12345try { window.someNonexistentFunction(); //调用不存在的函数} catch (error) { alert('An error happened!');}
finally子句虽然在try-catch语句中是可选的,但finally子句一经使用,其代码无论如何都会执行。换句话说,try语句块中的代码全部正常执行,finally子句会执行;如果因为出错而执行了catch语句块,finally子句照样还会执行。只要代码中包含finally子句,则无论try或catch语句块中包含什么样的代码——甚至return语句,都不会阻止finally子句的执行。来看下面这个函数:
1234 ...
C#笔记(41)Lambda表达式
Lambda表达式简介Lambda表达式是比匿名方法更简洁的一种匿名方法语法。Lambda运算符:所有的Lambda表达式都是用新的Lambda运算符 =>,可以叫它,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。
lambda表达式:1.一个参数:param=>expr2.多个参数:(param-list)=>expr
匿名方法转换为lambda表达式的步骤
删除delegate关键字
在参数列表和匿名方法主体之间放lambda运算符=>.lambda运算符读作goes to
简化lambda表达式
编译器还可以从委托的声明中知道委托参数的类型,因此lambda表达式允许我们省略类型参数。
带有类型的参数列表称为显示类型
省略类型的参数列表称为隐式类型
如果只有一个隐式类型参数,我们可以省略周围的括号
lambda表达式允许表达式的主体是语句块或者表达式。如果语句块包含了一个返回语句,我们可以将语句块替换为return关键字后的表达式(即 去掉关键字return)
实例123 ...
C#笔记(39)多线程
多线程线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。
线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。
到目前为止我们编写的程序是一个单线程作为应用程序的运行实例的单一的过程运行的。但是,这样子应用程序同时只能执行一个任务。为了同时执行多个任务,它可以被划分为更小的线程。
线程生命周期线程生命周期开始于 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。
下面列出了线程生命周期中的各种状态:
未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。
就绪状态:当线程准备好运行并等待 CPU 周期时的状况。
不可运行状态:下面的几种情况下线程是不可运行的:
已经调用 Sleep 方法
已经调用 Wait 方法
通过 I/O 操作阻塞
死亡状态:当线程已完成执行或已中止时的状况。
主线程在 C# 中,S ...
C#笔记(38)不安全代码
不安全代码当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。
指针变量指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,您必须在使用指针存储其他变量地址之前声明指针。
指针变量声明的一般形式为:
1type* var-name;
下面是指针类型声明的实例:
实例
描述
int* p
p 是指向整数的指针。
double* p
p 是指向双精度数的指针。
float* p
p 是指向浮点数的指针。
int** p
p 是指向整数的指针的指针。
int*[] p
p 是指向整数的指针的一维数组。
char* p
p 是指向字符的指针。
void* p
p 是指向未知类型的指针。
在同一个声明中声明多个指针时,星号 ***** 仅与基础类型一起写入;而不是用作每个指针名称的前缀。 例如:
12int* p1, p2, p3; // 正确 int *p1, *p2, *p3; // 错误
下面的实例说明了 C# 中使用了 uns ...
C#笔记(37)匿名方法
匿名方法我们已经提到过,委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。
匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。
在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。
编写匿名方法的语法匿名方法是通过使用 delegate 关键字创建委托实例来声明的。例如:
123456delegate void NumberChanger(int n);...NumberChanger nc = delegate(int x){ Console.WriteLine("Anonymous Method: {0}", x);};
代码块 Console.WriteLine(“Anonymous Method: {0}”, x); 是匿名方法的主体。
委托可以通过匿名方法调用,也可以通过命名方法调用,即,通过向委托对象传递方法参数。
注意: 匿名方法的主体后面需要一个 **;**。
例如 ...
C#笔记(36)泛型(Generic)
泛型(Generic)泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。
您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下面这个简单的实例将有助于您理解这个概念:
实例1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556using System;using System.Collections.Generic;namespace GenericApplication{ public class MyGenericArray<T> { private T[] array; public MyGenericArray(int size) { ...