【问题标题】:Projectile in Unity 2DUnity 2D 中的弹丸
【发布时间】:2014-12-12 22:11:54
【问题描述】:

我正在尝试学习 Unity(所以请原谅我的新手)。我已经将我的项目设置为 2d,让一个精灵四处移动,我正在尝试发射弹丸(我很感激有很多这样的问题,但在尝试了很多之后我就是无法让它工作解决方案)。在物理方面,我是个十足的笨蛋!

这是我非常简单的脚本:

using UnityEngine;
using System.Collections;

public class PlayerScript : MonoBehaviour {
    public Transform mObject;
    public Transform mProjectile;
    public Vector2 mProjectileSpeed = new Vector2 (10f, 10f);
    public Vector2 mSpeed = new Vector2(15, 15);
    private Vector2 mMovement;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        float inputX = Input.GetAxis("X");
        float inputY = Input.GetAxis("Y");

        mMovement = new Vector2 (mSpeed.x * inputX, mSpeed.y * inputY);

        if (Input.GetButton ("Fire1"))
            Shoot ();
    }

    void Shoot(){
        GameObject clone = (GameObject)Instantiate (mProjectile, rigidbody2D.transform.position, Quaternion.identity);
        clone.rigidbody2D.velocity = (clone.transform.forward * 1000);
    }

    void FixedUpdate(){
        rigidbody2D.velocity = mMovement;
    }
}

这就是它正在做的事情:

没有向实例化对象添加任何力,它会从我的精灵的两侧射出,我根本不明白。

我确实在 Unity 回答网站上找到了一个解决方案,告诉 IgnoreCollider,以防两个盒子对撞机的结果相互冲突,但这并没有什么不同。

我确定我在做一些完全愚蠢的事情,但我该怎么做呢?

非常感谢!

【问题讨论】:

  • 您将direction 传递给您的Shoot 方法,但随后您不使用它。这是故意的吗?
  • 是的,对不起。那是以前不起作用的解决方案的残余。
  • 你试过在精灵前面实例化射弹吗?可以通过使用偏移量设置实例化位置来完成:rigidbody2D.transform.position + clone.transform.forward * 10.0f。看起来精灵和射弹正在碰撞。
  • 感谢您的帮助,但不幸的是它没有什么不同:(
  • 要定位问题,禁用场景中的所有碰撞器,尤其是玩家和射弹预制件的碰撞器。然后,以不同的组合启用它们。只有这样我们才能为您提供帮助。

标签: c# unity3d unity3d-2dtools


【解决方案1】:

尝试使用 Addforce() 方法, 像这样:

gameObj.rigidbody2D.AddForce(Vector3.up * 10 * Time.deltaTime); 

gameObj.rigidbody2D.AddForce(transform.forward * 100); 

gameObj.rigidbody2D.AddForce(Vector3.up * 1000);

查看哪些组合和哪些值符合您的要求并相应地使用。希望对你有帮助

【讨论】:

    【解决方案2】:

    正如@maZZZu 所说,在你的角色之前实例化你的射弹精灵,这样你的角色和射弹就不会发生碰撞。

    其次,clone.rigidbody2D.velocity = (clone.transform.forward * 1000); 部分代码将只允许弹丸向前移动(x 轴在 2D 中为 x 轴,在 3D 中为 z 轴)。尝试改用 mMovement(如果您也希望它向其他方向移动)。例如clone.rigidbody2D.velocity = (mMovement * 1000);

    【讨论】:

    • 请不要在帖子中使用签名或标语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多