你玩吃鸡游戏有没有这样的经历,往往只有当枪在你的视野内时,才可以捡起,而如果你背对枪,就算距离很近时,也没有办法捡起。如何用Unity来实现类似的功能呢,来学习吧!
Mesh Renderer:
Mesh Renderer
即网格渲染器,如果在游戏中,相机可以捕捉到物体,则会通过Mesh Renderer
对物体进行渲染,因此我们可以通过Mesh Renderer
来判断物体是否在相机视野中,从而做出判断
实现方式:
首先确保物体上面具有Mesh Renderer
,然后通过脚本生命周期的OnBecameVisible()
和OnBecameInvisible()
,类似于碰撞体检测,可以通过这两个方法来实现对于物体是否在视野内的判断
OnBecameVisibale():
- 当物体进入任何相机的视野内时,触发一次该方法,并且方法是挂载在物体上,与相机无关
OnBecameInvisible():
- 当物体离开任何相机的视野内时,触发一次该方法,并且方法是挂载在物体上,与相机无关
具体实例:
当角色接近某物体并且在视野内时,弹出提示按钮(模拟捡取物体过程):
首先确保物体具有Mesh Renderer,然后为物体挂载脚本,并添加相关的代码:
然后开始为物体添加脚本,首先利用一个布尔类型来对状态来进行判断:
public bool isplay;
void OnBecameVisible() //当物体进入相机视野
{
isplay = true;
}
void OnBecameInvisible() //当物体离开相机视野
{
isplay = false;
}
然后再次通过对于物体与角色之间的距离的判断来完成是否激发状态,角色命名为player
,而tigLcon为捡取提示,如图:
具体代码,首先通过距离判断和视野判断,若通过,则激发捡取状态并且弹出提示图片:
public Image tigLcon; //F按钮提示图
public bool pickUp=false; //角色是否可以捡取物体
private void Update()
{
if (isplay&&Vector3.Distance(player.position, transform.position) <2.5f)
{
Debug.Log("Yes!");
//在UI界面显示F按钮同时激发可以捡取物体的状态
tigLcon.enabled = true;
pickUp=true;
}
}
最后通过pickUp可以实现后续的捡取物体的操作
总结:
OnBecameVisible()
和OnBecameInvisible()
是MonoBehaviour脚本生命周期的一个方法,使用比较简单,但可以帮助我们解决复杂的视野判断问题。