图9-8确定版本后继续打开成功导入后,查看Project窗口。图9-9成功导入后,查看Project窗口图9-10Scenes目录在StartingScene场景中已经预先放置好了游戏环境的基本美术资源。GoalZone是目标终点,它有一个光圈状的粒子效果,之后需要添加脚本做胜负判定。图9-12GoalZone效果Wall是终点前的阻挡物,后续步骤中会有添加功能,实现是否允许角色通过的逻辑。......
2023-10-17
对于场景创建及前期准备,首先新建一个工程,命名为Tanks,然后进入该工程,打开Asset Store,搜索Tanks,把素材下载下来并且导入当前的工程中,导入成功后,你的project列表应该如图8-84所示。
在Asset文件夹下,新建一个文件夹Scenes,用来保存当前的场景文件,因为场景默认是未命名的,因此我们把当前的Scene保存到刚才创建的Scenes文件夹内,并命名为Main。
完成以上的步骤之后,根据Unity官方的建议,把整个布局更改一下。在Unity右上角,把布局形式更改为2 by 3,并把“Project”标签拖拽到“Hierarchy”标签的下面,如图8-85所示。
图8-85 布局更改
接下来,我们选中Directional Light,把它删除掉。下一步是添加游戏场景,在下载好的素材包里面,游戏场景已经创建好了,只需要把Prefabs文件夹下的LevelArt拖拽到Hierarchy下面即可(见图8-86)。
图8-86 添加游戏场景
这里需要注意的是,如果把一个Object随意拖到Scene里面,该Object的position有可能是随机的,因此需要做一个初始化动作,把GameObject的position值全部置为0(见图8-87)。
图8-87 GameObject position设置
接着,我们要对灯光进行设置,Window→Lighting→Settings。我们可以看到这里有着灯光的一系列设置,根据官方教程给出的图8-88来一一进行设置。(www.chuimin.cn)
图8-88 灯光设置
由于笔者所使用的Unity版本与官方教程中的Unity版本不一样,所以在细节上会有些不同,下面是笔者设置完成的页面,完成设置后,单击右下角的“Generate Lighting”来生成灯光(见图8-89),这会花费一定的时间。
接下来,要对摄像头进行设置,因为默认摄像头的位置是平视某几栋建筑物的,所以需要让它俯视整一个战场。选中Main Camera,根据图8-90给出的官方教程来设置。
注意:上面提到的Camera Projection实际上是摄像机的两种不同模式,即不同的视图呈现形式。①perspective:透视视图。跟我们的眼睛所看到的东西是一样的,物体的大小与物体的距离有关系。②orthographic:正交视图。不会随着距离收缩。所以无法判断距离。图8-91是设置完毕的图。最后,对当前的场景进行保存。
图8-89 页面设置
图8-90 摄像头设置
图8-91 摄像头设置完成
有关虚拟现实理论基础与应用开发实践的文章
图9-8确定版本后继续打开成功导入后,查看Project窗口。图9-9成功导入后,查看Project窗口图9-10Scenes目录在StartingScene场景中已经预先放置好了游戏环境的基本美术资源。GoalZone是目标终点,它有一个光圈状的粒子效果,之后需要添加脚本做胜负判定。图9-12GoalZone效果Wall是终点前的阻挡物,后续步骤中会有添加功能,实现是否允许角色通过的逻辑。......
2023-10-17
本小节的目的是制作Tank的生命条,也就是如图8-106所示的形式,有一圈绿色生命条包围在坦克的周围。图8-115TankExplosion预件设置完成以上改动后,接下来要思考一个问题,坦克的生命条UI界面有了,但还需要让它动态地减少,即在坦克受到伤害的时候会扣除生命值,那么该怎么实现呢?......
2023-10-17
打开任意一个场景,创建一个新的游戏物体,选择他并查看检视面板。当一物体是另外一些物体的父物体时,这个物体的旋转将影响所有的子物体。这将在两个物体之间创建父子关系。需要指出的是所有子物体的变换值都是相对于父物体的,这个被称为局部坐标。例如键入transform等同于gameObject.transform。前面的gameObject是编译器自动加入的,除非你要指定一个不同的物体。使用this.gameObject可以访问该脚本所依附的游戏物体,当然你可以简单的使用gameObject来访问此游戏物体。......
2023-10-17
图8-131GameManager公共变量初始化接下来先整理一下我们的游戏逻辑。GameManager可以分为若干个Tank Manager,Game Manager负责管理每个Tank Manager,而具体的游戏坦克的行为则交给每一个Tank Manager负责。图8-135新建Audio Mixer文件确保左上角选中的是MainMix,然后在Groups选项下单击“+”来创建三个子对象,并分别命名为Music、SFX、Driving。在Prefabs文件夹找到TankExplosion,把Audio Source的Output选择为SFX。整个Tanks游戏的开发流程到此完毕。......
2023-10-17
而MonoBehaviour是Unity中所有脚本的基类,如果使用JS的话,脚本会自动继承MonoBehaviour。如果使用C#的话,需要显式继承MonoBehaviour。OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。接下来,先看一下,关于MonoBehavior这个类的继承关系。所以综上MonoBehaviour的作用就是开发者可以自定义自己的组件类。图7-56就是MonoBehaviour的生命周期流程。图7-56MonoBehaviour的生命周期流程我们主要关心的是在运行状态,因为此时脚本的生命周期真正开始,如图7-57所示。......
2023-10-17
尝试添加一个刚体到刚创建的物体上。选择该物体并从菜单中选择Component→physics→Rigidbody。它们使用一个粒子发射器,粒子动画和粒子渲染器来创建一组移动的粒子。音频剪辑是一个引用属性。移除组件如果你想移除一个组件,在检视面板的头部使用option-或右击然后选择移除组件。例如,如果你想访问变换组件的变换功能,你只需要使用transform.Translate()或gameObject.transform.Translate()。使用GetComponent()有许多组件不能成为一个游戏物体类的成员。通过调用GetComponent并存储一个引用到结果中。......
2023-10-17
先选择Assets→Models→Characters选项,将主角Player拖到场景中。图8-148主向Player加入场景给主角添加Rigidbody组件。图8-151主角移动代码将代码拖拽到主角的面板上,单击运行。发现主角掉下去了,这是个严重的问题。图8-152给主角添加CapsuleCollider组件②调整大小,差不多框住主角。图8-154给地板添加BoxCollider图8-155主角倒地图8-156锁住旋转轴XZ......
2023-10-17
首先创建一个文件夹Animation用来存放GameController文件,在文件夹内右击新建一个Animator Controller。图8-163发现新Tab将PlayerController放到主角身上的Animator组件里面的Controller。图8-173加入函数到Update()图8-174主角移动,播放Move动画又一个bug出现,主角停下来时,还是播放Move动画,因为刚刚的Animator并没有设计从Move状态转为Idle状态的条件。图8-175主动停止,仍在播放Move动画isMoving设置false,再运行游戏,主角就正常的Move和Idle了。......
2023-10-17
相关推荐