【5.Prefab与碰撞检测】5.碰撞检测

【5.Prefab与碰撞检测】5.碰撞检测

首页模拟经营NIVA汽车碰撞测试更新时间:2024-06-02
5.碰撞检测

所谓碰撞检测,就是指检测游戏对象之间是否发生了碰撞的处理。检测碰撞是否发生的过程称为碰撞检测,碰撞发生后的行为则称为碰撞处理

5.1碰撞检测算法

要严格检测对象之间是否发生碰撞,必须判断两个对象的轮廓线是否相交,但这样处理计算量比较大,脚本的编写也很复杂。所以我们在本节的碰撞检测中使用比较简单的算法来实现。

简单的碰撞检测算法:把对象的形状简单地看作圆形,这样的话,只要知道圆心的坐标和半径就可以对碰撞进行检测。利用两个圆的圆心坐标即可计算出两个圆的圆心之间的距离,公式如下:

如果圆心的距离 d 大于两个圆的半径之和,说明两个圆没有相交;相反,如果 d 小于两个圆的半径之和,则说明两个圆相交。

5.2编写碰撞检测脚本

接下来,我们在上一节的使箭头下落的脚本中增加碰撞检测功能。代码如下:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ArrowController : MonoBehaviour { GameObject player; // Start is called before the first frame update void Start() { player = GameObject.Find("player"); } // Update is called once per frame void Update() { transform.Translate(0, -0.1f, 0); if (transform.position.y < -5.0f) Destroy(gameObject); // 碰撞检测 Vector2 p1 = transform.position; Vector2 p2 = player.transform.position; Vector2 dir = p1 - p2; float d = dir.magnitude; float r1 = 1.0f; float r2 = 0.5f; if (d < r1 r2) { Destroy(gameObject); Destroy(player); } } }

运行游戏,看看效果!

在上面的碰撞检测代码中,两个游戏对象的坐标分别保存在两个 Vector2 变量中,这两个 Vector2 变量的差值表示从 p2 指向 p1 的向量,通过的向量的 magnitude 属性可以获取到该向量的长度。然后检测这个长度与两个半径之和的关系,如果检测到碰撞了,则将两个游戏对象销毁掉。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved