c# - 使用按钮在 Unity 中启动粒子系统
问题描述
大家好,我用 Unity 的部分系统进行了一次火箭发射,但是当我按下推力引擎按钮(W 和向上箭头是我的按钮)时,我怎么能激活它?这是我的代码;
public class Rocket : MonoBehaviour
{
private Rigidbody2D rb;
public float amount;
public float MaxVelocity = 3;
public float RotationSpeed = 3;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
public void ThrustForward(float amount)
{
Vector2 force = transform.up * amount;
rb.AddForce(force);
}
// Update is called once per frame
void Update()
{
float Yaxis = Input.GetAxis("Vertical");
float Xaxis = Input.GetAxis("Horizontal");
ThrustForward(Yaxis);
Rotate(transform, Xaxis * RotationSpeed);
}
private void ClampVelocity()
{
float x = Mathf.Clamp(rb.velocity.x, -MaxVelocity, MaxVelocity);
float y = Mathf.Clamp(rb.velocity.y, -MaxVelocity, MaxVelocity);
rb.velocity = new Vector2(x, y);
}
private void Rotate(Transform t,float amount)
{
t.Rotate(0, 0, amount);
}
}
请帮助我如何用按钮统一启动粒子系统谢谢!
解决方案
如果你有一个粒子系统,你可以在你的代码中创建一个变量,如下所示:
public ParticleSystem particle;
您可以通过使用带有 .Play() 的变量来播放粒子系统,例如,如果您按照我的建议创建了一个像上面这样的变量,您可以随时播放粒子系统。
我们这样做的方式非常简单。
particle.Play();
直接解决方案
从您的脚本中删除所有内容并尝试使用以下代码覆盖它
public class Rocket : MonoBehaviour
{
private Rigidbody2D rb;
public ParticleSystem particle;
public float amount;
public float MaxVelocity = 3;
public float RotationSpeed = 3;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
public void ThrustForward(float amount)
{
Vector2 force = transform.up * amount;
rb.AddForce(force);
particle.Play();
}
// Update is called once per frame
void Update()
{
float Yaxis = Input.GetAxis("Vertical");
float Xaxis = Input.GetAxis("Horizontal");
ThrustForward(Yaxis);
Rotate(transform, Xaxis * RotationSpeed);
// You Can Do Exactly Same Thing For Arrow Key
// To Get Better Rusults Try Messing With The Particle System's Settings
}
private void ClampVelocity()
{
float x = Mathf.Clamp(rb.velocity.x, -MaxVelocity, MaxVelocity);
float y = Mathf.Clamp(rb.velocity.y, -MaxVelocity, MaxVelocity);
rb.velocity = new Vector2(x, y);
}
private void Rotate(Transform t,float amount)
{
t.Rotate(0, 0, amount);
}
}
推荐阅读
- perl - 从 STDIN 输入到数组
- java - Java - 比较 ArrayList 中对象的值
- neo4j - 返回在 Neo4j ogm 中创建的节点中的值 uuid
- html - 电报 API。通过 media_group_id 获取所有上传的照片
- coldfusion - 在外部使用 IS
- macos - 无法本地化从自制软件安装的 android-ndk
- angularjs - 无法从指令将 ng-model 值设置为 null
- c - 通过引用将 Unsigned Long Long 传递给 pthread_create
- javascript - 在 Jest 中使用“new”关键字模拟外部服务
- php - php对象编码中的json对象