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

NPCと会話?

まだ習ったことないわ!

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

これからこの2DマップでNPCと会話するを一緒に勉強して行くッピよ~
Unityで会話ウィンドウを作ってみよう(2D)
必要なもの

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

- Unity
- Windows または Mac のパソコン
が必要ッピよ~!

まだ Unity をダウンロードしてない人は
↓ の記事を参考に必要なものをインストールするといいッピ!
マップとキャラクター・NPCを用意する

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


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

オッケー!
用意できたぜ

ついでにDLsiteにも
素敵なチップ素材が売ってるッピよ!<露骨なPR>

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

さっそく会話ウィンドウをつくっていくッピ~♪
テロップの枠をつくっていくッピよ~


テロップ枠は
ヒエラルキー→右クリック→UI→画像
でつくるッピ!

ヒエラルキーに
▼□Canvas
□Image
というふなものがつくられるッピ!

あったあった

このImageをクリックすると
白い四角形が中央にできる
ッピ!


インスペクターで
色を【黒】に変更
ッピよ~!

Imageを黒にすればいいのね!


四隅の青い●を
ドラッグすると、黒枠が広がるっッピ!
映画のテロップのように横幅を広げてみるッピね

オッケー
文字を設定する

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


ヒエラルキーから
右クリック→UI→古い機能→テキスト
を選択するッピよ~!


右側のインスペクターに移動して、
フォントサイズを25くらいに設定
して、文字を大きくするッピ!



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

最後に
▶□Canvas
をクリックして、インスペクターの
チェックボタンを外すッピ!
プレイヤーの設定
プレイヤーのタグづけ

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

タグ付け?

タグづけは、
●●がXXに当たったら、
▲▲というプログラムを起動する
というプログラムを組みたいときに●●やXXを判別するものッピ!

今回のタグ付けは
プレイヤーがNPCに当たったら、
会話というプログラムを起動する
というプログラムを組むためにタグづけしていくッピよ~!

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


まず
プレイヤーをクリック
するッピ~
プレイヤーの当たり判定/質量の追加

プレイヤーの当たり判定をつけるッピ!
すでに当たり判定がついている場合は次のステップに行くッピよ~


まず
プレイヤーをクリック
するッピ~

それからインスペクター
コンポーネントを追加→Physics2D→Circle Collider2D
を選択するッピ~


質量を追加するッピ!
インスペクターから
コンポーネントを追加→Physics2D→Rigidbody 2D
を選択するッピ~


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

そこから
リニアの抵抗0
回転抵抗 0
重力スケール 0
と入力し、
回転を固定 ☑Z にチェックを入れる
ッピよ~

できたわ!
NPCの設定
NPCの当たり判定


NPCの設定をするッピ!

まずNPCを選択して、
インスペクター→コンポーネントを追加→Physics2D→CapsuleCollider2D
を選択するッピ~


当たり判定を調整するッピよ~
インスペクター→CapsuleCollider2D→コライダー編集→
NPCの緑の枠をドラッグ(少し下に拡大)
するッピ~
NPCの質量



次は質量を追加するッピよ~
インスペクター→コンポーネントを追加→Physics 2D→Rigidbody 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 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 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)をドラッグ&ドロップ
インスペクターにある
テキスト
に持っていくッピね~!

できたわ!

オッケー

最後に
Wordsに好きなセリフを追加
するッピよ~
テストプレイ


できた~~~

やったね♪

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