今回は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を話させる方法を紹介するッピ♪