如何移动 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”不允许我的火球/弹丸飞行