在游戏对象将相机的视野保持在团结之后,销毁了它



我目前正在制作一场统一的游戏,我只有在他们已经进入相机的视图之后才能在他们离开相机的视图之后才能销毁预制的克隆相机首先。但是,由于某种原因,我的代码一旦实例化就会立即销毁克隆。有人知道我如何解决这个问题吗?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InteractControl : MonoBehaviour
{
    Rigidbody2D rb;
    GameObject target;
    float moveSpeed;
    Vector3 directionToTarget;


    // Use this for initialization
    void Start()
    {
        target = GameObject.Find("White Ball");
        rb = GetComponent<Rigidbody2D>();
        moveSpeed = 3f;
    }
    // Update is called once per frame
    void Update()
    {
        MoveInteract();
        OnBecameVisible();
    }
    /*void OnTriggerEnter2D(Collider2D col)
    {
        switch (col.gameObject.tag)
        {
            case "ColouredBall Highress":
                BallSpawnerControl.spawnAllowed = false;
                Destroy(gameObject);
                target = null;
                break;
            case "Star":
                Collision collision = new Collision();
                break;
        }
    } */
    void MoveInteract()
    {
        if (target != null)
        {
            if(ScoreScript.scoreValue > 3)
            { 
            directionToTarget = (target.transform.position - transform.position).normalized;
            rb.velocity = new Vector2(directionToTarget.x * moveSpeed,
                                        directionToTarget.y * moveSpeed);
            }
            else
            {
                directionToTarget = new Vector3(0, -1, 0);
                rb.velocity = new Vector2(0, directionToTarget.y * moveSpeed);
            }
        }
        else
            rb.velocity = Vector3.zero;
    }
    void OnBecameInvisible()
    {
        if (gameObject.tag == "ColouredBall Highress")
        {
            Destroy(gameObject);
        }
        if (gameObject.tag == "Star")
        {
            Destroy(gameObject);
        }
    }
    void OnBecameVisible()
    {
        if (gameObject.tag == "ColouredBall Highress" || gameObject.tag == "Star")
        {
            OnBecameInvisible();
        }
    }
}

我试图通过首先要求对象变得可见来解决问题,以便当它们看不到相机时能够被销毁。简而言之,我正在寻找OnBecameInvisible的Onexit Collider版本。我想我可以使整个屏幕成为对撞机,并在上面的出口对撞机上使用。某人是否也知道我如何制作覆盖相机视图的对撞机?

这是因为您从OnBecameVisible调用OnBecameInvisible()。因此,当他们看到它们时,它们就会被摧毁。

您的代码也在做很多冗余的事情,您也从Update等称为OnBecameVisible

您可以简单地使用它:

Renderer m_Renderer;
void Start()
{
    m_Renderer = GetComponent<Renderer>();
}
void Update()
{
    //It means object is NOT visible in the scene if it is false is visible 
    if (!m_Renderer.isVisible)
    {
        Destroy(gameObject);
    }        
}

请注意:在这种情况下破坏/实例化对象并不是最佳实践。因为它会导致垃圾收集器工作很多,而且价格昂贵,并且可以减慢您的游戏。您可以使用对象池。它基本上将不在视野中的对象放入对象池中,您将其参考保留,以后可以使用它们。因此,它比您的方法的成本少。

您正在调用每个帧,因此基本上是对象摧毁了自己的第一帧。从更新中删除它应该可以解决这个问题,Unity已经为您打电话。

相关内容

  • 没有找到相关文章

最新更新