Unity中几个重要类

Posted A plum in fall

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity中几个重要类相关的知识,希望对你有一定的参考价值。

文章目录

前言

本博客列举了Unity中较为重要的类中的一些方法,并非全部,详见API文档


一、GameObject类

1. Find()

  1. 通过游戏对象名字找查找指定的游戏对象
  2. Find()查找时,只要是当前场景下面的游戏对象,默认都可以查找到。且不管是将查找的脚本挂载到哪个对象上来,都是可以找到的。含有子父级别关系的,也可以查找到。
  3. 同名的游戏对象,可以查找到几个?
    答:只会查找一个

2. FindWithTag( 标签名 )

  1. 只会找 一个符合标签名的对象
  2. 如果没有,null
  3. 如果没有提前添加指定的标签,错误提示:**** is not defined

3. FindGameObejctsWithTag()

  1. 通过标签名查找多个符合名字的游戏对象
  2. 返回的是GameObject类型的数组
  3. 可对返回的数组进行遍历等操作
  4. 获取数组长度为:调用 Length

4. 创建游戏对象

5. SetActive( true );

6. GetComponent(typeOf(Transform))

  1. 建议使用泛型 GetComponent< >

二、Transform类

本类中的属性

1. parent

获取当前游戏对象的父对象

2. root

获取当前游戏对象的顶级别

3. localPosition

获取局部坐标系位置

4. GetInstanceID

获取当前游戏对象的id(唯一的)

5. childCount

获取子对象的个数

本类中的方法

1. GetChild( int index )

获取指定索引值的GameObject

2. IsChildOf ()

判断是否是指定对象的子对象

3. Find()

查找对象

4. Translate()

按指定方向和位置进行移动

i. (x , y , z)
ii. Vector3.left|right|up|down|forward|back

如:向左移动1个单元
transform.Translate(-1,0 , 0);
transform.Translate(Vector3.left);

transform.Translate()函数中,前一个变量是物体的移动速度,这里的速度是一个矢量,既包含大小写包含方向,后一个变量是相对坐标系,这里的相对坐标系有两个值,一个是世界坐标,一个是自身坐标,如果第一个坐标不填写的话,默认为自身坐标系。
注:Space.self | world

transform.Translate(Vector3.up * Time.deltaTime, Space.Self);

5. Rotate()

按指定角度进行旋转

Rotate(参数1,参数2)

使立方体旋转,以Y轴为中心点进行正方向旋转。
transform.Rotate(Vector3.up);
transform.Rotate(Vector3.up * Time.deltaTime);  
transform.Rotate(Vector3.up * Time.deltaTime * speed);
使立方体旋转,以X轴为中心点进行旋转。
transform.Rotate(Time.deltaTime, 0, 0);
transform.Rotate(Time.deltaTime * speed, 0, 0);

6.LookAt()

使当前对象朝向目标位置

继承父类得来的Component

1. 属性:name, gameObject, tag, transform…

2. GetComponent<>()

3. GetComponentInChildren<> ()

4. Instantiate

5. Instantiate ( 原对象 )

Instantiate(原对象,新对象的位置,新对象的角度)
该方法是Unity中的Object类提供的方法
用于产生指定游戏对象的复本
当方法执行结束后,会将对象的复本作为 Object 类型返回

该方法一般写在 Update()方法中,一般是在具体条件,否则会一直执行该方法,卡顿。如:单击鼠标左键或键盘某个按键,才会产生复本…

注:如果没有通过第二个参数和第三个参数指定新对象的位置和旋转角度,那么默认会在原物体一样的位置产生一个新的对象(新对象会将原对象覆盖 )

三、Random类

Random类提供的常用方法:伪随机数

1. 种子

2. Range()

Random.Range (min, max):产生的是min到max范围内随机数包含min,但是不包含max

3. 举例

贪吃蛇

四、Time类

1. deltaTime

float返回值
距离上一帧执行耗用时间(小数)

两种使用场景:
1)旋转或移动,速度比较快,*deltaTime控制速度
2)Update()帧率造成的时间不匹配问题,
FixedUpdate()— 物体(刚体)
解决方法:
transform.Translate(Vector3.up * Time.deltaTime)

2. time

可以放在update里面计算从开始到此刻的时间

3. timeScale

暂停

五、Mathf 类

提供了一系列的方法和属性进行数学操作

1. 求绝对值 ABS()

2. 求最大数或最小数 MAX() MIN()

3. 开平方 : Sqrt()

4. 四舍五入

Round()

返回舍入为最近整数的 /f/。
9.1四舍五入为9
9.5四舍五入10
-9.1四舍五入-9
-9.4四舍五入-9
-9.5四舍五入-10

Ceil()

返回大于或等于 f 的最小整数。

Floor()

返回小于或等于 f 的最大整数。
如果这个数是正数,四舍五入后:整数部分
如果这个数是负数,四舍五入后:减1,如:-9.1结果:-10

5. 角度与弧度值(常量值)

Deg2Rad

1角度等于多少弧度

Rad2Deg

1弧度等于多少角度

6. 正无穷大、负无穷大(常量值)

Infinity

print出来是Infinity

NegativeInfinity

print出来是-Infinity

7. 三角函数:Sin(),Cos(),Tan()…

8. 幂次方与指数:Log()、Log10()、Pow()

9. Lerp()

在 a 与 b 之间按 t 进行线性插值。

10. SmoothDamp()

随时间推移将一个值逐渐改变为所需目标。

11. MoveTowards()

将值 current 向 target 靠近。

12. PingPong()

PingPong 返回一个值,该值将在值 0 与 length 之间递增和递减。类型乒乓球。

六、Input 类

鼠标输入

Input类提供的用于处理鼠标输入的相关属性和方法

1. mousePostion

获取鼠标在当前屏幕上的具体坐标
是一个二维坐标(Z轴始终为0)

坐标与当前屏幕像素有关
如果鼠标在当前屏幕的左下角,则为(0,0)
如果鼠标在屏幕的右上角,则为(Screen.Width, Screen.Height)

注:当前屏幕指的是当前Game窗口

2. GetMouseButtonDown(按键码)

当指定的鼠标按键码被按下,返回true
否则,返回false
如:

if(Input.GetButtonDown(2))

   print(Random.Range(0,10);   //[0,10)

else

   print(Random,Range(-10,0))  ///[-10,0)

鼠标左键:0
鼠标右键:1
鼠标中间:2

判断当前有没有按下鼠标中间键,如果按下,返回[0,10)之间的随机数,否则返回[-10,0)

3. GetMouseButtonUp(按键码)

当指定的鼠标按键码被按下,返回true
否则,返回false

一般在执行该方法前,先执行按下操作,然后再抬起

4. GetMouseButton(按键码)

当指定的鼠标一直按着,返回true
否则,返回false

5. GetAxis(“Mouse X”)

方法返回float类型的数据

获取鼠标在水平方向上移动的距离

当鼠标在水平方向上正半轴移动时,得到一个正数

当鼠标在水平方向上负半轴移动时,得到一个负数

6. GetAxis(“Mouse Y”)

方法返回float类型的数据

获取鼠标在垂直方向上移动的距离

当鼠标在垂直方向上正半轴移动时,得到一个正数

当鼠标在垂直方向上负半轴移动时,得到一个负数

键盘输入

Input

1. GetKeyDown(键盘按键)

指定某键盘按键被按下时,返回true,否则,返回false

2. GetKeyUp(键盘按键)

指定某键盘按键被抬起时,返回true,否则,返回false

3. GetKey(键盘按键)

指定某键盘按键被一直按着,返回true,否则,返回false

注释:键盘按键的按键码
i. “*****”
如"a"
ii. KeyCode
如KeyCode.A

4. GetAxis(“Horizontal”)

用于判断按了键盘上的那个水平方向键

5. GetAxis(“Vertical”)

用于判断按了键盘上的哪个垂直方向键

如果方法返回 0到1之间的正数,表示按了向上方向

如果方法返回 0到-1之间的负数,表示按了向下方向

返回-1到1之间的小数


参考来源

官方文档:API文档
参考视频:达内教育Unity基础
参考资料:网友的笔记

Java 中几个重要的关键字

Java中的关键字特别多,大致如下:

访问控制
private    protected    public

类,方法和变量修饰符
abstract    class    extends    final    implements    interface    native    new
static    strictfp    synchronized    transient    volatile
    
程序控制
break    continue    return    do    while    if    else    for    instanceof    switch
case    default
    
异常处理
try    cathc    throw    throws

包相关
import    package
    
基本类型
boolean    byte    char    double    float    int    long    short    null    true    false

变量引用
super    this    void
    
保留字
goto    const

这里主要是讲一下,我觉得需要特别注意,而且容易忽略的几个,当然面试中也常常是必考的几个关键字

1. 关键字static 静态

static 关键字可以应用于内部类(在另一个类中定义的类)、方法或字段(类的成员变量)。 

通常,static 关键字意味着应用它的实体在声明该实体的类的任何特定实例外部可用。

static(内部)类可以被其他类实例化和引用(即使它是顶级类)。在上面的示例中,另一个类中的代码可以实例化 MyStaticClass 类,方法是用包含它的类名来限定其名称,如 MyClass.MyStaticClass。 

static 字段(类的成员变量)在类的所有实例中只存在一次。 

可以从类的外部调用 static 方法,而不用首先实例化该类。这样的引用始终包括类名作为方法调用的限定符。

模式:public final static <type> varName = <value>; 通常用于声明可以在类的外部使用的类常量。在引用这样的类常量时需要用类名加以限定。在上面的示例中,另一个类可以用 MyClass.MAX_OBJECTS 形式来引用 MAX_OBJECTS 常量。

 

2. 关键字synchronized 同步

synchronized 关键字可以应用于方法或语句块,并为一次只应由一个线程执行的关键代码段提供保护。 

synchronized 关键字可防止代码的关键代码段一次被多个线程执行。 

如果应用于静态方法,那么,当该方法一次由一个线程执行时,整个类将被锁定。 

如果应用于实例方法,那么,当该方法一次由一个线程访问时,该实例将被锁定。 

如果应用于对象或数组,当关联的代码块一次由一个线程执行时,对象或数组将被锁定。

 

3. 关键字transient短暂

transient 关键字可以应用于类的成员变量,以便指出该成员变量不应在包含它的类实例已序列化时被序列化。

当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
     transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

4. 关键字volatile易失

volatile 关键字用于表示可以被多个线程异步修改的成员变量。 

注意:volatile 关键字在许多 Java 虚拟机中都没有实现。 volatile 的目标用途是为了确保所有线程所看到的指定变量的值都是相同的。

Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分

 

总结:

我觉得这几个是比较重要的,当然其他的也很重要,主要是几个容易忘却,这里烂笔头唧唧歪歪的说说。

原文查看,这里可以解释所有的关键字

 



以上是关于Unity中几个重要类的主要内容,如果未能解决你的问题,请参考以下文章

Unity 中几点注意的地方

Unity ❉ 基础知识 ☀️| 认识Unity引擎中几种最常用 UI系统,这一篇文章就够用了!

准备去找工作啦求问Unity面试啥比较重要

Java 中几个重要的关键字

Unity中几行代码画一颗圣诞树(Debug.log永远的神)

Unity重要脚本函数