如何使我的爆炸召唤代码工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使我的爆炸召唤代码工作相关的知识,希望对你有一定的参考价值。

所以,我正在制作一个游戏,其中主要机制是火箭跳跃(射击你的脚上的火箭和爆炸推动你的力量(如TF2))并且我不能让爆炸只召唤一次并且它召唤在错误的地方:/

我已经尝试在if语句中添加等待,并偶然发现我目前正在使用的内容。这在理论上应该有效,但不是。

using UnityEngine;
using System.Collections;

public class Rocket : MonoBehaviour
{
    //Public changable things
    public float speed = 20.0f;
    public float life = 5.0f;
    public bool canRunProgress = true;
    public bool isGrounded;
    public GameObject Explosion;
    public Transform rocket;
    public Rigidbody rb;


    // If the object is alive for more than 5 seconds it dissapears.
    void Start()
    {
        Invoke("Kill", life);
    }
    // Update is called once per frame
    void Update()
    {
        //if the object isn't tounching the ground and is able to run it's process
        if (isGrounded == false && canRunProgress)
        {
            transform.position += transform.forward * speed * Time.deltaTime;
            canRunProgress = true;
        }
        //if the object IS touching the ground it then makes the above process unable to work and then begins the kill routine
        else if(isGrounded == true)
        {
            canRunProgress = false;
            StartCoroutine(Kill());
        }
        //detects if tounching ground
        void OnCollisionEnter(Collision other)
        {
            if (other.gameObject.tag == "Ground")
            {
                isGrounded = true;
            }
        }
        //detects if tounching ground
        void OnCollisionExit(Collision other)
        {
            if (other.gameObject.tag == "Ground")
            {
                isGrounded = false;
            }
        }
        //kill routine - explosion is summoned and explodes 2 seconds later it then destroys the rocket.
        IEnumerator Kill()
        {
            GameObject go = (GameObject)Instantiate(Explosion, transform); // also this needs to have the explosion be summoned in the middel of the rocket.
            yield return new WaitForSeconds(2f);
            Destroy(gameObject);
        }
    }
}

它应该(当火箭被发射器召唤到游戏中时)使火箭向前飞,然后当它击中地面时(标记为“地面”)停止移动并在其周围召唤爆炸并在2秒后被摧毁。目前它只是可怜地沿着地面反弹。

任何帮助,将不胜感激。 :3

答案

首先,您遇到语法错误:OnCollisionEnter,OnCollisionExit和Kill方法都在Update方法中...您应该先修复它。

然后,为了让你的代码工作,我假设你已经在火箭上放置了一个碰撞器,并在地面上放置了一个碰撞器。如果火箭弹跳,它可能是一个刚体的原因。实际上,Rigidbody使物体碰撞和反弹,因此不会抛出OnCollisionEnter。如果火箭或地面上有一个,请尝试将其移除。

以上是关于如何使我的爆炸召唤代码工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使我的代码诊断语法节点操作对关闭的文件起作用?

(discord.py) 如何使我的 setprefix 命令正常工作?

CMake Release 使我的代码停止正常工作

如果输入是元组,我怎样才能使我的代码工作?

如何使我的构造函数和函数工作,以便我的main()能够显示字符串和int数据?

我想从 C++ 非托管代码调用 C# 委托。无参数委托工作正常,但有参数委托使我的程序崩溃