如何移动 3D 弹丸 Unity

Posted

技术标签:

【中文标题】如何移动 3D 弹丸 Unity【英文标题】:How to move a 3D projectile Unity 【发布时间】:2016-09-28 20:20:25 【问题描述】:

我正在尝试了解在 Unity 中创建 3D 弹丸的过程。在关于创建常规的类似激光的射弹的少数在线帖子中,关于该过程的解释很少。有人可以帮助我理解如何逐步射击弹丸的方法。

我试图理解的问题:

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

【问题讨论】:

嗨,Ryan,请不要忘记勾选答案。 【参考方案1】:

如何将弹丸向射手的方向移动 游戏对象面向

您使用相机的Transform.forward 使弹丸朝着玩家所面对的位置移动。

射弹的过程如下:

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

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

3.获取附加到该实例化子弹的Rigidbody

4如果这只是带有角色控制器且没有可见枪的相机

使用Camera.main.Transform.Position.forward + shootSpeed 变量射击子弹。

如果你想从中射击可见的枪或物体

创建另一个 GameObject(ShootingTipPoint) 将用作子弹应该射击的位置并将其放置在您想要射击的位置 Gun 或 Object 中,然后使用该 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;

【讨论】:

@JoeBlow 是的,乔。谢谢。 为什么不立即实例化刚体?您可以使用刚体作为预制件来创建射弹。将其作为参数传递给您的脚本。

以上是关于如何移动 3D 弹丸 Unity的主要内容,如果未能解决你的问题,请参考以下文章

Unity 3D - Sphere Collider 下的“Is Trigger”不允许我的火球/弹丸飞行

弹丸不移动,也不从玩家开始(Unity 2D / C#)

unity3d中如何让物体从一个点自动移动到另一个点呢,

带有 Unity 3D 的 C#:当用户移动鼠标时,如何使相机围绕对象移动

如何在unity3D中平滑移动相机?

如何使用 Unity3D 检测移动设备上的抖动运动? C#