[团结]刚体介绍!我将以一种易于理解的方式进行解释

游戏引擎的最新进展大大降低了技术障碍,使创建具有丰富功能的游戏变得更加容易。尤其是如果物理引擎很简单,则无需编写一行程序即可实现它。
因此,这次,我将解释Unity的物理原理和作为碰撞判断的刚体。

游戏的物理判断是什么?

刚体很棒,但并不是所有物理处理都是自动化的。在组合多个功能时,将需要构建一些部分。因此,在进入刚体之前,让我们简要介绍一下游戏空间的物理原理。

模拟和数字

物理现象是司空见惯的,但它们是在物体之间发生的现象,在我们的现实世界中并不罕见。双手合十也是一种奇妙的身体现象。
但是,游戏空间有些不同。

在游戏世界中,时间实际上就像一部电影。并将这一帧称为帧。该帧的单位非常重要,在游戏空间中,该对象每帧移动的移动量将被计算,并以此为基础绘制对象。运动只能通过重复此过程来表达。

因此,在游戏空间中,绘制下一帧时它可能与对象重叠。为了防止它们发生,调整了移动位置,并说“如果是下一帧,它将进入命中判断区域,因此我必须对其进行校正”,从而重画对象。然后,通过在此“必须校正”的部分中放置许多复杂的元素(边界和摩擦)并在每一帧中进行操作,它的行为就像真实的物理现象。这是游戏中身体判断的原理。

另一方面,如果将一帧的移动距离设置得太大,则命中判断对象的位置也会被绘制,因此从我们的角度来看,它似乎会穿透对象。这方面的解释将花费很长时间,但是Unity将完成大多数困难的事情,所以让我们看看如何使用它。

统一体力判断

现在让我们实际使用刚体。这次我想做一个样本,立方体自然落下并与地板碰撞。实际上,如果达到这一水平,则无需编写程序即可实现这一目标。在Unity的情况下,它具有命中判断属性,并且可以通过简单地调整物理属性的参数来调整前面提到的摩擦和反弹。有点难以理解,但是我会在解释的同时对其进行解释,让我们开始吧。
首先,创建一个将成为地板的对象以及一个将掉落的立方体对象。
从下面的图像中选择,并将地板保留为地面,将立方体保留为立方体。


调整摄像机和位置关系,以便可以正确看到对象。

实际上,此时,地面和立方体已经具有命中判断属性。上图的右下方有一个叫做collider的部分。这是命中判断属性(组件)。因此,当创建它时,它已经具有成功的判断力。
如果不是,请从下面描述的“添加组件”中添加它。

添加组件

从这里开始生产。
赋予对象物理属性。但是,与前面提到的对撞机(命中判断)不同,它不是一开始就给出的,因此我将添加一个新的对撞机。选择立方体对象,如下图所示,然后从“添加组件”中选择刚体。


现在,您可以身体摔倒了。
照原样,重力下降功能已经启用,因此完成。
所以顶▶のボタンを押して挙動を確認しましょう。

当然,立方体撞到地板并停了下来,
不知何故,这是一种奇怪的跌倒方式。最重要的是,它很沉闷。实际的游戏对此毫无用处。

物理材料

因此,让我们在碰撞时设置属性,并进一步享受物理引擎的乐趣。

使类似图像的东西称为phisicsMaterial。让我们将其适当地命名为cubeMaterial。
就像物理材料的名称所暗示的那样,它更详细地设置了物理行为。
有很多参数,但是这次让我们以一种易于理解的方式使其反弹。要使其反弹,您可以设置排斥系数,因此让我们设置图像的边界。

然后在多维数据集中进行设置。

我安全反弹。既然您已经了解了基本操作,那么让我们编写一个程序,并在遇到重大问题时结合各种过程。

通过身体判断来获取对象

现在,您可以添加物理属性并实际移动它。但是,仅此一项几乎无能为力。我希望对方在打中表现出特别的行为。在这种情况下,您需要编写一个程序。但是,从一开始就尝试实现复杂的事情时,有很多事情要记住,所以让我们简单地隐藏被触摸的对象。

编写程序

在编写程序之前,让我们组织这次要实现的行为。
这次是在立方体接触地板时擦除地板上物体的过程。
让我们分别将其分为“定时”,“目标”和“目标处理”。
因此,应该实现在“球与地板碰撞时的瞬间”执行“擦除”“地板”的处理。我认为这使思路更加清晰,因此让我们基于此构建程序。

每个元素都使用Unity的功能,因此您使用的程序也是Unity的。
程序在哪里?
//docs.unity3d.com/ja/current/ScriptReference/Collider.html
↑。
上页的对撞机是个热门选择。你见过某处吗?让我们尝试检查Cube和Ground的属性(组件)。有个叫做对撞机的东西。就在这里。

正如我之前所说的,这是一个命中判断属性,从现在开始要实现该示例,就需要此Collider。这是因为从现在开始,对撞机中的功能将以编程方式使用。

现在让我们给多维数据集一个程序。从“添加组件”中将其命名为“多维数据集脚本”,然后在编辑器中将其打开。然后添加以下代码。

    // OnCollisionEnter は触れた瞬間に実行される関数
    void OnCollisionEnter(Collision col)
    {
        // 引数のcolにはぶつかったオブジェクトの当たり判定属性が入る
        // SetActiveはゲームオブジェクトの存在を消す
        col.gameObject.SetActive(false);
    }

让我们实际移动它。再来一次▶ボタンを押します。

当它弹跳一次时,地板安全地消失了,立方体原样掉落了。
为干得好而欢呼。

Unity的工作

现在,让我们考虑一下Unity的实际功能以及Unity处理流程。
需要注意的一点是它是持久性的,但是Unity赋予对象属性。
是。实际上,Unity的组件提供功能,同时充当访问对象本身的网关。

让我们考虑一下代码。

void OnCollisionEnter(Collision col)

实际联系信息存储在此处col的上部。这些信息就是该对象的对撞机。

它似乎是持久的,但是Collider是对象拥有的“属性”。因此,如果您对带给您``属性''的对象有一个完美的想法,那么您是否可能能够以访问对象本身作为起点? ..

那是下面的代码。

    col.gameObject.SetActive(false);

col之后的gameObject是对象主体。并且它使用SetActive(false);作为隐藏对象的函数。

如您所见,Unity是对象2 on 1上的组件。考虑哪个对象具有什么属性以及如何使其协同工作非常重要。

身体判断中的事件处理

最后,让我们仔细看看这种类型的事件处理。上一个示例在您触摸它的那一刻就被激活了,但是您经常想在触摸后离开后立即调整时间。

//docs.unity3d.com/ja/current/ScriptReference/Collider.html
在上方链接的消息部分

碰撞检测

 

碰撞输入 触摸的那一刻
OnCollisionStay 持续接触的状态
OnCollinsionExit 片刻之遥

较早的时间是OnCollisionEnter,因为时间是“碰撞时刻”,但是,例如,如果您想在保持接触要恢复的对象的时间内进行恢复,则想准备一个a头,例如在离开OnCollisionStay时爆炸让我们切换您实际想要制作的特征,例如onCollisionExit。

同样,这次它处于对碰撞进行物理判断的状态,但是如果使用“触发器”,您将能够检测到滑过和触摸物体的状态。所以
在此区域中,它不仅可以用作碰撞,还可以用作改变行为的触发器,例如实施敌人将要攻击的行动。这就是它触发的原因。

 

OnTriggerEnter 触摸的那一刻
OnTriggerStay 持续接触的状态
OnTriggerExit 片刻之遥

概要

我已经看到了如何使用刚体及其外围知识和概念,但是怎么了?
就像我多次说过的那样,由于游戏是由多个元素交织在一起的,因此像这样的时间操作功能和赋予对象属性的刚体是取决于技巧和组合的大武器。将会。建立自己的游戏,并尝试各种尝试来积累专门知识。

撰写本文的人

assa

我是京都的工程师。记住assa或eh。 我的主要业务是在网上玩我的业余爱好。有什么好的