【问题标题】:unity3d 4.3 bullets coming back downunity3d 4.3 子弹回来了
【发布时间】:2013-12-31 16:30:36
【问题描述】:

我正在尝试构建一个 2D 太空射击游戏,其中玩家将在屏幕底部保持不变并左右移动。当玩家发射子弹(射弹)时,子弹会向上弹起,但它又会回来。此外,如果两颗子弹相撞,它们也会对碰撞做出反应。

我有两个问题:

  1. 如何确保子弹不会反弹? (一种方法是几秒钟后将其销毁,但不确定这是否正确)

  2. 如何避免子弹之间的碰撞。

这是我的代码 sn-p:

void Update () {
if (Input.GetButtonDown("Fire1"))
 {

Rigidbody2D clone = (Rigidbody2D)Instantiate(bullet, transform.position + transform.up, transform.rotation);
clone.velocity = transform.TransformDirection(Vector3.up * 20);
 }
}

我对 Unity 非常陌生,并且通过查看 Unity 论坛以某种方式编写了此代码。非常感谢任何帮助。

谢谢

更多详情: 我已经创建了子弹并为此对象添加了 Rigidbody2D 和 BoxCollider2D。将子弹对象制作为预制件,然后将其拖到 Player 对象下。现在子弹是 Player 对象的子对象。将上面的脚本附加到 Player 对象。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    回答您的直接问题:

    1) 我不太确定你是如何设置场景或使用 Unity 2D 工具的,但通常如果你的子弹回来了,那么我会假设你仍然有重力应用到刚体 - 所以让确保您没有选中它。

    2) 使用 Unity3D 来让对象相互交互,它们需要附加刚体。这是至关重要的,比如说,如果你想让你的激光摧毁怪物 #1。但是,您只需要将一个刚体连接到对象即可获得所需的效果。我建议从您的激光中移除刚体,并将刚体连接到您希望受到激光火影响的物体(怪物 #1)上。 (这应该可行,如果没有其他选项 - 一个使用图层并忽略这些图层上的特定对象)。

    提示:

    这里有一些额外的东西。当您创建对象时,它们会随着时间的推移飞出屏幕,它们会逐渐堆积起来。想象一下,你在一场大型战斗中实例化了数百个激光器——这最终将成为性能问题。因此,请始终考虑在一定时间后销毁对象。

    另外,在查看您的代码后,我无法判断对象的速度是否基于其当前位置并且没有添加任何内容。我认为正在发生的事情是,当您实例化一个对象时,它可能会向上移动,但是因为没有增量器,所以对象(随着它变得更高)会减慢,直到它以下降的速度下降。比如这个

        clone.velocity = transform.TransformDirection(Vector3.up * 20);
    

    应该这样做:

        clone.velocity += transform.TransformDirection(Vector3.up * 20);
    

    这里http://docs.unity3d.com/Documentation/ScriptReference/Vector3-up.html,阅读速度。问题是你需要不断地应用一个恒定的向前运动,这样运动中的东西就会倾向于保持运动。如果不是重力会把它拉下来。

    另外,这是我过去使用的一些代码,它创建了一个非常酷的射击激光效果:

    public class Laser : MonoBehaviour {
        public int fireRate = 70;
    
        void Start(){
            InvokeRepeating("FireLaser", 0.01f, 0.009f);
            Destroy( gameObject, 2.0f );
        }
    
        void FireLaser(){
            transform.Translate( Vector3.up * fireRate * Time.deltaTime );  
        }
    }
    

    编辑:现在是凌晨 3 点,我讨厌校对。

    【讨论】:

    • 感谢 Boomer 的详细解释以及凌晨 3:00 的解释 :) 我今天会试试这个,看看它是否工作正常。
    • 没问题!这就是我们来这里的目的:)
    • 我在您的帮助下解决了这个问题。谢谢。
    猜你喜欢
    • 2015-08-31
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多