我想要一个射击技师,但我无法在我的枪前生成子弹。
这个圆圈总是用 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);
}
}
要在 Unity 中在枪前生成子弹,您可以使用以下步骤:
为你的子弹创建一个新的游戏对象。
将 Rigidbody2D 组件添加到子弹 GameObject。
为您的子弹创建一个新脚本并将其附加到子弹游戏对象。
在项目符号的脚本中,添加以下代码:
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;
}
}
回到主脚本,将以下代码添加到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);
此代码将在枪管位置加上到枪管尖端的距离创建新的子弹游戏对象。这将确保子弹始终出现在枪的前面。
我希望这有帮助!