Проверьте, находится ли объект вне экрана - PullRequest
0 голосов
/ 03 февраля 2019

Мне нужно знать, когда объект перестал видеть камеру, чтобы вернуть его в бассейн.Я попробовал пару вещей, но безуспешно, хочу заметить, что камера следит за игроком только по оси X, это 3D, но это игра с боковым скроллом.Кстати, я не использую MonoBehaviour, поэтому избегайте предлагать OnBecameInvisible и родственников.

Здесь мои две неудачные попытки.

internal static bool IsVisible(this Renderer renderer)
{
    Plane[] planes = GeometryUtility.CalculateFrustumPlanes(Camera.main);
    return GeometryUtility.TestPlanesAABB(planes, renderer.bounds);
}

internal static void IsVisible(this GameObject go)
{
    var screenPoint = Camera.main.WorldToScreenPoint(go.transform.position);
    screenPoint.x = Mathf.Clamp01(screenPoint.x);

    if (screenPoint.x > .05f)
    {
        Debug.Log("Visible");
    }
    else Debug.Log("Invisible");
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Если вам нужно знать, когда объект перемещается внутрь и за пределы экрана, простейшим решением будет MonoBehaviour.OnBecameVisible () в паре с .OnBecameInvisible ()

Редактировать: хорошо, я только что прочитал, что вы неиспользуя MonoBehaviours - можно спросить почему?Monohevaiours стоит только для методов, которые вы на самом деле реализуете, не так много накладных расходов от простого наследования от MonoBehaviour

0 голосов
/ 03 февраля 2019

Простой:

if(!GetComponent<Renderer>().isVisible){
//Whatever you want to do here
}

Если у вас возникли проблемы, см .:

https://docs.unity3d.com/ScriptReference/Renderer-isVisible.html

https://forum.unity.com/threads/how-do-i-use-renderer-isvisible.377388/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...