Component🔐🔐🔐
✨学习阶段我会不断的更新新的内容,文章如有误请指正,如果觉得对你有用,请点赞收藏关注一波,谢谢支持😘
提示:以下是本篇文章正文内容
Rigidbody⚖⚖⚖
- 通过物理模拟控制对象的位置。
- 向对象添加 Rigidbody 组件后,其运动将受到 Unity 物理引擎的控制。即使不添加任何代码,Rigidbody 对象也受到向下的重力,并在与其他对象碰撞时作出反应(如果也存在适当的 Collider 组件)。
- Rigidbody 还有一个脚本 API,让您能够向对象施加力,并以逼真的物理效果对其进行控制。例如,可以根据车轮施加的力来指定汽车的行为。根据这些信息,物理引擎可以处理汽车运动的大多数其他方面,因此汽车可进行逼真的加速并适当地响应碰撞。
- 在脚本中,建议使用 FixedUpdate 函数来施加力和更改 Rigidbody 设置(而不是使用 Update,Update 用于大多数其他帧更新任务)。这样做的原因是物理更新在测量的时间步骤中执行,而时间步骤与帧更新不一致。FixedUpdate 在每次进行物理更新前调用,因此在该函数中做出的任何更改都将直接处理。
变量
| 变量 | 作用 |
|---|
| isKinematic | 控制物理是否影响刚体。 |
| mass | 刚体的质量 |
| position | 刚体的位置。 |
| rotation | 刚体的旋转。 |
| velocity | 刚体的速度矢量。它表示刚体位置的变化率。 |
| 2D | |
| simulated | 指示物理系统是否应模拟刚体。 |
| sleepMode | 刚体最初处于的睡眠状态。 |
| velocity | 刚体的线性速度,采用单位/秒形式。 |
公共函数
| 公共函数 | 作用 |
|---|
| AddExplosionForce | 向模拟爆炸效果的刚体施加力。 |
| AddForce/2D | 向 Rigidbody 添加力。 |
| AddRelativeForce/2D | 向刚体添加力(相对于其坐标系)。 |
| MovePosition/2D | 将运动 Rigidbody 向 position 移动。 |
| MoveRotation/2D | 将刚体旋转到 /rotation/。 |
| Sleep | 强制刚体进入睡眠状态至少一帧。 |
| SweepTest | 测试如果刚体在场景中移动时,是否会与任何对象发生碰撞。 |
| SweepTestAll | 与 Rigidbody.SweepTest 类似,但返回所有命中对象。 |
| WakeUp | 强制唤醒刚体。 |
| 2D | |
| IsAwake | 刚体是否处于“唤醒”状态? |
| IsSleeping | 刚体是否处于“睡眠”状态? |
| IsTouching | 检查 collider 是否正在接触附加到该刚体的任何碰撞体。 |
| IsTouchingLayers ✔ | 检查附加到该刚体的任何碰撞体是否正在接触指定 layerMask 上的任何碰撞体。 |
| MovePosition | 将刚体移动到 /position/。 |
| MoveRotation | 将刚体旋转到 /angle/(以度为单位)。 |
| Sleep | 使刚体进入“睡眠”状态。 |
| WakeUp | 禁用刚体的“睡眠”状态。 |
消息
| 消息 | 作用 |
|---|
| OnCollisionEnter | 当该碰撞体/刚体已开始接触另一个刚体/碰撞体时,调用 OnCollisionEnter。 |
| OnCollisionExit | 当该碰撞体/刚体已停止接触另一个刚体/碰撞体时,调用 OnCollisionExit。 |
| OnCollisionStay | 对应正在接触刚体/碰撞体的每一个碰撞体/刚体,每帧调用一次 OnCollisionStay。 |
公共函数/2D
| 公共函数 | 作用 |
|---|
| BroadcastMessage | 调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法。 |
| GetComponent | 如果游戏对象附加了类型为 type 的组件,则将其返回,否则返回 null。 |
| GetComponentInChildren | 使用深度首次搜索返回 GameObject 或其任何子项中类型为 type 的组件。 |
| GetComponentInParent | 返回 GameObject 或其任何父项中类型为 type 的组件。 |
| GetComponents | 返回 GameObject 中类型为 type 的所有组件。 |
| GetComponentsInChildren | 返回 GameObject 或其任何子项中类型为 type 的所有组件。 |
| GetComponentsInParent | 返回 GameObject 或其任何父项中类型为 type 的所有组件。 |
| SendMessage | 调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。 |
| SendMessageUpwards | 调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法。 |
| TryGetComponent | 获取指定类型的组件(如果存在)。 |
| GetInstanceID | 返回对象的实例 ID。 |
| ToString | 返回对象的名称。 |
静态函数/2D
| 静态函数 | 作用 |
|---|
| Destroy | 移除 GameObject、组件或资源。 |
| DestroyImmediate | 立即销毁对象 /obj/。强烈建议您改用 Destroy。 |
| DontDestroyOnLoad | 在加载新的 Scene 时,请勿销毁 Object。 |
| FindObjectOfType | 返回第一个类型为 type 的已加载的激活对象。 |
| FindObjectsOfType | 返回所有类型为 type 的已加载的激活对象的列表。 |
| Instantiate | 克隆 original 对象并返回克隆对象。 |
射线🐍🐍🐍
RaycastHit/2D
- 用于从射线投射获取信息的结构。
1、变量
| 变量 | 作用 |
|---|
| collider | 命中的 Collider。 |
| distance | 从射线原点到撞击点的距离。 |
| normal | 射线命中的表面的法线。 |
| point | 世界空间中射线命中碰撞体的撞击点。 |
| rigidbody | 命中的碰撞体的 Rigidbody。如果该碰撞体未附加到刚体,则值为 /null/。 |
| transform | 命中的刚体或碰撞体的 Transform。 |
简单用法
Physics/2D
1、变量
| 变量 | 作用 |
|---|
| AllLayers | 用于选择所有层的层遮罩常量。 |
2、静态函数
| 属性名 | 作用 |
|---|
| CheckSphere | 如果有任何碰撞体与世界坐标系中由 position 和 radius 界定的球体重叠,则返回 true。 ✔ |
| 简单用法p1 | - |
| OverlapSphere | 检测球体上的一点返回数组,可以拿到检测到的G,T等等 ✔ |
| 简单用法p2 | - |
| OverlapBoxNonAlloc | 查找与给定盒体接触或位于盒体内部的所有碰撞体,并将它们存储到缓冲区中。 |
| OverlapSphereNonAlloc | 计算与球体接触或位于球体内部的碰撞体,并将它们存储到提供的缓冲区中。 |
| 2D | - |
| OverlapCircle | 检查某碰撞体是否位于一个圆形区域内。 ✔ |
| 举例 | Physics2d.OverlapCircle(位子,距离,layerMask mask); |
| OverlapPoint | Collider2D 与该点重叠的碰撞体。 ✔ |
| 举例 | Physics2D.OverlapPoint(cursorPos(鼠标点检测碰撞体)); |
| OverlapCapsuleAll | 获取位于某胶囊体区域内的所有碰撞体的列表。 |
用法:
//p1
//检测周围是否有友军
bool TankCurrentPos(Vector3 pos)
{
三个参数说明:那个位置、距离、表示Layer层:这里表示除了第8层外其他的都做检测
return Physics.CheckSphere(pos, 50, ~(1 << 8));
}
//p2
两个参数说明:起始位置、距离
var colliders = Physics.OverlapSphere(transform.position, distance);
Physics.Raycast/2D ✔
1、参数
| 参数 | 作用 |
|---|
| origin | 射线在世界坐标系中的起点。 |
| direction | 射线的方向。 |
| maxDistance | 射线应检查碰撞的最大距离。 |
| layerMask | 层遮罩,用于在投射射线时有选择地忽略碰撞体。 |
| queryTriggerInteraction | 指定该查询是否应该命中触发器。 |
| 2D | - |
| minDepth | 仅包括 Z 坐标(深度)大于或等于该值的对象。 |
| maxDepth | 仅包括 Z 坐标(深度)小于或等于该值的对象。 |
用法:
1、RaycastHit2D hit = Physics2D.Raycast(起始点, 方向, 距离, LayerMask.GetMask("NPC"));
Physics.Linecast ✔
1、参数
| 参数 | 作用 |
|---|
| start | 起点。 |
| end | 终点。 |
| layerMask | 层遮罩,用于在投射射线时有选择地忽略碰撞体。 |
| queryTriggerInteraction | 指定该查询是否应该命中触发器。 |
| hitInfo | 如果返回 true,则 hitInfo 将包含有关碰撞体的撞击位置的更多信息(另请参阅:RaycastHit)。 |
用法:
1.如果有任何碰撞体与 start 和 end 之间的线相交,则返回 true。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public Transform target;
void Update()
{
if (Physics.Linecast(transform.position, target.position))
{
Debug.Log("blocked");
}
}
}
Physics.RaycastAll
1、参数
| 参数 | 作用 |
|---|
| ray | 光线的起点和方向。 |
| maxDistance | 从射线起点开始,允许射线命中的最大距离。 |
| layerMask | 层遮罩,用于在投射射线时有选择地忽略碰撞体。 |
| queryTriggerInteraction | 指定该查询是否应该命中触发器。 |
Ray/Ray2D1
1、参数
| 变量 | 作用 |
|---|
| directi | 射线的方向。 |
| origin | 射线的原点。 |
| 构造函数 | 作用 |
|---|
| Ray | 沿着 direction 创建从 origin 开始的射线。 |
2、公共函数
| 公共函数 | 作用 |
|---|
| GetPoint | 返回射线上 distance 个单位处的点。 |
| ToString 对 | 于此射线,返回整齐格式化的字符串。 |
射线小案例😀
说明:从摄像机的位置发射子弹向目标点发射
Camera的相关转化可以跳到我的博客Camera看说明
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
out :C#的返回值
if(Physics.Raycast(ray,out hit))
{
如果通过射线检测到目标就可以通过hit.找到目标点上的各种组件
画线测试//通过Game见面可以看到你发出射线的颜色以便判断
三个参数表示 起始位、射线的末点(世界空间中射线命中碰撞体的撞击点)、颜色
Debug.DrawLine(transform.position, hit.point, Color.red);
创建小球//基础内容不过多说明
GameObject a=Instantiate(attack, transform.position, Quaternion.identity);
a.GetComponent<Rigidbody>().velocity = (hit.point - transform.position) * speed;
}
Debug📡📡📡
- 此类包含在开发游戏时可使调试变得更轻松的方法。
静态函数
| 静态函数 | 作用 |
|---|
| DrawLine | 在指定的起始点与结束点之间绘制一条直线。 ✔ |
| DrawRay | 在世界坐标中绘制一条从 start 到 start + dir 的直线。 ✔ |
| Log | 将消息记录到 Unity 控制台。 ✔ |
| ClearDeveloperConsole | 将错误从开发者控制台中清除。 |
Vector3📍📍📍
- 用于表示 3D 向量和点。
- Unity 内部使用该结构传递 3D 位置和方向。 此外,它还包含用于执行常见向量操作的函数。
- 除了下面列出的函数以外,也可以使用其他类操作向量和点。 例如,对于旋转或变换向量和点来说,Quaternion 和 Matrix4x4 类也很有用。
1、静态变量
| 静态变量 | 作用 |
|---|
| forward | 用于编写 Vector3(0, 0, 1) 的简便方法。 |
| back | 用于编写 Vector3(0, 0, -1) 的简便方法。 |
| down | 用于编写 Vector3(0, -1, 0) 的简便方法。 |
| up | 用于编写 Vector3(0, 1, 0) 的简便方法。 |
| left | 用于编写 Vector3(-1, 0, 0) 的简便方法。 |
| right | 用于编写 Vector3(1, 0, 0) 的简便方法。 |
| one | 用于编写 Vector3(1, 1, 1) 的简便方法。 |
| zero | 用于编写 Vector3(0, 0, 0) 的简便方法。 |
| negativeInfinity | 用于编写 Vector3(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity) 的简便方法。 |
| positiveInfinity | 用于编写 Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity) 的简便方法。 |
2、变量
| 变量 | 作用 |
|---|
| magnitude | 返回该向量的长度。(只读) ✔ |
| normalized | 返回 magnitude 为 1 时的该向量。(只读) ✔ |
| sqrMagnitudeP1 | 返回该向量的平方长度。(只读) ✔ |
3、构造函数 ✔
| 构造函数 | 作用 |
|---|
| Vector3P2 | 使用给定的 x、y、z 分量创建新向量。 |
代码:
P1
getPlayerStartPoint =原点坐标
if (Vector3.SqrMagnitude(getPlayerStartPoint - transform.position) <= nav.stoppingDistance)
{
transform.rotation = Quaternion.Lerp(transform.rotation, quaternion, 0.01f);
}
P2
Vector3 pos=new Vector3(x,y,z);
4、静态函数
| 静态函数名 | 作用 |
|---|
| Distance | 返回 a 与 b 之间的距离。 ✔ |
| Lerp | 在两个点之间进行线性插值。 ✔ |
| LerpUnclamped | 在两个向量之间进行线性插值。 |
| Normalize | 使该向量的 膜 为 1。 ✔ |
| Dot跳到这里的(二二、绕开敌人的攻击点,免伤害)简单说明 | 两个向量的点积。 ✔ |
| RotateTowards | 将向量 current 朝 target 旋转。 |
| Slerp | 在两个向量之间进行球形插值。 |
| SlerpUnclamped | 在两个向量之间进行球形插值。 |
| SmoothDamp | 随时间推移将一个向量逐渐改变为所需目标。 |
| MoveTowards | 计算 current 指定的点与 target 指定的点之间的位置,移动距离不超过 maxDistanceDelta 指定的距离。 |
5、运算符
| 运算符名 | 作用 |
|---|
| operator - | 将一个向量减去另一个向量。 |
| operator != | 如果向量不同,则返回 true。 |
| operator * | 将向量乘以一个数值。 |
| operator / | 将向量除以一个数值。 |
| operator + | 将两个向量相加。 |
| operator == | 如果两个向量大致相等,则返回 true。 |
String (UI的处理) ✔
| 变量 | |
|---|
| Empty | 表示空字符串。(只读) |
| Length | 获取此实例中的字符数(只读)。 |
代码:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void Start()
{
string s = "hello";
Debug.Log(s);s
// prints hellos
s = string.Format("{0} {1}", s, "world");
Debug.Log(s);
// prints hello world
s = string.Concat("hello", "world");
Debug.Log(s);
// prints helloworld
s = s.ToUpper();
Debug.Log(s);
// prints HELLOWORLD
s = s.ToLower();
Debug.Log(s);
// prints helloworld
Debug.Log(s[1]);
// prints 'e'
int i = 42;
s = i.ToString();
Debug.Log(s);
// prints 42
s = "-43";
i = int.Parse(s);
Debug.Log(i);
// prints -43
float f = 3.14159265359F;
s = f.ToString();
Debug.Log(s);
// prints 3.141593 (an approximation)
s = "-7.14159265358979";
f = float.Parse(s);
Debug.Log(f);
// prints -7.141593 (an approximation)
}
}
Text (TMP) UI ✔
命名空间 using TMPro;
定义: private TMP_Text healchValue;
SceneManager场景加载
- 运行时的场景管理。
1、静态变量
| 变量名 | 作用 |
|---|
| sceneCount ✔ | 当前加载的场景总数。 |
| sceneCountInBuildSettings | Build Settings 中的场景数量。 |
2、静态函数
| 函数名 | 作用 |
|---|
| CreateScene | 在运行时使用给定名称创建一个新的空场景。 |
| GetActiveScene ✔ | 获取当前活动的场景。 |
| GetSceneAt ✔ | 获取 SceneManager 的已加载场景列表中索引处的场景。Scene scene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1); |
| GetSceneByBuildIndex | 从构建索引中获取场景结构。 |
| GetSceneByName | 搜索已加载的场景,查找包含给定名称的场景。 |
| GetSceneByPath | 搜索所有已加载的场景,查找具有给定资源路径的场景。 |
| LoadScene ✔ | 按照 Build Settings 中的名称或索引加载场景。 |
| LoadSceneAsync✔ | 在后台异步加载场景。 |
| MergeScenes | 这会将源场景合并到 destinationScene 中。 |
| MoveGameObjectToScene | 将游戏对象从当前场景移至新场景。 |
| SetActiveScene✔ | 将场景设置为活动状态。 |
| UnloadSceneAsync 简单用法 | 销毁所有与给定场景关联的游戏对象,并将场景从 SceneManager 中移除。 |
| Events | |
| activeSceneChanged | 订阅此事件可在活动场景发生变化时收到通知。 |
| sceneLoaded | 向此事件添加委托,以在加载场景时收到通知。 |
3、Events
| Events | 作用 |
|---|
| activeSceneChanged | 订阅此事件可在活动场景发生变化时收到通知。 |
| sceneLoaded | 向此事件添加委托,以在加载场景时收到通知。 |
| sceneUnloaded | 向此事件添加委托以在卸载场景时收到通知。 |
2.1 SceneManager.LoadScene静态函数 以累加方式加载场景。
- 命名空间 using UnityEngine;、using UnityEngine.SceneManagement;
- 在播放器中加载场景时使用。
- 通过 LoadSceneMode 选择在使用 SceneManager.LoadScene 时加载哪种类型的场景。可用模式为单模式和附加模式。
- 单模式将加载一个标准的 Unity 场景,该场景将独立显示在 Hierarchy 窗口中。附加模式将加载一个显示在 Hierarchy 窗口的场景,而窗口中同时还包含其他活动场景。
| 变量名 | 作用 |
|---|
| Single | 关闭所有当前加载的场景 并加载一个场景。 |
| Additive | 将场景添加到当前加载的场景。 |
代码演示:
//异步加载场景搭配协程
IEnumerator Transition(string name)
{
if (SceneManager.GetActiveScene().name != name) {
异步加载场景(跳转场景使用)
yield return SceneManager.LoadSceneAsync(name);
创建player
Instantiate(plyerPrefab, getPonTransition(teleporterPos).transform.position, getPonTransition(teleporterPos).transform.rotation);
yield break;
}
}
//单模式将加载一个标准的 Unity 场景,该场景将独立显示在 Hierarchy 窗口中。
Cursor
- 用于设置光标(鼠标指针)的光标 API。
- 支持 macOS、Windows 和 Linux 上的硬件光标。在不支持的平台上回退到软件光标。
- Windows 应用商店应用程序:仅支持一个通过 PlayerSettings.defaultCursor 设置的硬件光标,在运行时使用 Cursor.SetCursor 创建的光标被视为软件光标。
- 用作光标的纹理应在其导入设置中作此标记。
1、静态变量
| 变量名 | 作用 |
|---|
| lockState 简单用法 | 确定硬件指针是否锁定到视图的中心、受限于窗口或者根本不受限制。 |
| visible | 确定硬件指针是否可见。 |
1.1、lockState👉public static CursorLockMode lockState ;
CursorLockMode枚举类型
1、变量
| 变量名 | 作用 |
|---|
| None | 光标行为未修改。 |
| Locked | 将光标锁定在该游戏窗口的中心。 |
| Confined | 将光标限制在游戏窗口中。 |
2、静态函数
| 函数名 | 作用 |
|---|
| SetCursor | 将鼠标光标设置为给定纹理。 |
代码演示:
//将光标锁定在该游戏窗口的中心。
Cursor.lockState = CursorLockMode.Locked;
Quaternion
- 四元数用于表示旋转。
- 它们结构紧凑,不受万向锁影响,可以轻松插值。 Unity 内部使用四元数来表示所有旋转。
- 它们基于复数,不容易理解。 您几乎不会有机会访问或修改单个四元数分量(x、y、z、w); 大多数情况下,您只需要获取现有旋转(例如,来自 Transform),然后使用它们构造新的旋转 (例如,在两个旋转之间平滑插值)。 您绝大多数时间使用的四元数函数为: Quaternion.LookRotation、Quaternion.Angle、Quaternion.Euler、Quaternion.Slerp、Quaternion.FromToRotation 和 Quaternion.identity。(其他函数仅用于一些十分奇特的用例。)
- 您可以使用 Quaternion.operator * 对旋转进行旋转,或对向量进行旋转。
注意,Unity 使用的是标准化的四元数。
| 变量名 | 作用 |
|---|
| eulerAngles | 返回或设置旋转的欧拉角表示。 |
| normalized | 返回该四元数,并且量值为 1(只读)。 |
| 函数名 | 作用 |
|---|
| SetFromToRotation | 创建一个从 fromDirection 旋转到 toDirection 的旋转。 |
| SetLookRotation | 使用指定的 forward 和 upwards 方向创建旋转。 |
| ToAngleAxis | 将旋转转换为“角-轴”表示形式(角度以度为单位)。 |
| ToString | 返回该四元数的整齐格式化的字符串。 |
| 函数名 | 作用 |
|---|
| Angle | 返回两个旋转 a 和 b 之间的角度(以度为单位)。 |
| AngleAxis | 创建一个围绕 axis 旋转 angle 度的旋转。 |
| Dot | 两个旋转之间的点积。 |
| Euler | 返回一个旋转,它围绕 z 轴旋转 z 度、围绕 x 轴旋转 x 度、围绕 y 轴旋转 y 度(按该顺序应用)。 |
| FromToRotation | 创建一个从 fromDirection 旋转到 toDirection 的旋转。 |
| Inverse | 返回 rotation 的反转。 |
| Lerp | 在 a 和 b 之间插入 t,然后对结果进行标准化处理。参数 t 被限制在 [0, 1] 范围内。 |
| LerpUnclamped | 在 a 和 b 之间插入 t,然后对结果进行标准化处理。参数 t 不受限制。 |
| LookRotation | 使用指定的 forward 和 upwards 方向创建旋转。 |
| Normalize | 将此四元数转换为 1,方向相同,但量值为 1。 |
| RotateTowards | 将旋转 from 向 to 旋转。 |
| Slerp | 在四元数 a 与 b 之间按比率 t 进行球形插值。参数 t 限制在范围 [0, 1] 内。 |
| SlerpUnclamped | 在 a 和 b 之间以球形方式插入 t。参数 t 不受限制。 |