Help us understand the problem. What is going on with this article?

【Unity】ParticleとLineRendererで◯めはめ波を作ろう!

More than 5 years have passed since last update.

かーめーはーめー(ry

スクリーンショット 2015-02-09 17.42.28.png

Unityならこんなエフェクトも簡単に作れちゃいます。
今回はこの作り方を共有致します。

1.下準備

適当にプロジェクトを作成します。
packageはチェック必要ありません。
set up Default forは「3D」を選択。

スクリーンショット 2015-02-09 17.44.34.png

2.UnityちゃんをAsset Storeから投入

今回はキャラクターにUnityChanを使用します。
AssetStoreからDownLoadしてください。
unitychan.png

Importはそのまま全チェックでOKです。

スクリーンショット 2015-02-09 16.07.07.png

3.配置しよう

以下のものを配置します。
・Floor : 床。(pos=0,0,0 | scale=10,1,10)
・UnityChan : キャラクター。(pos=0,0.5,0 | scale=1,1,1)
・Directional Light : 光源。(配置してそのままでOK)
・空のGameObject : 発射オブジェクト。(pos=0,0,0 | scale=1,1,1)

床は
GameObject → 3D Object → Cube

UnityChanは
Assets → UnityChan → Prefabs → unitychanをD&D

Directional Lightは
GameObject → Light → Directional Light

空のGameObjectは
GameObject → Create Empty で名前をBeamにしてください。

で作成して配置します。

写真は少しMain Cameraの位置が動いていますが、
特に気にせず、床の上にUnitychanが立っていて、
光が当たって見えていればOKです。

tezt.png

4.Particleで発射光を作ろう

光線を発射した時に手元に大きな光が集まるのが"アレ"の特徴かと思います。
それをParticleで作ってみましょう。

3.で作った「Beam」を選択し、
Add Component → Effects → Particle System
を追加します。

スクリーンショット 2015-02-09 18.05.52.png

そして以下のようにパラメータを設定します。
(ここが面倒くさいですが、頑張って下さい)

スクリーンショット 2015-02-09 18.07.43.png

チェックの入っていない部分は何もしなくてOKです。
また、LoopingをOffにすると画面上で再生するときに、
Stop→Simurateを押下しないと確認出来ません。
なので、最後にLoopingを外すでもOKです。

スクリーンショット 2015-02-09 18.09.40.png

こんな感じで大きな光の弾がピカピカすればOKです。

5.ビームを作ろう

"アレ"はビームが出ます。
本来であれば、ビームは進んで行くものですが、
ここでは簡単にLine Rendererで実現してみます。

3.で作った「Beam」を選択し、
Add Component → Effects → Line Renderer
を追加します。

特にパラメータはいじらず、materialを作成します。

スクリーンショット 2015-02-09 18.13.03.png

名前 : BeamMat
Shader : Particle/Alpha Blended
Tint Color : 黄色っぽく適当に
Particle Texture : 以下のファイルを追加

Laser.png

出来上がりましたら、
Line RendererのMaterialをBeamMatにします。

スクリーンショット 2015-02-09 18.18.57.png

6.スクリプトでビーム発射機能を作ろう

いよいよ大詰めです。
Create → C# Scriptでスクリプトファイルを作成します。
名前はBeamShot.csとしました。
作成したら、以下のソースを貼り付けて下さい。

BeamShot.cs
using UnityEngine;
using System.Collections;

public class BeamShot : MonoBehaviour {

    float timer = 0.0f;
    float effectDisplayTime = 0.2f;
    float range = 100.0f;
    Ray shotRay;
    RaycastHit shotHit;  
    ParticleSystem beamParticle;
    LineRenderer lineRenderer;

    // Use this for initialization
    void Awake () {
        beamParticle = GetComponent<ParticleSystem> ();
        lineRenderer = GetComponent<LineRenderer> ();
    }

    // Update is called once per frame
    void Update () {
        timer += Time.deltaTime;

        if (Input.GetMouseButtonDown (0)) {
            shot ();
        }
        if (timer >= effectDisplayTime) {
            disableEffect ();
        }
    }

    private void shot(){
        timer = 0f;
        beamParticle.Stop ();
        beamParticle.Play ();
        lineRenderer.enabled = true;
        lineRenderer.SetPosition (0, transform.position);
        shotRay.origin = transform.position;
        shotRay.direction = transform.forward;

        int layerMask = 0;
        if(Physics.Raycast(shotRay , out shotHit , range , layerMask)){
            // hit 
        }
        lineRenderer.SetPosition(1 , shotRay.origin + shotRay.direction * range);


    }

    private void disableEffect(){
        beamParticle.Stop ();
        lineRenderer.enabled = false;
    }
}

完成したら、Beamオブジェクトにこのスクリプトを追加します。

スクリーンショット 2015-02-09 18.23.37.png

このようにBeamオブジェクトは
・Particle System
・Line Renderer
・BeamShotスクリプト
の三つを持つオブジェクトになります。

7.実行してみよう

早速実行してみましょう。
左クリックすると、ビームが発射されますでしょうか?

beam.png

お疲れ様でした。これで完成です。

雑談

このBeamオブジェクトはそれ単体で動作します。
どこに置いても大丈夫で、オブジェクトの正面ベクトルを取っているので、向いている方向に発射します。
例えばUnitychanオブジェクトの配下に置くと、UnityChanが色んな方向を向いてもその方向に向かって発射出来ます。

beam2.png

beam3.png

また、複製だって大丈夫です。

beam4.png

あと、RayCastという機能を使用していて、
そのlayerMaskの機能を使えば、敵に当てて攻撃する!なんてことも出来ます。

BeamShot.cs
        int layerMask = LayerMask.GetMask("Enemy");
        if(Physics.Raycast(shotRay , out shotHit , range , layerMask)){
            // enemyに当たった時だけここにくる 
        }

スクリーンショット 2015-02-09 18.36.46.png

このLayerがEnemyになっているものだけ判別出来ます。

今回作成したプロジェクト一式を公開しました。
github Unityプロジェクト一式

以上、ここまで読んでくださってありがとうございました。

kuuki_yomenaio
元々サーバサイドを得意としていますが、 クライアントもやります。 ゲーム開発のお仕事をしています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした