添加炸弹数量,当玩家碰撞时不起作用
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 关闭时不起作用