unity3d-常用组件

✨学习阶段我会不断的更新新的内容,文章如有误请指正,如果觉得对你有用,请点赞收藏关注一波,谢谢支持😘

提示:以下是本篇文章正文内容

Rigidbody⚖⚖⚖

  • 描述
  1. 通过物理模拟控制对象的位置。
  2. 向对象添加 Rigidbody 组件后,其运动将受到 Unity 物理引擎的控制。即使不添加任何代码,Rigidbody 对象也受到向下的重力,并在与其他对象碰撞时作出反应(如果也存在适当的 Collider 组件)。
  3. Rigidbody 还有一个脚本 API,让您能够向对象施加力,并以逼真的物理效果对其进行控制。例如,可以根据车轮施加的力来指定汽车的行为。根据这些信息,物理引擎可以处理汽车运动的大多数其他方面,因此汽车可进行逼真的加速并适当地响应碰撞。
  4. 在脚本中,建议使用 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. 用于从射线投射获取信息的结构。

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);
OverlapPointCollider2D 与该点重叠的碰撞体。 ✔
举例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📡📡📡

  • 描述
  1. 此类包含在开发游戏时可使调试变得更轻松的方法。

静态函数

静态函数作用
DrawLine在指定的起始点与结束点之间绘制一条直线。 ✔
DrawRay在世界坐标中绘制一条从 start 到 start + dir 的直线。 ✔
Log将消息记录到 Unity 控制台。 ✔
ClearDeveloperConsole将错误从开发者控制台中清除。

Vector3📍📍📍

  • 描述
  1. 用于表示 3D 向量和点。

  2. Unity 内部使用该结构传递 3D 位置和方向。 此外,它还包含用于执行常见向量操作的函数。

  3. 除了下面列出的函数以外,也可以使用其他类操作向量和点。 例如,对于旋转或变换向量和点来说,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的处理) ✔

  • 描述
    将文本表示为一系列 Unicode 字符。
变量
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. 运行时的场景管理。

1、静态变量

变量名作用
sceneCount ✔当前加载的场景总数。
sceneCountInBuildSettingsBuild 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静态函数 以累加方式加载场景。

  • 描述
  1. 命名空间 using UnityEngine;、using UnityEngine.SceneManagement;
  2. 在播放器中加载场景时使用。
  3. 通过 LoadSceneMode 选择在使用 SceneManager.LoadScene 时加载哪种类型的场景。可用模式为单模式和附加模式。
  4. 单模式将加载一个标准的 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

  • 描述
  1. 用于设置光标(鼠标指针)的光标 API。
  2. 支持 macOS、Windows 和 Linux 上的硬件光标。在不支持的平台上回退到软件光标。
  3. Windows 应用商店应用程序:仅支持一个通过 PlayerSettings.defaultCursor 设置的硬件光标,在运行时使用 Cursor.SetCursor 创建的光标被视为软件光标。
  4. 用作光标的纹理应在其导入设置中作此标记。

1、静态变量

变量名作用
lockState 简单用法确定硬件指针是否锁定到视图的中心、受限于窗口或者根本不受限制。
visible确定硬件指针是否可见。

1.1、lockState👉public static CursorLockMode lockState ;

CursorLockMode枚举类型

1、变量

变量名作用
None光标行为未修改。
Locked将光标锁定在该游戏窗口的中心。
Confined将光标限制在游戏窗口中。

2、静态函数

函数名作用
SetCursor将鼠标光标设置为给定纹理。

代码演示

//将光标锁定在该游戏窗口的中心。
Cursor.lockState = CursorLockMode.Locked;

Quaternion

  • 描述
  1. 四元数用于表示旋转。
  2. 它们结构紧凑,不受万向锁影响,可以轻松插值。 Unity 内部使用四元数来表示所有旋转。
  3. 它们基于复数,不容易理解。 您几乎不会有机会访问或修改单个四元数分量(x、y、z、w); 大多数情况下,您只需要获取现有旋转(例如,来自 Transform),然后使用它们构造新的旋转 (例如,在两个旋转之间平滑插值)。 您绝大多数时间使用的四元数函数为: Quaternion.LookRotation、Quaternion.Angle、Quaternion.Euler、Quaternion.Slerp、Quaternion.FromToRotation 和 Quaternion.identity。(其他函数仅用于一些十分奇特的用例。)
  4. 您可以使用 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 不受限制。
  • 27
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 40
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SYFStrive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值