如何解决实例化一个预制件,然后给它添加一个力Projectile - Unity
我正在尝试向 Unity 中实例化射弹的 Rigidbody
组件添加一个力。我想使用这种方法,因为它是一个简单的投掷机制,我只希望射弹以小的抛物线轨迹移动。弹丸预制件已在 Unity 编辑器中附加到此脚本,并且它确实具有 Rigidbody 组件。
这是我目前的代码:
private void ProjectileShoot()
{
if (Input.GetKeyDown(KeyCode.LeftShift) && !gameOver)
{
Rigidbody projectileRb = projectilePrefab.GetComponent<Rigidbody>();
Instantiate(projectilePrefab,transform.position,projectilePrefab.transform.rotation);
projectileRb.AddForce(throwForce * Vector3.forward,ForceMode.Impulse);
}
}
射弹预制件按预期在玩家位置生成,但它会立即掉到地上。不管我申请了多少throwForce
。
ProjectileShoot()
在 Update()
。
我是 C# 和 Unity 的业余爱好者,这是我的第一个项目,因此感谢任何帮助。谢谢。
解决方法
private void ProjectileShoot()
{
if (Input.GetKeyDown(KeyCode.LeftShift) && !gameOver)
{
GameObject projectileGO = (GameObject) Instantiate(projectilePrefab,transform.position,projectilePrefab.transform.rotation);
Rigidbody projectileRb = projectileGO.GetComponent<Rigidbody>();
projectileRb.AddForce(throwForce * Vector3.forward,ForceMode.Impulse);
}
}
您之前所做的是尝试从预制件中获取刚体,但是这是不可能的。相反,通过在实例化时将其设置为变量来从实例中获取 Rigidbody。
,Rigidbody projectileRb = projectilePrefab.GetComponent<Rigidbody>();
引用预制件的刚体。
Instantiate(projectilePrefab,projectilePrefab.transform.rotation);
使用预制件实例化一个新实体。
projectileRb.AddForce(throwForce * Vector3.forward,ForceMode.Impulse);
力施加到引用的刚体上。
您正在创建一个新实体,但未访问其刚体,而是使用了预制件的刚体。为了解决这个问题,在实例化新实体(即预制件的游戏对象)时,保留对它的引用并使用它的刚体来施加力。
GameObject projectile = (GameObject) Instantiate(projectilePrefab,projectilePrefab.transform.rotation);
Rigidbody rb = projectile.GetComponent<Rigidbody>();
projectileRb.AddForce(throwForce * Vector3.forward,ForceMode.Impulse);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。