unity学习笔记

发布时间:2023年12月23日

一、渲染顺序

在Unity中,渲染层级是指控制场景中不同对象渲染顺序的一种机制。这个机制允许你指定对象在渲染时的顺序,确保它们以正确的顺序呈现在屏幕上。

Sorting Layer(排序层):

Sorting Layer是Unity中用于控制渲染层级的一种机制。每个对象都可以分配到一个特定的Sorting Layer中。

Order in Layer(层内顺序):

Order in Layer是指在同一Sorting Layer中,对象的渲染顺序。它是一个整数值,数值越小,渲染顺序越靠前。

通过设置不同的Sorting Layer和Order in Layer,可以控制对象的渲染顺序,从而达到类似于渲染优先级的效果。这对于确保场景中的不同对象按照正确的顺序进行绘制非常重要,尤其是在处理2D游戏、UI元素等方面。

图层顺序的值越小会越先渲染,实际表现如下:

将坦克的图层顺序设置为0,植物的图层顺序设置为1,效果如下

如果想要坦克在上面,将其数值调换即可。

二、坦克的攻击

坦克的攻击使用的是子弹的预制体,因此就要涉及到预制体的实例化:

预制体实例化:

在脚本中引用预制体 在脚本中声明一个公共变量,用于存储预制体的引用。

public GameObject explodePrefabs;

实例化预制体 使用 Instantiate?函数在场景中创建预制体的实例。你可以指定位置、旋转和父对象等信息

?Instantiate(explodePrefabs, transform.position, transform.rotation);

第一个参数是实例化哪个预制体,

第二个参数是实例化预制体的位置,

第三个参数是旋转的角度

操作实例化后的对象: 可以对实例化后的对象进行任何操作。

这里想要让子弹的朝向跟坦克的朝向保持一致,因此子弹产生的角度应该是当前坦克的角度+子弹应该旋转的角度。其中的这个角度参数是一个四元数类型的参数,由于每一个游戏物体身上的这个rotation显示的度数是欧拉角,它并不是四元数。

所以我们想要让这个子弹有一个旋转角度,我们就应该把我们想要让它旋转的那个角度转成一个四元数。

那么我们怎样把一个欧拉角变成一个四元数类型的变量呢?

可以借助以一个欧拉角转四元数的api

Quaternion.Euler()

示例:子弹产生的角=当前坦克的角度+子弹应该旋转的角度

获取坦克的旋转角度 transform.eulerAngles

获取子弹应该旋转的角度,要获取这个首先定义一个欧拉类型的变量

private Vector3 bullectAulerAngles;

这个子弹的旋转角度可以通过输入的方向键来确定

?float h = Input.GetAxisRaw("Horizontal");
? ? ? ? if (h < 0)
? ? ? ? {
? ? ? ? ? ? bullectEulerAngles = new Vector3(0, 0, 90);
? ? ? ? }
? ? ? ? else if (h > 0)
? ? ? ? {
? ? ? ? ? ? bullectEulerAngles = new Vector3(0, 0, -90);
? ? ? ? }
? ? ? ? float v = Input.GetAxisRaw("Vertical");
? ? ? ? if (v < 0)
? ? ? ? {
? ? ? ? ? ? bullectEulerAngles = new Vector3(0, 0, 180);
? ? ? ? }
? ? ? ? else if (v > 0)
? ? ? ? {
? ? ? ? ? ? bullectEulerAngles = new Vector3(0, 0, 0);
? ? ? ? }

最后代码:

Instantiate(explodePrefabs, transform.position,Quaternion.Euler(transform.eulerAngles+bullectEulerAngles));

现在子弹的方向就和坦克运动方向一致了;

为子弹添加一个速度,思路:想要子弹朝着前方运动

移动要使用Translate方法,一个参数是移动的举例,第二个参数是相对的坐标系。

?transform.Translate(transform.up* moveSpeed * Time.deltaTime, Space.World);

三、触发检测

在Unity中,触发器(Trigger)是一种与其他Collider组件交互的特殊类型的Collider。与普通Collider不同,触发器不会引起物体之间的物理碰撞反应,而是用于检测物体进入或离开特定区域。触发器通常用于实现与游戏逻辑相关的事件。

为子弹添加一个触发器,添加一个组件Box Collider 2D,然后将是触发器勾选上就让子弹成为了触发器了:

发生触发检测的必要条件为:

两方必须都有碰撞器,并且其中一方要选中是触发器,最好运动的一方有被添加刚体Rigibody 2D组件。

想要两个物体发生触发检测,就需要在子弹的脚本里面写触发检测。

OnTriggerEnter(Collider other) 当其他Collider进入触发器区域时调用。在脚本中实现这个方法,可以定义当某物体进入触发器时应该执行的代码。

OnTriggerExit(Collider other) 当其他Collider离开触发器区域时调用。类似于OnTriggerEnter,可以在这个方法中定义离开触发器时应该执行的代码。

OnTriggerStay(Collider other) 当其他Collider在触发器区域内停留时每帧调用。可以用于处理持续触发的事件。

文章来源:https://blog.csdn.net/2301_79022588/article/details/135157216
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。