Unity之触发器

目录

一、触发器概念 

二、碰撞与触发的区别

三、触发器小实例 

一、触发器概念 

第一次玩侠盗猎车手是在小学,从那以后就开启了我的五星好市民之路。

 下面是小编在小破站截的图,这是罪恶都市最开始的地方,大家一定很熟悉:

老市民们都知道走到粉红色圈里会触发剧情,它是控制游戏玩法和剧情走向的重要模块,这就是小编对触发器的理解。

 类似的功能在很多游戏中都有,触发器有看得见的(罪恶都市)也有看不见的(荒野大镖客2)

本篇带大家做一个简单的触发器小实例。


二、碰撞与触发的区别

准备工作:

  1. 我们新建一个平面(地面)、胶囊(玩家)、立方体(墙)
  2. 胶囊挂载 Rigidbody 组件,冻结旋转让它保持直立,挂载能使胶囊移动的脚本作为我们控制的玩家;
  3. 把立方体拉长形成一堵墙,新建材质添加颜色,让胶囊和墙更明显

胶囊: 

Unity之触发器_第1张图片

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组件中的是触发器属性勾上就可以了 √,再看一下效果:

Unity之触发器_第2张图片

可以看到这次胶囊就穿过去了,碰撞更像一个实物实体可触摸,触发像是一个虚拟的东西但它又是真实存在的,这就是他们的区别。

 三、触发器小实例 

我们先放效果图:我们控制玩家直行有墙过不去,走到特定位置触发机关墙消失,就可以通过了

  1.  把墙Box Collider组件中的是触发器属性取消勾选,作为一个实实在在的墙(doge.jpg)
  2. 新建一个立方体作为触发器,把立方体中Box Collider组件触发器属性勾选 √
  3. 立方体挂载我们编写的CubeControl脚本作为触发器触发后执行的动作
  4. 把立方体的MeshRenderer组件取消勾选,这样我们就看不到立方体了

Unity之触发器_第3张图片

注:这里的绿色边框是碰撞检测的边框同样也是触发器检测的边框

Unity之触发器_第4张图片

 触发器检测的三个方法,小编写上注释了

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^)┛

你可能感兴趣的:(摸鱼学Unity,unity,游戏引擎)