前言

在上一节中,我们构建了一个基本的平面和一个能够响应键盘操作进行移动的球体。但在调试中可以看到,球体仅仅是发生了移动,其自身并没有产生滚动,作为一个3D游戏中的球体,这样简易的移动方式未免显得太过扁平了。

那么,除了通过直接改变transmit来移动球体之外,是否还能有其他更加自然的移动球体的方法呢?或者说,作为游戏引擎的unity是否能让游戏对象们作为物理刚体进行运动呢?

项目需求

在上一节的基础上,给球体添加刚体组件,使其能在力的作用下进行滚动。

改进场景。

在场景中添加其他具有刚体属性的物体。

刚体

-本节相关内容请读者参考:

-https://docs.unity.cn/cn/current/Manual/PhysicsSection.html,《物理系统》

刚体(Rigid Body)其实是一个物理上的概念。在物理意义上,刚体指的是那些受力后大小、形状和内部各点相对位置不变的物体,是一个理想的模型。而在unity中,给游戏对象添加刚体组件则意味着此游戏对象将受物理控制,比如说可以给其添加力使其开始移动。

修改球体组件

-本节相关内容请读者参考:

-https://docs.unity.cn/cn/current/Manual/RigidbodiesOverview.html,《刚体概述》

-https://docs.unity.cn/cn/current/Manual/class-Rigidbody.html,《刚体》

- https://docs.unity.cn/cn/current/ScriptReference/GameObject.GetComponent.html,《GameObject.GetComponent》

首先,我们要给球体添加一个刚体组件Rigidbody,Inspector选项卡下点击Add Component->Rigidbody。

刚体组件中的各个属性含义在上方参考链接《刚体》中。为了使碰撞效果更明显,将球体刚体组件的Mass(质量)值调整为5。

在给球体添加刚体组件之后,自然也要修改其附加的脚本,将移动方式由直接改变transmit变更为施加力。在此之前,我们设定球体在每更新时根据键盘方向的按下移动向量个单位,在这里我们将此向量作为力施加到球体上。

修改后的脚本如下,由于球体的质量提升了所以给向量也响应做了乘法,让力施加的效果更明显。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Sphere : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { float x=Input.GetAxis("Horizontal"); float y=Input.GetAxis("Vertical"); //获取键盘方向键的增量 GetComponent<Rigidbody>().AddForce(new Vector3(x,0,y)*5); //施加变更方向的力 //这里的xy符号取决于读者场景的摄像机和平面朝向 } }

点击按钮进行测试,按下键盘方向键,可以看到球体发生了滚动。

改进场景

由于球体处在一个有限的平面上,在滚动中可能会滚出平面的范围从而掉出视野,所以最好在平面四周加上阻挡物。

根据之前的步骤,复制平面然后调整其角度和位置(请注意平面是有正面和反面之分的),将平面的四周包围起来。

unity简单游戏教程(Unity游戏教程初步三)(1)

在改进场景之后还可以微调一下摄像机的位置,使整个场景出现在画面内。

添加其他物体

添加物体的形状和质量等属性随读者的喜好来。只需要给所有添加的物体都加上刚体组件就行。建议读者在打开调试的情况下调整添加物体的形状、质量和位置,并用控制的球体撞击,以观察它们在游戏中的行为变化。并且,在调试的情况下,物体属性的变化(比如说位置)也会显示在其Inspector选项卡内,读者在调试过程中编辑的内容会在调试结束后还原。

,