0


【unity】玩家接近物体时显示交互提示(傻瓜版)

学习unity第四天,学艺不精的情况下上手了,不知道怎么构建框架,不会用事件把game和ui分开,全写在一个文件里了。

效果图是这样的

远离门时:

靠近门后(显示一个交互提示,离开时会消失):

我先是写好了开关门的脚本DoorsController(详见上一篇),然后其中有一个判断玩家接近的方法

private bool IsPlayerNearDoor()
    {
        // 假设玩家有一个名为PlayerTag的标签
        Collider[] colliders = Physics.OverlapBox(doorCollider.bounds.center, doorCollider.bounds.size * 0.5f); // 使用门的中心和大小来检测碰撞体  
        foreach (Collider col in colliders)
        {
            if (col.CompareTag("Player")) // 检查碰撞体是否有"Player"标签  
            {
                return true; // 如果找到带有"PlayerTag"标签的碰撞体,则返回true  
            }
        }
        return false; // 如果没有找到,则返回false  
    }

接下来我就是用这个方法实现这一功能的。

首先是触发器组件有三个自带的API

OnTriggerEnter、OnTriggerStay、OnTriggerExit

第一个进入区域执行一次,第二个是在区域内一直执行,第三个是离开时执行一次。

所以显而易见,我们需要用到OnTriggerEnter和OnTriggerExit

    public bool isInfor = false;
    public GameObject InforTip;

    private void OnTriggerEnter(Collider other)
    {
        InforTip.SetActive(isInfor = !isInfor);
    }
    private void OnTriggerExit(Collider other)
    {
        InforTip.SetActive(isInfor = !isInfor);
    }

然后出去以后把组件绑定一下~

然后就可以啦。

我的DoorsController如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class DoorsController : MonoBehaviour
{
private Animator anim; // 动画控制器组件
private bool isOpen = false; // 记录门是否打开
private Collider doorCollider; // 门的碰撞体组件

 public bool isInfor = false;
 public GameObject InforTip;

// Start is called before the first frame update  
 void Start()
 {
     anim = GetComponent<Animator>(); // 获取动画控制器组件  
     doorCollider = GetComponent<Collider>(); // 获取门的碰撞体组件  
     // 初始设置门不是触发器  
     doorCollider.isTrigger = false;
 }

// Update is called once per frame  
 void Update()
 {
     // 如果门是打开的且玩家按下了E键,则关闭门  
     if (isOpen && Input.GetKeyDown(KeyCode.E))
     {
         CloseDoor();
     }
     // 如果门是关闭的且玩家按下了E键,并且玩家与门发生了碰撞,则打开门  
     else if (!isOpen && Input.GetKeyDown(KeyCode.E) && IsPlayerNearDoor())
     {
         OpenDoor();
     }
 }

private void OpenDoor()
 {
     // 触发开门动画  
     anim.SetTrigger("Open");
     // 将门设置为触发器,允许玩家穿过
     doorCollider.isTrigger = true;
     isOpen = true; // 标记门为打开状态  
 }

private void CloseDoor()
 {
     // 触发关门动画  
     anim.SetTrigger("Close");
     // 如果之前将门设置为触发器,现在关闭时应该将其改回非触发器状态  
     doorCollider.isTrigger = false;
     isOpen = false; // 标记门为关闭状态  
 }

// 检查玩家是否接近门(通过碰撞器检测)  
 private bool IsPlayerNearDoor()
 {
     // 假设玩家有一个名为PlayerTag的标签
     Collider[] colliders = Physics.OverlapBox(doorCollider.bounds.center, doorCollider.bounds.size * 0.5f); // 使用门的中心和大小来检测碰撞体  
     foreach (Collider col in colliders)
     {
         if (col.CompareTag("Player")) // 检查碰撞体是否有"Player"标签  
         {
             //InforTip.SetActive(isInfor = !isInfor);//对附近的门显示交互提示
             return true; // 如果找到带有"PlayerTag"标签的碰撞体,则返回true  
         }
     }
     return false; // 如果没有找到,则返回false  
 }

private void OnTriggerEnter(Collider other)
 {
     InforTip.SetActive(isInfor = !isInfor);
 }
 private void OnTriggerExit(Collider other)
 {
     InforTip.SetActive(isInfor = !isInfor);
 }

}

标签: unity 游戏引擎

本文转载自: https://blog.csdn.net/qq_35815891/article/details/138199901
版权归原作者 椰椰燕麦奶 所有, 如有侵权,请联系我们删除。

“【unity】玩家接近物体时显示交互提示(傻瓜版)”的评论:

还没有评论