如何在 Unity 上进行射击机制?

问题描述 投票:0回答:1

我想要一个射击技师,但我无法在我的枪前生成子弹。

Unity

这个圆圈总是用 Z 轴旋转来寻找我的光标,所以我无法用 x 轴或 y 轴生成子弹,我需要以 Z 轴旋转为基础,但我不知道该怎么做。 任何人都可以帮忙吗?谢谢。

我尝试将实例化的位置更改为“dir”,但这次通常子弹会在我的光标位置上生成。我不知道为什么,子弹产生后,它们的 z 位置变成了 -20。

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

public class main : MonoBehaviour
{
    [SerializeField] GameObject gun,bullet;


    private Vector3 mousePos, dir;
    float rotateZ;

    private void Update()
    {
        mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z));
        dir = mousePos - gun.transform.position;
        rotateZ = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
        gun.transform.rotation = Quaternion.Euler(0,0,rotateZ);
        if (Input.GetMouseButtonDown(0))
        {
            shoot();
        }
        
    }
    void shoot()
    {
        Instantiate(bullet,gun.transform.position,Quaternion.identity);
    }
}
c# unity-game-engine 2d game-development
1个回答
0
投票

要在 Unity 中在枪前生成子弹,您可以使用以下步骤:

  1. 为你的子弹创建一个新的游戏对象。

  2. 将 Rigidbody2D 组件添加到子弹 GameObject。

  3. 为您的子弹创建一个新脚本并将其附加到子弹游戏对象。

  4. 在项目符号的脚本中,添加以下代码:

    using UnityEngine;
    public class Bullet : MonoBehaviour
    {
        public float speed = 10f;
    
        void Start()
        {
            // Get the direction of the bullet.
            Vector2 direction = gun.transform.position - transform.position;
    
            // Normalize the direction.
            direction.Normalize();
    
            // Set the bullet's velocity.
            GetComponent<Rigidbody2D>().velocity = direction * speed;
        }
    }
    
  5. 回到主脚本,将以下代码添加到shoot() 方法:

    void shoot()
    {
        // Create a new bullet GameObject.
        GameObject newBullet = Instantiate(bullet, gun.transform.position, gun.transform.rotation);
    
        // Add force to the bullet in the direction of the gun barrel.
        newBullet.GetComponent<Rigidbody2D>().AddForce(gun.transform.forward * 100f);
    }
    

此代码将在枪管位置创建一个新的子弹游戏对象,并旋转它以匹配枪管的旋转。然后它会向枪管方向的子弹施加力。

为了确保子弹始终出现在枪的前面,您可以使用以下代码:

Vector3 spawnPosition = gun.transform.position + gun.transform.forward;
GameObject newBullet = Instantiate(bullet, spawnPosition, gun.transform.rotation);

此代码将在枪管位置加上到枪管尖端的距离创建新的子弹游戏对象。这将确保子弹始终出现在枪的前面。

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.