程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了坦克被统一摧毁后如何重生? (有几秒钟的延迟)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决坦克被统一摧毁后如何重生? (有几秒钟的延迟)?

开发过程中遇到坦克被统一摧毁后如何重生? (有几秒钟的延迟)的问题如何解决?下面主要结合日常开发的经验,给出你关于坦克被统一摧毁后如何重生? (有几秒钟的延迟)的解决方法建议,希望对你解决坦克被统一摧毁后如何重生? (有几秒钟的延迟)有所启发或帮助;

我目前实现的功能是两辆坦克可以相互射击和摧毁,被摧毁后无法重生。我试图在摧毁它后再次实例化坦克,但是当我这样做时,实例化对象失去了它的所有属性。(它不再变得可控或被摧毁) 我的目标是当子弹击中对手的坦克时,它会摧毁对手。对手会在4秒延迟后立即消失并在默认位置(或任何位置)复活。

这是我的代码:

公开课子弹:MonoBehavIoUr {

GameObject tank1;
GameObject tank2;
public int bullet;


// Start is called before the first frame update
voID Awake()
{
    tank1 = GameObject.Find("Tank1");
    tank2 = GameObject.Find("Tank2");

}


voID OnTriggerEnter2D(CollIDer2D other)
{   
    //If the bullet from tank 1 hits the object
    if (bullet == 1)
    {
        if (other.tag == "Wall")
        {
            Destroy(this.gameObject);
        }

        if (other.tag == "Tank2")
        {
            Destroy(this.gameObject);
            Destroy(other.gameObject);
            //tank2 = Instantiate(tank2,transform.position,transform.rotation);

        }
    }
    
   //If the bullet from tank 2 hits the object
    else if (bullet == 2)
    {
        if (other.tag == "Wall")
        {
            Destroy(this.gameObject);
        }

        if (other.tag == "Tank1")
        {
            Destroy(this.gameObject);
            Destroy(other.gameObject);
            //tank1 = Instantiate(tank1,transform.rotation);
        }
    }
}

private voID Respawn()
{

}

}

解决方法

不要破坏坦克。把它关掉。重新打开它以重生。

// Turn it off
gameObject.SetActive(false);

实例化成本高昂,可能会导致帧率问题。

,

扩展 Hanger 的回应。您可以像这样使用 tank 变量将其关闭:

tank1.SetActive(false);

编辑以包含标题的第二部分,即延迟。此外,您需要在 respawn 方法中将 new Vector3 设置为您想要重新生成对象的任何位置。

GameObject tank1;
GameObject tank2;
public int bullet;


// Start is called before the first frame update
void Awake()
{
    tank1 = GameObject.Find("Tank1");
    tank2 = GameObject.Find("Tank2");

}
    // Toggles active status of GameObject passed to it
void ToggleActiveInScene(GameObject gameObject)
{
    gameObject.SetActive(!gameObject.activeSelf);
}

// If GameObject is disabled,enables and moves it
void Respawn(GameObject gameObject)
{
    if(gameObject.activeSelf == false)
    {
        ToggleActiveInScene(gameObject);
        gameObject.transform.position = new Vector3(7,-2.5f,-0.1f);
    }
}

// A coroutine to delay ToggleActiveInScene
float secondsToWait = 2;
IEnumerator delayedToggleActiveInScene(GameObject gameObject)
{
    yield return new WaitForSeconds(secondsToWait);
    ToggleActiveInScene(gameObject);
}

// // A coroutine to delay Respawn
IEnumerator delayedRespawn(GameObject gameObject)
{
    yield return new WaitForSeconds(secondsToWait);
    Respawn(gameObject);
}

void OnTriggerEnter2D(Collider2D other)
{
    //If the bullet from tank 1 hits the object
    if (bullet == 1)
    {
        if (other.tag == "Wall")
        {
            Destroy(this.gameObject);
        }

        if (other.tag == "Tank2")
        {
            Destroy(this.gameObject);

            // StartCoroutine will start the coroutines like this
            StartCoroutine(delayedToggleActiveInScene(other.gameObject));
            StartCoroutine(delayedRespawn(other.gameObject));
        }
    }

    //If the bullet from tank 2 hits the object
    else if (bullet == 2)
    {
        if (other.tag == "Wall")
        {
            Destroy(this.gameObject);
        }

        if (other.tag == "Tank1")
        {
            Destroy(this.gameObject);
            StartCoroutine(delayedToggleActiveInScene(other.gameObject));
            StartCoroutine(delayedRespawn(other.gameObject));
        }
    }
}

大佬总结

以上是大佬教程为你收集整理的坦克被统一摧毁后如何重生? (有几秒钟的延迟)全部内容,希望文章能够帮你解决坦克被统一摧毁后如何重生? (有几秒钟的延迟)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: