アイテム消える時にエフェクトつけてみた

シェアする

  • このエントリーをはてなブックマークに追加

前回、オリジナルファンファーレ作ってみたでだいぶゲームっぽくなってきました。
ここから更にいろいろと演出を加えて行きます……!

まずはサーモンを取った時の挙動から。
現在だとほんと、処理って感じにパッと消えるだけなので面白くない……
なので、消える時にちょこっと残像っぽいものを残したいと思います!

Unityで3Dゲームを作るまでのいろいろな処理を解説する連載。今回は、3Dキャラが障害物に当たるとエフェクト(Particle)が発生する処理や、花火、煙、彗星(すいせい)、もやなどのさまざまなエフェクトを付ける方法を解説する【Windows 10、Unity 5.4に対応、C#のスクリプトを追加】。

こちらのサイトさんを参考に、パーティクルを設定。

Unity搭載のパーティクルシステム(Particle)は、出来ることが多彩過ぎて、なんだか複雑だなぁ…と思われがち。そこで、誰でも手っ取り早くマスターするためのコツをご紹介します!

そして、こちらのサイトさんを参考に、パーティクルが出る時間などを調整。

紫色の光がぷわっと出るようにしました。
後はitemのコードにパーティクルを割り当て……なんだけど、なんかいろいろやってもパーティクルが出ない!! 何故ーー??!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Item : MonoBehaviour {
public AudioClip explosionSE;
public ParticleSystem particle;

void Start () {
particle = this.GetComponent (); //パーティクルを取得
particle.Stop (); //最初は止めておく
}

void OnTriggerEnter(Collider hit){ //ぶつかったとき
if (hit.CompareTag("Player")) { //ぶつかったIDがPlayerだったら
 particle.Play(); //パーティクル再生
AudioSource.PlayClipAtPoint (explosionSE, transform.position); //アイテムゲット音鳴らす
Destroy (this.gameObject,2.0f); //アイテムを消す
}
}
void Update () {
transform.Rotate (new Vector3 (2, 0, 0)); //サーモン回転
}
}

こんな感じのコードを書いたのですが、上手くいかず……。
particle.Play(); を入れると、当たり判定が無くなってしまうようです。
とりあえず4時間いろいろ試してみたけれど、全然できないので保留!!

あ、コードを表示するプラグインはこちらのサイトさんを参考にして、SyntaxHighlighter Evolvedを導入しました。

導入するだけで見た目超きれい。

これはコードの勉強をしっかりしなくてはいけないな……とサイトを巡っていたら、こちらを発見。

●Unityで製作したゲーム一覧へ ★ページ下へ★  当サイトは、Unityという無料ソフトでゲーム開発を行う人の為の、初心者向けの解説サイトです。  ゲームを作りたい! でもプログラムを勉強しているけど何だかゲームを作っている気がしないよ!  そんな方は是非Un…

おぉぉ、わかりやすい……!
今までずっと意味が分からず使っていたのが、やっとどんな意味を持つのか分かるようになりました。

それを踏まえて、もう一度いろんなサイトをさまよい、コードを書き直し。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Item : MonoBehaviour {
	public AudioClip explosionSE;
	public ParticleSystem particle;

	void Start () {
		particle = this.GetComponent<ParticleSystem> (); //パーティクル取得
		particle.Stop ();
	}

	void OnTriggerEnter(Collider hit){
		particle.Play (); //パーティクルの再生を、ifの外に出した

		if (hit.CompareTag("Player")) {
			AudioSource.PlayClipAtPoint (explosionSE, transform.position);
			Destroy (this.gameObject,0.4f); //0.4秒後にアイテムを削除
			}
	}

	void Update () {
		transform.Rotate (new Vector3 (2, 0, 0));
	}
}

destroyしたときにパーティクルも一緒に消えてしまうことに気づき、ちょこっとタイムラグを設定。

そして、パーティクルをヒエラルキーから作っていたのですが、アイテムのインスペクターからAdd Compornentして作らなきゃいけなかったんだね! なるほど!

パーティクルがピンク色になってしまう現象も、設定の「Renderer」-「Material」から[Default-Particle]を選ぶことで解消。
あ、これもしかしてパーティクルの形自由に設定できるんじゃない?
ほんといろいろできるなぁ、Unity。

そして、なんかただ待ってる時間もアレなので、ぶつかったらサーモンが上に飛んでくようにしてみました。
コードはこんな感じ。


&nbsp;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Item : MonoBehaviour {
	public AudioClip explosionSE;
	public ParticleSystem particle;
	public bool press = false; //pressという変数を作って、最初はfalseに。

	void Start () {
		particle = this.GetComponent<ParticleSystem> ();
		particle.Stop ();
	}

	void OnTriggerEnter(Collider hit){
		particle.Play ();

		if (hit.CompareTag("Player")) {
			press = true; //ぶつかったらpressをtrueに。
			AudioSource.PlayClipAtPoint (explosionSE, transform.position);

			Destroy (this.gameObject,0.4f);
			}
	}

	void Update () {
		transform.Rotate (new Vector3 (2, 0, 0));
		if (press) {
			transform.position += new Vector3 (0.0f, 0.1f, 0.0f); //もしpressがtrueだったら、サーモンを毎フレーム0.1上に上げる
		}
	}
}

なんか、めちゃめちゃいい感じじゃない??!

なんだかんだで、パーティクルを設定するだけで5時間半……約一週間かかりました。パーティクル、むっっっずいよ!! いろいろできそうだし、キレイだけど!!

しかし、今回のでだいぶコードの意味を理解することができました。そうか、括弧の中の奴は下のコードに中身を渡す変数だったのか。
プログラムは簡単なVBAしか組んだことがないので、いろいろと勉強が必要だなぁ。

だいぶいい感じになってきたので、ゲーム画面はコレで完了にしたいと思います。
次は、操作方法を変更してみたりします!!

タップでキャラクターが動くようにしてみた に続く

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。