物体不动,如何使子弹动

时间:2019-10-12 06:50:18

标签: c# unity3d

我制造了一个将向玩家射击的敌人。我在泳池出现期间将其打开并尝试将其启动,但是由于某种原因它没有移动

我有两个用于子弹脚本的脚本和一个用于发射子弹的敌人的脚本

起初,我尝试在AddForce(transform.up * Speed);的帮助下采取快速行动 image

对于子弹

public class BulletScript : MonoBehaviour
{

    public GameObject bullet;

    void Start()
    {
        bullet.transform.Translate(bullet.transform.forward * Time.deltaTime);
    }

}

对于敌人

public class TurelScript : MonoBehaviour
{

    public Transform Player;
    public Transform Turell;
    public GameObject PrefabOfbullet;
    public Transform BUlletPosition;

    public float Rotation;

    void Start()
    {
        var turnOfBullet = Quaternion.Lerp(BUlletPosition.rotation, Quaternion.LookRotation(Vector3.forward, Player.position - BUlletPosition.position), Time.deltaTime * 40f);
        var rigidbodyBullet = GetComponent<Rigidbody2D>();


        StartCoroutine(BulletSpawn());
    }

    // Update is called once per frame
    void Update()
    {
        var turn = Quaternion.Lerp(Turell.rotation, Quaternion.LookRotation(Vector3.forward, Player.position - Turell.position), Time.deltaTime * 4f);
        var rigidbody = GetComponent<Rigidbody2D>();


        rigidbody.MoveRotation(turn.eulerAngles.z);
    }


    IEnumerator BulletSpawn()
    {
        while (true)
        {
            Instantiate(PrefabOfbullet, BUlletPosition.position, Turell.rotation);
            yield return new WaitForSeconds(0.3f);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

由于项目符号似乎是Rigidbody2D,因此您完全不应该使用Transform.Translate ,而只能通过Rigidbody2D组件和{{ 1}},因为它不破坏物理。 (请参见Rigidbody2D.MovePosition

然后对于子弹,您几乎永远不会使用AddForce,这将需要知道子弹的质量并相应地计算所需的力。

您的信使会立即更改其velocity,所以要做类似的事情

FixedUpdate