Unity入門講座|2DマップでNPCと会話する【ウィンドウ】

Unity
うさタブ
うさタブ

今回はUnityで2DマップでNPCと会話について勉強するッピ!

ユウキ
ユウキ

NPCと会話?

アイカ
アイカ

まだ習ったことないわ!

うさタブ
うさタブ

会話ウィンドウは、
テキスト会話ウィンドウ画像で作れるッピ!

うさタブ
うさタブ

これからこの2DマップでNPCと会話するを一緒に勉強して行くッピよ~

Unityで会話ウィンドウを作ってみよう(2D)

必要なもの

うさタブ
うさタブ

まずは必要なものを用意するッピ!

  • Unity
  • Windows または Mac のパソコン

が必要ッピよ~!

うさタブ
うさタブ

まだ Unity をダウンロードしてない人は

↓ の記事を参考に必要なものをインストールするといいッピ!

マップとキャラクター・NPCを用意する

うさタブ
うさタブ

マップとキャラクターも用意するっぴ!

うさタブ
うさタブ

マップの作り方

移動できるキャラクターの作り方は↓の記事に載ってるっぴ!

ユウキ
ユウキ

オッケー!
用意できたぜ

会話ウィンドウを作成する

うさタブ
うさタブ

さっそく会話ウィンドウをつくっていくッピ~♪

テロップの枠をつくっていくッピよ~

うさタブ
うさタブ

テロップ枠は

ヒエラルキー右クリック→UI→画像

でつくるッピ!

うさタブ
うさタブ

ヒエラルキーに

▼□Canvas
  □Image

というふなものがつくられるッピ!

ユウキ
ユウキ

あったあった

うさタブ
うさタブ

このImageをクリックすると

白い四角形が中央にできる

ッピ!

うさタブ
うさタブ

インスペクターで

色を【黒】に変更

ッピよ~!

アイカ
アイカ

Imageをにすればいいのね!

うさタブ
うさタブ

四隅の青い

ドラッグすると、黒枠が広がるっッピ!

映画のテロップのように横幅を広げてみるッピね

ユウキ
ユウキ

オッケー

文字を設定する

うさタブ
うさタブ

会話のための文字列を入れるッピ!

うさタブ
うさタブ

ヒエラルキーから

右クリック→UI→古い機能→テキスト

を選択するッピよ~!

うさタブ
うさタブ

右側のインスペクターに移動して、

フォントサイズを25くらいに設定

して、文字を大きくするッピ!

うさタブ
うさタブ

今度は、文字の色を【白】変更するッピ!

うさタブ
うさタブ

最後に

▶□Canvas

をクリックして、インスペクターの

チェックボタン外す

ッピ

プレイヤーの設定

プレイヤーのタグづけ

うさタブ
うさタブ

次はプレイヤーのタグづけをするッピ!

アイカ
アイカ

タグ付け?

うさタブ
うさタブ

タグづけは、

●●XXに当たったら、
というプログラムを起動する

というプログラムを組みたいときに●●やXXを判別するものッピ!

うさタブ
うさタブ

今回のタグ付けは

プレイヤーNPCに当たったら、
会話というプログラムを起動する

というプログラムを組むためにタグづけしていくッピよ~!

ユウキ
ユウキ

そんな機能があるんだなー

うさタブ
うさタブ

まず

プレイヤーをクリック

するッピ~

プレイヤーの当たり判定/質量の追加

うさタブ
うさタブ

プレイヤーの当たり判定をつけるッピ!

すでに当たり判定がついている場合は次のステップに行くッピよ~

うさタブ
うさタブ

まず

プレイヤーをクリック

するッピ~

うさタブ
うさタブ

それからインスペクター

コンポーネントを追加Physics2DCircle Collider2D

を選択するッピ~

うさタブ
うさタブ

質量を追加するッピ!
インスペクターから

コンポーネントを追加Physics2DRigidbody 2D

を選択するッピ~

うさタブ
うさタブ

重力や抵抗を設定するッピよ~!
インスペクターから

Rigidbody 2D

を選択するッピ~

うさタブ
うさタブ

そこから

リニアの抵抗0
回転抵抗 0
重力スケール 0

と入力し、

回転を固定  ☑Z にチェックを入れる

ッピよ~

アイカ
アイカ

できたわ!

NPCの設定

NPCの当たり判定

うさタブ
うさタブ

NPCの設定をするッピ!

うさタブ
うさタブ

まずNPCを選択して、

インスペクター→コンポーネントを追加→Physics2D→CapsuleCollider2D

を選択するッピ~

うさタブ
うさタブ

当たり判定を調整するッピよ~

インスペクター→CapsuleCollider2D→コライダー編集→
NPCの緑の枠をドラッグ(少し下に拡大)

するッピ~

NPCの質量

うさタブ
うさタブ

次は質量を追加するッピよ~

インスペクター→コンポーネントを追加
Physics 2DRigidbody 2D

を選択するッピ~

うさタブ
うさタブ

インスペクターから

Rigidbody 2D→ボディタイプ→静的

を選択するッピ!

ユウキ
ユウキ

この「静的」とか「ドラマティック」とかって何なんだ?

うさタブ
うさタブ

これは、
外部からの「ちから」が働くかどうか?

を決める項目ッピ!

状態重力質量速度
Dramatic
(ドラマティック)
外部から力を受ける
モノを動かす
Cinematic
(キネマティック)
外部から力を受けない
モノを動かす
Static
(静的)
外部から力を受けない
モノを動かせない
ユウキ
ユウキ

へー

こうなってるのか

アイカ
アイカ

勉強になったわ!

会話スクリプトをつくる

うさタブ
うさタブ

次はついに
会話プログラムをつくるッピよ~

うさタブ
うさタブ

王様を選んだまま

インスペクター→コンポーネントを追加New script
【Talk
と名前をつけるッピ!

そのままC#スクリプトをクリックしてスクリプトを編集するッピよ~

うさタブ
うさタブ

↓の文をコピーして

using UnityEngine;
using UnityEngine.UI;

public class talk : MonoBehaviour
{
    public GameObject dialogue;
    public Text Text;

   [SerializeField] 
   string words = "ここにセリフ";

    private void OnCollisionEnter2D(Collision2D other)
     {
        if (other.gameObject.CompareTag("Player"))
        {
            Text.text = words;
         dialogue.SetActive (true);
        }
    }

    private void OnCollisionExit2D(Collision2D other)
     {
        if (other.gameObject.CompareTag("Player"))
        {
   dialogue.SetActive (false);
        }
    }
}

貼り付けるッピ!

うさタブ
うさタブ

ちなみにこれは

usingつかいます UnityEngineunityの機能を;
using UnityEngineUnityのUI機能.UI;

public class呼び出し可能クラス  talk名前はtalk : MonoBehaviourunity専用の親クラスです
{

public呼び出しする  GameObjectゲームオブジェクトを設定 dialogue 名前はダイアログ;
public呼び出しする  Text文字を設定 Text 名前はテキスト;

[Serializeインスペクターで編集可能なField 変数を設定します]
string文字列変数  words名前はwords = “ここにセリフ”;

privateここでのみ使う  void関数です OnCollision2Dの当たり判定をEnter2D 設定します(Collision2D他の質量をもつ物体が other触れたら){実行
ifもしも  (other.gameObject他のゲームオブジェクトの中でも.CompareTagこのタグを持っていたら実行して(“Player”プレイヤーを)){
 TextText変数の.text文章を = words編集した文字へ変更;
 dialogueテロップとセリフの.SetActive表示設定を (trueオン(表示)にして);
}}

private void OnCollision2Dの当たり判定Exit2D 離れたら (Collision2D other){実行
ifさらに (other.gameObject.離れたオブジェクトがCompareTag このタグを持っていたら(“Player”プレイヤーを)){実行
 dialogue.テロップとセリフの SetActive 表示設定を(falseオフ(非表示)にして);
}}
}

という意味になるッピよ~

ユウキ
ユウキ

こういう意味だったのか

アイカ
アイカ

勉強になったわ!

using UnityEngine;
using UnityEngine.UI;

public class talk : MonoBehaviour
{
    public GameObject dialogue;
    public Text Text;

   [SerializeField] 
   string words = "ここにセリフ";

    private void OnCollisionEnter2D(Collision2D other)
     {
        if (other.gameObject.CompareTag("Player"))
        {
            Text.text = words;
         dialogue.SetActive (true);
        }
    }

    private void OnCollisionExit2D(Collision2D other)
     {
        if (other.gameObject.CompareTag("Player"))
        {
   dialogue.SetActive (false);
        }
    }
}

セリフとテロップ枠を連携

うさタブ
うさタブ

セリフとテロップを

プログラムに関連づけるッピ!

うさタブ
うさタブ

ヒエラルキーにある

Canvasをドラッグ&ドロップ

インスペクターにある

Dialog

に持っていくッピ!

うさタブ
うさタブ

ヒエラルキーにある

Text(Legacy)をドラッグ&ドロップ

インスペクターにある

テキスト

に持っていくッピね~!

アイカ
アイカ

できたわ!

ユウキ
ユウキ

オッケー

うさタブ
うさタブ

最後に

Wordsに好きなセリフを追加

するッピよ~

テストプレイ

ユウキ
ユウキ

できた~~~

アイカ
アイカ

やったね♪

うさタブ
うさタブ

最後に同じスプリクトを使って別のNPCを話させる方法を紹介するッピ♪

タイトルとURLをコピーしました