Unity API

GameObject.FindWithTag

通过Tag名找到游戏对象

1
ring = GameObject.FindWithTag("ring")
FindWithTag 返回一个标记为 tag 的活动 GameObject。如果未找到 GameObject,则返回 null。
Find 按 name 查找 GameObject,然后返回它。

Rigidbody

Rigidbody是刚体,可以为游戏对象赋予物理属性,向对象添加 Rigidbody 组件后,其运动将受到 Unity 物理引擎的控制。即使不添加任何代码,Rigidbody 对象也受到向下的重力,并在与其他对象碰撞时作出反应(需有适当的collider)

position 刚体的位置
rotation 刚体的旋转
useGravity 控制重力是否影响该刚体
angularVelocity 刚体的角速度矢量(以弧度/秒为单位)
velocity 刚体的速度矢量
AddForce 向 Rigidbody 添加力
Sleep 强制刚体进入睡眠状态至少一帧
AddTorque 向刚体添加扭矩

Quaternion

在API中的UnityEngine->classes,四元数

1
2
Vector3 dir = hoopPoint.position - ballPoint.position;
Quaternion wantedRotation = Quaternion.LookRotation(dir);

Quaternion.LookRotation(dir)使用指定的 forward 和 upwards 方向创建旋转

AngleAxis 创建一个围绕 axis 旋转 angle 度的旋转
LookRotation 使用指定的 forward 和 upwards 方向创建旋转

GameObject.GetComponent

GameObject.GetComponent() 在UnityEngine->classes->GameObject

返回 GameObject 中类型为 type 的所有组件

示例:

1
2
3
4
5
6
7
8
void Start()
{
Component[] hingeJoints;
hingeJoints = GetComponents(typeof(HingeJoint));

foreach (HingeJoint joint in hingeJoints)
joint.useSpring = false;
}

ForceMode

位于UnityEngine->Enumerations

使用 ForceMode 指定如何使用 Rigidbody.AddForce 来施加力。

AddForce 函数可定义自己的力矢量,以及选择如何将此力施加于 GameObject(此 GameObject 必须附加有 Rigidbody 组件),从而影响您的 GameObject 的移动方式。

Force 向此刚体添加连续力,使用其质量
Acceleration 向此刚体添加连续加速度,忽略其质量
Impulse 向此刚体添加瞬时力冲击,考虑其质量
VelocityChange 向此刚体添加瞬时速度变化,忽略其质量

transform

对象的位置、旋转和缩放

每个变换都可以有一个父级,使得能够分层应用位置、旋转和缩放

parent 变换的父级
position 世界空间中的变换位置
rotation 一个四元数,用于存储变换在世界空间中的旋转
localEulerAngles 以欧拉角表示的相对于父变换旋转的旋转(以度为单位)
localPosition 相对于父变换的变换位置
localRotation 相对于父级变换旋转的变换旋转
localScale 相对于父对象的变换缩放
childCount 父变换具有的子项数

Camera.ScreenPointToRay

1
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

Physics.Raycast

参数:

origin 射线在世界坐标系中的起点
direction 射线的方向
maxDistance 射线应检查碰撞的最大距离
layerMask 层遮罩,用于在投射射线时有选择地忽略碰撞体
queryTriggerInteraction 指定该查询是否应该命中触发器

bool 如果射线与任何碰撞体相交,返回 true,否则为 false。

RaycastHit

用于从射线投射获取信息的结构

barycentricCoordinate 命中的三角形的重心坐标
collider 命中的 Collider
distance 从射线原点到撞击点的距离
lightmapCoord 撞击点处的 UV 光照贴图坐标
normal 射线命中的表面的法线
point 世界空间中射线命中碰撞体的撞击点
rigidbody 命中的碰撞体的 Rigidbody。如果该碰撞体未附加到刚体,则值为 /null/
textureCoord 碰撞位置处的 UV 纹理坐标
textureCoord2 撞击点处的辅助 UV 纹理坐标
transform 命中的刚体或碰撞体的 Transform
triangleIndex 命中的三角形的索引

Collider

所有碰撞体的基类

BoxColliderSphereColliderCapsuleColliderMeshColliderPhysicMaterialRigidbody

如果在游戏过程中需要移动具有 Collider 的对象,还应将 Rigidbody 组件附加到该对象。如果不想使该对象与其他对象进行物理交互,可将 Rigidbody 设置为运动刚体

变量:

attachedRigidbody 碰撞体附加到的刚体
bounds 碰撞体的世界空间包围体积(只读)
contactOffset 该碰撞体的接触偏移值
enabled 启用的 Collider 将与其他 Collider 碰撞,禁用的 Collider 不会这样
isTrigger 碰撞体是不是触发器
material 碰撞体使用的材质
sharedMaterial 该碰撞体的共享物理材质

消息:

OnCollisionEnter 当该碰撞体/刚体已开始接触另一个刚体/碰撞体时,调用 OnCollisionEnter
OnCollisionExit 当该碰撞体/刚体已停止接触另一个刚体/碰撞体时,调用 OnCollisionExit
OnCollisionStay 对应正在接触刚体/碰撞体的每一个碰撞体/刚体,每帧调用一次 OnCollisionStay
OnTriggerEnter 当 Collider other 事件进入该触发器时调用 OnTriggerEnter
OnTriggerExit 当 Collider other 已停止接触该触发器时调用 OnTriggerExit
OnTriggerStay 对于正在接触该触发器的每个其他 Collider,“几乎”所有帧都调用 OnTriggerStay。此函数位于物理计时器上,因此它不必运行每个帧
继承的成员

变量:

gameObject 此组件附加到的游戏对象。始终将组件附加到游戏对象
tag 此游戏对象的标签
transform 附加到此 GameObject 的 Transform
hideFlags 该对象应该隐藏、随场景一起保存还是由用户修改
name 对象的名称

公共函数:

BroadcastMessage 调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法
CompareTag 此游戏对象是否使用 tag 进行了标记
GetComponent 如果游戏对象附加了类型为 type 的组件,则将其返回,否则返回 null
GetComponentInChildren 使用深度首次搜索返回 GameObject 或其任何子项中类型为 type 的组件
GetComponentInParent 返回 GameObject 或其任何父项中类型为 type 的组件
GetComponents 返回 GameObject 中类型为 type 的所有组件
GetComponentsInChildren 返回 GameObject 或其任何子项中类型为 type 的所有组件
GetComponentsInParent 返回 GameObject 或其任何父项中类型为 type 的所有组件
SendMessage 调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法
SendMessageUpwards 调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法
GetInstanceID 返回对象的实例 ID
ToString 返回 GameObject 的名称

静态函数:

Destroy 删除 GameObject、组件或资源
DestroyImmediate 立即销毁对象 /obj/。强烈建议您改用 Destroy
DontDestroyOnLoad 在加载新的 Scene 时,请勿销毁 Object
FindObjectOfType 返回第一个类型为 type 的已加载的激活对象
FindObjectsOfType 返回所有类型为 type 的已加载的激活对象的列表
Instantiate 克隆 original 对象并返回克隆对象

C#

out

out同ref一样,都是有一级地址传递的,也就是,带有这两个修饰符的参数,如果被修改了原来的值,将以新的值作为他的值(在函数执行完毕后,该参数的值将返回给函数调用中使用的变量,有点像C++ &)

在函数中使用out参数时,必须将其看成尚未赋值。也就是说调用代码可以把已赋值的变量用作out参数,但在函数执行时该变量的值会丢失,所以就算在函数外已经初始化,在函数内也要重新初始化

示例:

// 第一行hit不用初始化,参数中hit前加out,尽管Physics.Raycast返回bool,hit已在其中赋值,所以下一个if语句中hit可以调用其对象的属性方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 1000, 1 << 8))
{
if (hit.collider.gameObject.tag == "Basketball" && !hit.collider.gameObject.GetComponent<BSKBall>().IsShooting())
{
currentBall = hit.collider.gameObject;
Rigidbody r = currentBall.GetComponent<Rigidbody>();
r.isKinematic = true;

Vector3 touchPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition + new Vector3(0, 0, depth));
touchPoint.x = Mathf.Clamp(touchPoint.x, leftEdge.transform.position.x + 0.29f, rightEdge.transform.position.x - 0.29f);
touchPoint.y = selectBallPosY;
currentBall.transform.position = touchPoint;
}
}

Unity坐标

四种坐标:

世界坐标(World Space):游戏物体在创造的世界中的坐标

transfrom.position获得的是物体相对于世界坐标的位置

transfrom.localPosition获得的是物体相对于父物体坐标的位置

屏幕坐标(Screen Space):以像素记

视口坐标(Viewport Space):将屏幕坐标单位化

坐标转换:

物体B相对于物体A的局部坐标:A.transform.InverseTransformPoint(B)

屏幕坐标转世界坐标:Camera.main.ScreenToWorldPoint

1
2
Vector3 mousePos = Input.mousePosition;
Vector3 screenToWorld = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, -Camera.main.transform.position.z));

世界坐标转屏幕坐标:Camera.main.WorldToScreenPoint

1
Vector3 worldToScreen = Camera.main.WorldToScreenPoint(transform.position);

Mathf.Clamp

在给定的最小浮点值和最大浮点值之间钳制给定值。如果在最小和最大范围内,则返回给定值

如果给定的浮点值小于最小值,则返回最小值。如果给定值大于最大值,则返回最大值。使用 Clamp 可将某个值限制为最小值和最大值定义的某个范围内

变量
gameObject 此组件附加到的游戏对象。始终将组件附加到游戏对象。
tag 此游戏对象的标签。
transform 附加到此 GameObject 的 Transform。
公共函数
BroadcastMessage 调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法。
CompareTag 此游戏对象是否使用 tag 进行了标记?
GetComponent 如果游戏对象附加了类型为 type 的组件,则将其返回,否则返回 null。
GetComponentInChildren 使用深度首次搜索返回 GameObject 或其任何子项中类型为 type 的组件。
GetComponentInParent 返回 GameObject 或其任何父项中类型为 type 的组件。
GetComponents 返回 GameObject 中类型为 type 的所有组件。
GetComponentsInChildren 返回 GameObject 或其任何子项中类型为 type 的所有组件。
GetComponentsInParent 返回 GameObject 或其任何父项中类型为 type 的所有组件。
SendMessage 调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。
SendMessageUpwards 调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法。
继承的成员
变量
hideFlags 该对象应该隐藏、随场景一起保存还是由用户修改?
name 对象的名称。
公共函数
GetInstanceID 返回对象的实例 ID。
ToString 返回 GameObject 的名称。

Component

附加到 GameObject 的所有内容的基本类

注:代码不会直接创建 Component,而是编写脚本代码,然后将该脚本附加到GameObject

Resources

Resources 类允许您查找和访问资源等对象

在编辑器中,Resources.FindObjectsOfTypeAll 可用于定位资源和场景对象

通过 Resources.Load 函数,可访问 Assets 文件夹中处于任意位置的名为“Resources”的文件夹中的所有资源。 可以存在多个“Resources”文件夹,加载对象时,将对每个文件夹进行检查

注意:Assets 中的 Resources 文件夹需要在使用前创建。创建新项目时,不会创建该文件夹

静态函数:(函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好)

FindObjectsOfTypeAll 返回所有类型为 type 的对象的列表。
Load 加载存储在 Resources 文件夹中的 path 处的资源。
LoadAll 加载位于 Resources 文件夹中的 path 处的文件夹中的所有资源,或加载位于该处的文件。
LoadAsync 异步加载存储在 Resources 文件夹中的 path 处的资源。
UnloadAsset 从内存中卸载 /assetToUnload/。
UnloadUnusedAssets 卸载未使用的资源。

Laya API

Rigidbody3D

对应于Unity中Rigidbody.AddForceRigidbody.AddTorque, Laya提供的类为Rigidbody3D,对应的方法为Rigidbody3D.applyForceRigidbody3D.applyTorque

1
2
3
4
5
applyForce(force: Vector3, localOffset?: Vector3): void

applyImpulse(impulse: Vector3, localOffset?: Vector3): void

applyTorque(torque: Vector3): void