当玩家不看时,敌人跟随玩家。 OnBecameInvisible 不工作

时间:2021-04-11 16:30:40

标签: c# unity3d

所以我想在我的游戏中为我的敌人创造一个哭泣的天使效果。所以当玩家可以看到敌人时,他们不会移动,当玩家看不到他们时,他们会靠近玩家。这是我附在敌人身上的代码,它不起作用。非常感谢您的帮助!

using System.Collections.Generic;
using UnityEngine;
public class WeepingAngel : MonoBehaviour
{ 
     public GameObject Player;
// Start is called before the first frame update
void Start()
{
    Player = GameObject.FindGameObjectWithTag("Player");
}
 void OnBecameInvisible()
{
    if (Player)
    {
        transform.position = Player.transform.position - Player.transform.forward;
        Vector3 lookPos = Player.transform.position - transform.position;
        lookPos.y = 0;
        transform.rotation = Quaternion.LookRotation(lookPos);
    }    
}
}

1 个答案:

答案 0 :(得分:0)

我假设在您认为应该调用的情况下不会调用 OnBecameInvisible。之所以会发生这种情况,是因为它会对任何相机做出反应。这甚至包括场景视图。

替代解决方案

您可以使用此 wiki 文章中提供的方法代替 OnBecameInvisiblehttp://wiki.unity3d.com/index.php?title=IsVisibleFrom

您的代码的修改版本

using UnityEngine;

public class WeepingAngel : MonoBehaviour
{
    public GameObject player;
    private new Camera camera;
    private new Renderer renderer;

    private void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player");
        camera = Camera.main;
        renderer = GetComponent<Renderer>();
    }

    private void Update()
    {
        bool isVisible = GeometryUtility.TestPlanesAABB(
            GeometryUtility.CalculateFrustumPlanes(camera),
            renderer.bounds);

        if (!isVisible)
            TryMovingTowardsPlayer();
    }

    private void TryMovingTowardsPlayer()
    {
        if (player == null)
            return;

        transform.position = player.transform.position - player.transform.forward;
        Vector3 lookPos = player.transform.position - transform.position;
        lookPos.y = 0;
        transform.rotation = Quaternion.LookRotation(lookPos);
    }
}