如何移动3D射弹Unity

时间:2016-05-31 00:38:07

标签: c# unity3d game-physics projectile

我正在尝试了解在Unity中创建3D射弹的过程。在为数不多的有关制作常规类激光弹丸的在线文章中,关于这一过程的解释很少。有人可以帮助我理解如何逐步射击射击方法。

问题我想了解:

  • 如何将射弹移向射手GameObject所面对的方向。使用position.Translate()方法强制我选择一个特定的方向来移动对象。

1 个答案:

答案 0 :(得分:2)

  

如何将射弹向射击方向移动   GameObject正面临着

你使用相机的Transform.forward使射弹行进到玩家所面对的位置。

射击射弹的过程如下:

1 。实例化/创建项目符号

2 。设置子弹在玩家面前的位置

3 。获取附加到该实例化项目符号的Rigidbody

<强> 4 即可。 如果这只是带有角色控制器的相机而没有可见的枪

使用Camera.main.Transform.Position.forward + shootSpeed变量拍摄子弹。

如果您想要从拍摄可见的枪或物体,

创建另一个GameObject(ShootingTipPoint),它将用作子弹应该拍摄的位置并将其放置在你要拍摄的枪或物体的位置,然后你使用GameObject的ShootingTipPoint.Transform.Position.forward射击子弹而不是Camara.Main.Transform.Position.forward

这是一个有效的代码:

public GameObject bulletPrefab;
public float shootSpeed = 300;

Transform cameraTransform;

void Start()
{
    cameraTransform = Camera.main.transform;
}

void Update()
{

    if (Input.GetKeyDown(KeyCode.Space))
    {
        shootBullet();
    }
}
void shootBullet()
{
    GameObject tempObj;
    //Instantiate/Create Bullet

    tempObj = Instantiate(bulletPrefab) as GameObject;

    //Set position  of the bullet in front of the player
    tempObj.transform.position = transform.position + cameraTransform.forward;

    //Get the Rigidbody that is attached to that instantiated bullet
    Rigidbody projectile = GetComponent<Rigidbody>();

    //Shoot the Bullet 
    projectile.velocity = cameraTransform.forward * shootSpeed;
}