Unity講座|NPCとの会話イベントの作り方【2D】

Unity
うさタブ
うさタブ

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

ユウキ
ユウキ

NPCと会話?

アイカ
アイカ

まだ習ったことないわ!

うさタブ
うさタブ

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

うさタブ
うさタブ

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

スポンサーリンク
スポンサーリンク

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

必要なもの

うさタブ
うさタブ

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

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

が必要ッピよ~!

うさタブ
うさタブ

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

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

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

うさタブ
うさタブ

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

うさタブ
うさタブ

マップの作り方

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

ユウキ
ユウキ

オッケー!
用意できたぜ

うさタブ
うさタブ

ついでにDLsiteにも

素敵なチップ素材が売ってるッピよ!<露骨なPR>

DLsiteより引用<PR>

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

うさタブ
うさタブ

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

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

うさタブ
うさタブ

テロップ枠は

ヒエラルキー右クリック→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);
        }
    }
}

C#のプログラムについて

うさタブ
うさタブ

Unityで使うC#のプログラムについて

軽くおさらいッピ!

C#スクリプトはこんな風になってるッピよ~

うさタブ
うさタブ

C#プログラムは

名前空間(使う機能)

クラス(メッソドをまとめるグループ機能)

メッソド(命令文の集まり)

でできてるッピヨ~!

うさタブ
うさタブ

プログラムをよく見てみると

Debug変更したいもの.Log 動作命令 (コメントこんな風に変えて)

という感じに命令文に規則性があることがわかるッピ!

うさタブ
うさタブ

覚えておくと良いッピよ~!

アイカ
アイカ

こうなってたのね

ユウキ
ユウキ

納得だぜ!

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

うさタブ
うさタブ

セリフとテロップを

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

うさタブ
うさタブ

ヒエラルキーにある

Canvasをドラッグ&ドロップ

インスペクターにある

Dialog

に持っていくッピ!

うさタブ
うさタブ

ヒエラルキーにある

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

インスペクターにある

テキスト

に持っていくッピね~!

アイカ
アイカ

できたわ!

ユウキ
ユウキ

オッケー

うさタブ
うさタブ

最後に

するッピよ~

テストプレイ

ユウキ
ユウキ

できた~~~

アイカ
アイカ

やったね♪

うさタブ
うさタブ

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

スポンサーリンク

どうしてもわからない、そんなときは?

ユウキ
ユウキ

うさタブ!

オレ、もっと本格的にゲームが作りたいんだ

アイカ
アイカ

私もだわ!

もっとたくさん実用的なコードを

学ぶことってできないかしら?

うさタブ
うさタブ

おお、2人ともやる気ッピね!

ゲームの作り方を学ぶなら、コレとかどうッピか?


うさタブ
うさタブ
Udemy」テレビでも有名な動画教材
人気の機械学習からUnityゲーム講座まで選び放題ッピ!

うさタブ
うさタブ

2DアクションRPG脱出ゲーム

3Dゲーム制作講座まで

買い切り講座だからいつでも勉強し放題ッピよ~!

ユウキ
ユウキ

お!いいじゃん!

アイカ
アイカ

あと、どこか素敵な素材を売っているところはないかしら? 公式の素材販売だと、クレカ支払いしかなくて・・・

ユウキ
ユウキ

小学生じゃクレカで支払えないぜ~

うさタブ
うさタブ

ゲームの素材を買いたいなら、

DLsiteBoothとかどうッピか?

うさタブ
うさタブ

素敵なドット絵や音楽素材がいっぱい売ってるッピ!

うさタブ
うさタブ

しかもUnityアセットストアと違って

クレカ支払いじゃなく、コンビニ支払いができるのもポイントッピ!

ユウキ
ユウキ

すげーカッコいい素材がいっぱいある!

アイカ
アイカ

わたしもさっそくチェックしてみようかな♪

スポンサーリンク
Unityプログラミング動画付き
学んで遊んでジャンケンポン!
タイトルとURLをコピーしました