添加炸弹数量,当玩家碰撞时不起作用

Posted

技术标签:

【中文标题】添加炸弹数量,当玩家碰撞时不起作用【英文标题】:Add number of bombs, when a player collides not working 【发布时间】:2019-04-06 11:41:27 【问题描述】:

我在发布此内容之前尝试使用搜索栏,但没有发现任何东西能真正解决我的问题。

当玩家走过“物品”时,它会按预期消失,但是我也希望它在拾取该物品时也向当前编号为 0 的玩家添加一颗炸弹,但它似乎不是在职的?非常感谢任何帮助。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class shooter : MonoBehaviour

public GameObject powercell; //link to the powerCell prefab
public int no_cell = 1; //number of powerCell owned
public AudioClip throwSound; //throw sound
public float throwSpeed = 20;//throw speed
                             // Update is called once per frame
public void Update()

    //if left control (fire1) pressed, and we still have at least 1 cell
    if (Input.GetButtonDown("Fire1") && no_cell > 0)
    
        no_cell--; //reduce the cell
                   //play throw sound
        Audiosource.PlayClipAtPoint(throwSound, transform.position);
        //instantaite the power cel as game object
        GameObject cell = Instantiate(powercell, transform.position,
        transform.rotation) as GameObject;
        //ask physics engine to ignore collison between
        //power cell and our FPSControler
        Physics.IgnoreCollision(transform.root.GetComponent<Collider>(),
        cell.GetComponent<Collider>(), true);
        //give the powerCell a velocity so that it moves forward
        cell.GetComponent<Rigidbody>().velocity = transform.forward * throwSpeed;
    


//
void OnTriggerEnter(Collider other)

    if (other.gameObject.tag == "Item")
    
        no_cell = 1;
        Destroy(gameObject);
    


// Use this for initialization
void Start()




【问题讨论】:

这个更适合gamedev.stackexchange.com 你在哪一行代码中增加了炸弹的数量? @MiladQasemi 我认为'no_cell = 1;'碰撞时会将 int 增加 1 吗? 好吧 no_cell = 1 将该值设置为 1 但它不显示炸弹它只是更改变量的值 当然不是,你意识到 no_cell 值只属于这个实例,所以在改变它之后你正在破坏 shooter 所以这个值被它破坏了所以你会看不到它,当您制作预制件的新实例时,它与被删除的实例无关。 【参考方案1】:

首先将您的脚本更改为以下内容。 如果您仍然没有在控制台中看到 no_cell 增加,请给我们一些屏幕截图,来自您的编辑器,显示附加到游戏对象的脚本,以及您希望看到差异的位置。

public class shooter : MonoBehaviour 
    public GameObject powercell;    //link to the powerCell prefab
    public int no_cell ;            //number of powerCell owned
    public AudioClip throwSound;    //throw sound
    public float throwSpeed = 20;   //throw speed

    // Use this for initialization
    void Start()
        no_cell = 1;
    

    // Update is called once per frame
    public void Update()
    
        //if left control (fire1) pressed, and we still have at least 1 cell
        if (Input.GetButtonDown("Fire1") && no_cell > 0)
        
            no_cell--; //reduce the cell
                       //play throw sound
            AudioSource.PlayClipAtPoint(throwSound, transform.position);
            //instantaite the power cel as game object
            GameObject cell = Instantiate(powercell, transform.position,
            transform.rotation) as GameObject;
            //ask physics engine to ignore collison between
            //power cell and our FPSControler
            Physics.IgnoreCollision(transform.root.GetComponent<Collider>(),
            cell.GetComponent<Collider>(), true);
            //give the powerCell a velocity so that it moves forward
            cell.GetComponent<Rigidbody>().velocity = transform.forward * throwSpeed;
        
    


    void OnTriggerEnter(Collider other)
    
        if (other.gameObject.tag == "Item")
        
            no_cell++;              
            Debug.Log("Number of cells:"+no_cell.ToString());
            Destroy(other);
        
    



【讨论】:

嗨,由于某种原因,这段代码给了我额外的炸弹,但没有删除我碰撞的项目?游戏中的物品仍在游戏中,但是我现在可以收到物品并在发生碰撞时使用它? 原因可能是“Destroy(other);”这行应该是“Destroy(other.gameObject); @Skdy 谢谢!感谢 NikosGiannaras!如果可能的话,最后一件事,这段代码也改变了炸弹本身的投掷方式?它不再飞到空中,而是在地板上滚动? @Skdy,是的,它应该是 other.gameObject !亚当斯蒂尔。不,脚本中没有其他更改。唯一改变的是 no_cell++ 和 Start() 中的初始化【参考方案2】:

如果我做对了,每次你与“项目”发生碰撞时,你想添加 1 个额外的单元格吗? 那么你应该去 no_cell++ (或者保持原样,如果你的 max no_cell 应该是 1)。

另外,检查其他条件是否会降低您的 no_cell,这可能是您没有看到它增加的原因。

最后,一个建议是使用 Start() 进行初始化(例如 no_cell = 1),如果 no_cell 是指单元格的数量,则使用更接近自然语言的方便命名,例如 cellsNumber。

【讨论】:

是的,这是正确的,我尝试了我的方式,并且 ++ 仍然无法正常工作 在 Unity 的脚本部分中,当我在脚本本身中设置值时 no_cell 值不会改变,这可能是个问题

以上是关于添加炸弹数量,当玩家碰撞时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ios - 当 presentViewController 关闭时不起作用

UIButtons 在向右旋转时起作用,但在向左旋转时不起作用。嗯?

SpriteKit 碰撞检测不起作用

精灵面具碰撞不起作用(直接碰撞工作)

当玩家通过邀请连接时,实时消息不起作用

Symfony2 - 动态生成的表单在编辑表单时不起作用