うにty生活

UnityChanを生活させたい

【Unity】Dr.ストレンジの魔法でワープしてみた【アベンジャーズ】 #22

 

f:id:tubakihimeLoveHate:20190528215925j:plain

f:id:tubakihimeLoveHate:20190528223559p:plain

 

こんにちは!ラブヘイトです

アベンジャーズエンドゲームを見て、どうしてもDrストレンジの魔法使いたくて急遽作りました

 

今回はどんなことをしたかは早足で紹介

詳細なことは別記事に書いていきます。ではいこう!

 

 

難しそうだと思いますが、ワープホールを作るだけなら簡単です

 

◆円を作成

最初に円を作成します

なぜかProBilderで作成した図形にはマテリアルが2つ適用できなかったので、デフォルト3Dオブジェクトで作成できるCylinderを使います

f:id:tubakihimeLoveHate:20190528230004p:plain

薄っぺらくしたいのでScaleYを0.01に

マテリアルを複数適用する際はあらかじめ数を決めておかなければいけません

ここに設定するマテリアルは後ほど説明

あとはコライダーをBox Colliderに変更しておきます

 

◆カメラの映像を円に映し出す

1,先ほど作成した円の子にサブカメラを設置

2,Project > Create > Render Textureを作成

3,サブカメラのTarget Textureに2のTextureを設定します

ワープホールなので今回はこの流れで二つ作ります

f:id:tubakihimeLoveHate:20190529004107p:plain

 

 

◆マテリアルを作成

Project > create >Materialで新規マテリアルを作成

ShaderをUnlit > Textureに変更

先ほど作成したTextureをセットします

f:id:tubakihimeLoveHate:20190529005412p:plainf:id:tubakihimeLoveHate:20190529005426p:plain

 

このマテリアルを円に適用させると円の中にカメラの映像が映ります

f:id:tubakihimeLoveHate:20190529022131g:plain


これはどちらでも良いのですが私はワープ先がぼやけて見える演出にしたかったのでマテリアルを2つ適用させました

 

これで違う場所の風景が映るという機能の完成!

あとはこれを魔法へと寄せていくだけです! 

 

 

◆パーティクル適用

 

円形のパーティクルを作成

f:id:tubakihimeLoveHate:20190528223559p:plain

大事なところはここくらいで、あとはお好みだと思います

 

f:id:tubakihimeLoveHate:20190529014559p:plainf:id:tubakihimeLoveHate:20190529014612p:plain 

 

パーティクルは少し触れたことがあるのでこちらもぜひ

パーティクルで雨と雪を降らせる #12

 

◆ワープできるようにしてみた

Unityちゃんがワープホールに当たったらワープできるようにしました

コードはこんな感じ

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

public class Jumpholl : MonoBehaviour {

    //ワープ先
    public GameObject targetHoll;
    
    //ゲートの少し前方に修正
    Vector3 warpPoint;
    //ワープ後のモデル向き
    Vector3 warpAngle;

    //ワープで出現させたい位置を調節
    [SerializeField]
    float fx = 0;
    [SerializeField]
    float offsetY = -1.5f;

    [SerializeField]
    float fz = 0;
    

    // Use this for initialization
    void Start () {
        warpPoint = new Vector3(targetHoll.transform.position.x+fx,targetHoll.transform
.position.y+offsetY,targetHoll.transform.position.z+fz);
        warpAngle = new Vector3(0,targetHoll.transform.eulerAngles.y,0);
    }
    
    // Update is called once per frame
    void Update () {
        
    }

    void OnTriggerEnter(Collider other)
    {
        other.transform.position = warpPoint;
        other.transform.eulerAngles = warpAngle;
    }
}

かなりシンプルになりました

これを2つあるワープホールにアタッチして、targetHollに互いを設定すれば完成です

[SerializeField]の部分はワープホールがどんな方向で置かれるか定かでないため手動調節できるようにしています

 

f:id:tubakihimeLoveHate:20190529022909g:plain

Kisoraちゃんも付いて来ちゃいました笑

 

どうだったでしょうか、手軽に作れて結構いい機能だと思います

今回はできませんでしたがカメラの位置も調節したり、出てくる瞬間だけカットシーン入れたり、ディゾルブで徐々に出現させたりと時間があるときにパワーアップさせたいです!