unityC#プログラミングでパーティクルを使ってキーボードの前後左右キーでオブジェクトの各方面からロケット噴射したいのですが→キーを押し続けたまま↓キーを押し続け、→キーを離しても→キーのパーティクルが出続けるんですがこれを離したときにすぐ消えるにはどうすれば良いですか。public Particle system up;public Particle system down;public Particle system right;public Particle system left;Rigidbody rb;void start(){rb=GetComporment\u0026lt;Ridbody\u0026gt;();up.max Particles=0;Up.max Particles=0;right.max Particles=0;left.max Particles=0;}void Update(){//右キーif(Input.Getkey(KeyCode.RightArrow)){rb.AddForce(10,0,0);right.max Particles=1000;}//左キーelse if(Input.Getkey(KeyCode.LeftArrow)){rb.AddForce(10,0,0);left.max Particles=1000;}//上キーelse if(Input.Getkey(KeyCode.UpArrow)){rb.AddForce(10,0,0);up.max Particles=1000;}//下キーelse if(Input.Getkey(KeyCode.DownArrow)){rb.AddForce(10,0,0);down.max Particles=1000;//押してないときelse{up.max Particles=0;Up.max Particles=0;right.max Particles=0;left.max Particles=0;}}

1件の回答

回答を書く

1131807

2026-04-11 21:05

+ フォロー

using System.Collections.Generic;

using UnityEngine;



public class ParticleEmitter : MonoBehaviour

{

public ParticleSystem _up;

public ParticleSystem _down;

public ParticleSystem _right;

public ParticleSystem _left;

public float _force = 10f;

Rigidbody _rb;

List\u0026lt;Vector3\u0026gt; _dirs = new List\u0026lt;Vector3\u0026gt;();



void Start()

{

_rb = GetComponent\u0026lt;Rigidbody\u0026gt;();

_up.maxParticles = 1000;

_up.Stop();

_down.maxParticles = 1000;

_down.Stop();

_right.maxParticles = 1000;

_right.Stop();

_left.maxParticles = 1000;

_left.Stop();

}



void Update()

{

if (Input.GetKeyDown(KeyCode.RightArrow))

{

_left.Play();

_dirs.Add(Vector3.right);

}



if (Input.GetKeyUp(KeyCode.RightArrow))

{

_left.Stop();

_dirs.Remove(Vector3.right);

}



if (Input.GetKeyDown(KeyCode.LeftArrow))

{

_right.Play();

_dirs.Add(Vector3.left);

}



if (Input.GetKeyUp(KeyCode.LeftArrow))

{

_right.Stop();

_dirs.Remove(Vector3.left);

}



if (Input.GetKeyDown(KeyCode.UpArrow))

{

_down.Play();

_dirs.Add(Vector3.up);

}



if (Input.GetKeyUp(KeyCode.UpArrow))

{

_down.Stop();

_dirs.Remove(Vector3.up);

}



if (Input.GetKeyDown(KeyCode.DownArrow))

{

_up.Play();

_dirs.Add(Vector3.down);

}



if (Input.GetKeyUp(KeyCode.DownArrow))

{

_up.Stop();

_dirs.Remove(Vector3.down);

}

}



void FixedUpdate()

{

foreach (var dir in _dirs)

{

_rb.AddForce(dir * _force, ForceMode.Acceleration);

}

}

}

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有