所以我想在我的游戏中为我的敌人创造一个哭泣的天使效果。所以当玩家可以看到敌人时,他们不会移动,当玩家看不到他们时,他们会靠近玩家。这是我附在敌人身上的代码,它不起作用。非常感谢您的帮助!
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);
}
}
}
答案 0 :(得分:0)
我假设在您认为应该调用的情况下不会调用 OnBecameInvisible
。之所以会发生这种情况,是因为它会对任何相机做出反应。这甚至包括场景视图。
您可以使用此 wiki 文章中提供的方法代替 OnBecameInvisible
:
http://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);
}
}