c# - 玩家在移动时不要发射弹丸
问题描述
当我射击并且玩家静止不动时,弹丸工作正常,但当我移动或向前跳跃时,弹丸不起作用。
我认为这是因为我的项目符号代码而发生的。我是 Unity 的初学者,所以我认为代码有问题。
void Update()
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
private void OnTriggerEnter2D(Collider2D other)
{
Destroy(gameObject);
}
解决方案
我很确定我知道您为什么会遇到此问题,但我会花一些时间向您展示将来如何调试此问题。
所以你说“射弹不起作用”这并没有任何意义,但我认为它的意思是“它们不会产生”。
这可能是由于两个原因:
- 有些东西阻止它们产卵
- 他们立即被删除
在我们的例子中,它可能是 2 号。当你向前移动时,玩家会立即与自己的射弹相撞,这会使其消失。
为确保是这种情况,您可以通过编辑碰撞代码来检查导致删除的对象:
private void OnTriggerEnter2D(Collider2D other)
{
Debug.Log(other.name);
Destroy(gameObject);
}
它可能是玩家,所以你不希望玩家与自己的子弹相撞。您可以通过 2 种方式解决此问题:
- 检查碰撞时,将 Destroy 放入条件语句中,例如:
if (other.tag != "Player")
- 将图层添加到子弹并防止该图层与玩家的图层发生碰撞。
Physics.IgnoreCollision(MyCollider, PlayerCollider);
在 Start() 方法中使用(或 Physics2D,如果是 2D)排除子弹和玩家之间的碰撞
为了简单起见/解决您的问题,让我们选择数字 1;将您的碰撞代码编辑为有条件的:
private void OnTriggerEnter2D(Collider2D other)
{
if (other.tag != "Player")
{
Destroy(gameObject);
}
}
然后转到播放器对象并创建一个名为“播放器”的新层,并将其分配给播放器对象。
推荐阅读
- java - 使用嵌入式 jre 运行 java 应用程序时在哪里保留 exception.sites?
- android - Flutter:等待另一个颤振突击队释放启动锁
- javascript - CanvasJS 文档在 x 轴上显示奇怪的数据点
- javascript - Leaflet.timeSlider 的 startSlider() 函数不起作用并给出错误
- docker - 如何为所有 docker 服务使用一个 .env
- scala - try catch 块没有捕获到异常
- c++ - 如何使用 Visual Studio 在 Mac 上安装 OpenCV
- javascript - 有没有办法删除单个文件,同时有多个未上传但使用文件阅读器预览的输入文件?
- javascript - 如何循环使用相同的变量但不同的值
- android - Python 多线程服务器和与 Android 客户端的异步 websocket 通信