目录
📕一、触发器概念
📕二、碰撞与触发的区别
📕三、触发器小实例
一、触发器概念
第一次玩侠盗猎车手是在小学,从那以后就开启了我的五星好市民之路。
下面是小编在小破站截的图,这是罪恶都市最开始的地方,大家一定很熟悉:
老市民们都知道走到粉红色圈里会触发剧情,它是控制游戏玩法和剧情走向的重要模块,这就是小编对触发器的理解。
类似的功能在很多游戏中都有,触发器有看得见的(罪恶都市)也有看不见的(荒野大镖客2)
本篇带大家做一个简单的触发器小实例。
二、碰撞与触发的区别
准备工作:
- 我们新建一个平面(地面)、胶囊(玩家)、立方体(墙)
- 胶囊挂载 Rigidbody 组件,冻结旋转让它保持直立,挂载能使胶囊移动的脚本作为我们控制的玩家;
- 把立方体拉长形成一堵墙,新建材质添加颜色,让胶囊和墙更明显
胶囊:
public class PlayerControl : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//水平轴
float horizontal = Input.GetAxis("Horizontal");
//垂直轴
float vertical = Input.GetAxis("Vertical");
//创建成一个方向向量
Vector3 dir = new Vector3(horizontal, 0, vertical);
//朝方向向量移动
transform.Translate(dir * 10 * Time.deltaTime);
}
}
做好准备工作后我们按实现效果摆放好运行,控制胶囊去撞,发现过不去:
有碰撞组件当然过不去了,那我们把墙变成一个触发器来看看。
很简单,把墙Box Collider组件中的是触发器属性勾上就可以了 √,再看一下效果:
可以看到这次胶囊就穿过去了,碰撞更像一个实物实体可触摸,触发像是一个虚拟的东西但它又是真实存在的,这就是他们的区别。
三、触发器小实例
我们先放效果图:我们控制玩家直行有墙过不去,走到特定位置触发机关墙消失,就可以通过了
- 把墙Box Collider组件中的是触发器属性取消勾选,作为一个实实在在的墙(doge.jpg)
- 新建一个立方体作为触发器,把立方体中Box Collider组件触发器属性勾选 √
- 立方体挂载我们编写的CubeControl脚本作为触发器触发后执行的动作
- 把立方体的MeshRenderer组件取消勾选,这样我们就看不到立方体了
注:这里的绿色边框是碰撞检测的边框同样也是触发器检测的边框
触发器检测的三个方法,小编写上注释了
public class CubeControl : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
//进入触发: 角色进入触发器就会执行
private void OnTriggerEnter(Collider other)
{
//获取墙
GameObject wall = GameObject.Find("Wall");
//如果不为空说明获取到了
if (wall != null)
{
//获取到墙改为非激活状态(墙消失),这样我们控制的角色就可以走过去了
wall.SetActive(false);
}
}
//在触发中: 进入触发后会一直执行
private void OnTriggerStay(Collider other)
{
}
//触发结束: 完全离开触发区域执行
private void OnTriggerExit(Collider other)
{
}
}
触发器小实例就做完了,点击运行就是效果图的场景了,拜拜┏(^0^)┛