前言
最近希望在Unity里实现这样一个功能:
黄色半透明部分是一个手电筒,我希望手电筒范围内的小球会高亮轮廓,且手电筒移出去后小球会恢复原来的样子:
一开始我把整个问题想的太复杂了,想着在Update()函数里暴力检测所有小球在不在这个手电筒范围内,从而决定物体是否高亮,但后面发现直接使用Unity自带的“Mesh Collider”即可解决该问题,即当物体与手电筒的Mesh发生碰撞的时候我们让物体高亮,不碰撞的时候不高亮,方便快捷。
鉴于网上相似教程较少,故记录一下。
教程
1.给你的手电筒套上一个圆锥体Mesh:
由于Unity本身并不能创建Cone(圆锥体)的Mesh,故此处我们引入Unity一个免费的包Cone Mesh:
引入后,在菜单右键创建Cone物体,然后调整至与光源位置、朝向和半径相同即可。
2. 引入高亮特效
使用Unity免费提供的包Quick Outline:
引入后,将Outline提供的cs脚本拖入到物体上即可让物体高亮。(当然,我们一开始都是把该脚本的“勾选”去掉,即一开始不让它高亮“)
3.代码部分
创建一个cs文件,名字任意取(比如我这里创建了个叫EyeCone.cs
的脚本),在该脚本下写入以下代码:
private Outline outlineComp;
private void OnTriggerEnter(Collider other)
{
outlineComp = other.GetComponent<Outline >();
outlineComp.enabled = true;
outlineComp.OutlineWidth = 10;
outlineComp.OutlineColor = Color.red;
}
private void OnTriggerExit(Collider other)
{
outlineComp = other.GetComponent<Outline >();
outlineComp.enabled = false;
}
OnTriggerEnter
表示当照射范围内有物体(Collider other)进来了的话,要执行的函数。这里是对范围内的物体other的高亮模块设置为true,使得物体高亮显示。
OnTriggerExit
的作用则相反,当物体离开照射范围后,则物体的高亮设置为false,使得物体不再高亮。
接下来把该脚本(EyeCone.cs
)拖到圆柱体上即可:
注意Cone这个脚本是我们引入的包自带的,记得在该脚本里勾选上"is trigger
",不然物体受到碰撞也不会高亮!!