何为触发?
让我们想象一下,当我们的人物走到了门外的时候,面前的门自动打开;当我们走到一个陷阱上的时候,陷阱自动触发将人物困住;当我们走到敌人面前的时候,敌人自动苏醒并攻击我们等等等,这些都是触发。触发对于我们Unity制作有着极其重要的作用,是我们必须要学会的功能。
接下来跟着我的操作我们一起来制作一个简单的触发吧!
首先,我们创建一个平面,并创建一个胶囊对象,用胶囊代替我们的玩家。
如图所示。
接下来我们让胶囊动起来。为胶囊编写一个脚本使其移动。
创建一个脚本命名为CapsuleMove
为脚本添加如下内容使其移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CapsuleMove : MonoBehaviour
{
void Start()
{
}
void Update()
{
float horizontal = Input.GetAxis("Horizontal"); // 获取水平轴
float vertical = Input.GetAxis("Vertical"); // 获取垂直轴
Vector3 dir = new Vector3(horizontal,0,vertical); // 指定方向
transform.Translate(dir * 2 * Time.deltaTime); // 移动
}
}
(不要忘记将脚本添加到Capsule组件上)
这样我们的玩家就可以正常移动啦。
要学会触发,我们首先要学会碰撞,物体能产生碰撞有两个条件,一是两个物体都有碰撞器,二是其中一个物体要有刚体,我们为胶囊玩家添加一个刚体组件;
这下,我们的胶囊玩家既有了重力,又可以移动,还可以碰撞了,接下来让我们搭建触发吧,
我们想让玩家走到一个地方的时候,之前阻挡玩家的门消失使玩家可以继续前进。
我们首先创造一个立方体,作为触发条件,(为了让物体看的清楚一点我为他们添加了材质)创建一个门作为触发后消失的对象,
也就是我们紫色的胶囊玩家走到粉色的方块的位置,阻挡玩家的黄色的墙就会消失。
如何实现呢?
我们知道,添加了碰撞器之后,物体相互接触会产生碰撞,但是碰撞器中有一个选项
如图
是触发器选项,如果启用,此“碰撞器”将被用于触发事件,并被物理引擎忽略。
也就是说,如果启用了这个选项,这个立方体就变成了一个空架子,不会被其他物体碰撞,而形成了一个触发事件的条件。当我们勾选它时,运行当前场景,可以发现胶囊可以穿过正方体了。
当然,我们做游戏的时候不太会吧正方体显示出来让你一眼就知道走这里可以过关,我们要把他隐藏起来,我们可以简单的把正方体的显示组件关掉就好了,如图
去掉这个对勾就好了,现在场景是这样的
如图 接下来就是我们实现触发的时候了,
我们编写一个触发控制脚本,挂载到正方体上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeContral : 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 door = GameObject.Find("Door");
if (door != null) {
door.SetActive(false);
}
}
//传入的参数是进入触发的碰撞器,谁进入触发,填谁
private void OnTriggerStay(Collider other)
{
}
private void OnTriggerExit(Collider other)
{
}
}
这里有三个常用方法,如上图。
OnTriggerEnter()方法是进入触发器的时候,会调用里面的函数。
OnTriggerStay()方法是在触发器里面的时候,
OnTriggerExit()方法是离开触发器的时候,具体使用与第一个方法是一样的,值得注意的是方法中传入的参数是进入触发的碰撞器,谁进入触发,填谁。
至此,一个简单的触发就完成啦