Unity + 연 3에서 액션 RPG로 마을 사람들에게 다가가 말을 걸어 대화하는 상황을 상정한 장면 구현
코멘트
마을 사람들에게 다가가 말을 걸어서 퀘스트를 발생시키거나 선택사항에 따라 진행을 분기시키거나 매우 자주 사용하는 구현을 했을 때의 이야기를 정리했습니다.
(이 기사는 자신의 블로그의 전재가됩니다)
개발 일지 :: Unity + 연회 3에서 액션 RPG로 마을 사람들에게 다가가 말을 걸어 대화하는 상황을 상정한 장면 구현 -
필요한 것 및 구현 환경
UTAGE3 Unity Text Adventure Game Engine Version3 - Asset Store
h tp // 마 d 넷 s 아보. 네 t/우타게/
연회는 일가에 1 에셋 있다고 뭔가로 뿌린다고 생각했습니다. 유료로 80달러입니다만 충분히 그 가치는 있는 자산이라고 생각하므로 엄청 추천해 둡니다. 노벨 게임 뿐만이 아니라 이번과 같은 액션 PRG나 SLG로 활용도 간편하게 할 수 있을 것 같습니다^^
1단계: 구성 개요
이런 느낌입니다
위와 같이 먼저 주인공과 Cube의 거리를 측정합니다.
그러므로 거친 행동으로는
if (主人公とCubeの距離 < 一定 かつ クリック=True)
{ 会話呼び出し; }
라는 느낌의 함수를 구현하고 싶습니다.
2단계: 주인공과 Cube 사이의 거리를 측정하는 코드 구현
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class conversation : MonoBehaviour {
public GameObject objOne;
public GameObject objTwo;
bool One;
bool Two;
// Use this for initialization
void Start () {
//このOneとTwoを一回DebugLog呼び出したら
//True,False切り替えるようにしておき、
//1フレームごとに距離が出力されないようにしておきます
//状態が変わったときだけDebugLogを吐き出すということです
One = true;
Two = true;
}
// Update is called once per frame
void Update () {
Vector3 OnePos = objOne.transform.position; //主人公キャラプレファブ
Vector3 TwoPos = objTwo.transform.position; //Cube(実践だとキャラクタープレファブ等を想定)
float dis = Vector3.Distance(OnePos, TwoPos); //距離測定
if (One)
{
if (dis >= 2) //主人公とCubeの距離が2以上なら
{
Debug.Log("Distance is over 2. far : " + dis); //more than でしたね。すみません。
One = false;
Two = true;
}
}
if (Two)
{
if (dis < 2) //主人公とCubeの距離が2未満なら
{
Debug.Log("Distance is under 2. close : " + dis);
Two = false;
One = true;
}
}
}
이런 느낌이군요.
거동도 봅시다. 잘 생각한대로
거동을 하고 있습니다.
가까워지면 말을 걸 수 있도록 센서 코드 구현 - YouTube
3단계: 연회 설정
여기에서는 연회를 이용하기 때문에 연회 자체의 세팅(구입, 임포트 등)이 먼저 필요합니다. 가져온 후에는 아래 공식 매뉴얼에 따라 히에랄 키에 배치 된 상태로 두십시오.
대화 장면으로 연회 사용 | Unity 용 비주얼 노벨 도구 "연회"
4단계: 거리가 가까울 때 클릭하여 대화 대화를 호출합니다.
드디어 핵심 부분의 구현입니다.
//手順2と同じスクリプトです
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Utage; //宴を忘れずに付加します
public class conversation : MonoBehaviour {
//ここで宴のコントローラー的なオブジェクトを
//呼び出す必要あります
AdvEngine Engine { get { return engine ?? (engine = FindObjectOfType<AdvEngine>()); } }
public AdvEngine engine;
//・・・(中略)・・・・
void Update () {
Vector3 OnePos = objOne.transform.position;
Vector3 TwoPos = objTwo.transform.position;
float dis = Vector3.Distance(OnePos, TwoPos);
//・・・(手順2と重なるので中略)・・・・
if (dis< 2) //主人公とCubeの距離が2未満なら
{
if (Input.GetMouseButtonDown(0)) //さらにマウスクリックがあったなら
{
Debug.Log("conversation start");
StartCoroutine(CoTalk()); //会話シナリオを呼び出します
}
}
}
IEnumerator CoTalk()
{
//「宴」のシナリオ「Start」タグの会話シーンを呼び出す
//会話をどのように構成するか、条件分岐、フラグ設定などは
//なんと1つのエクセルでできてしまいます・・・
//なお「Start」はデフォルトで入っているタグなので
//設定しなくとも下記コードは動きます
Debug.Log("call co talk");
Engine.JumpScenario("Start");
//「宴」のシナリオ終了待ち
while (!Engine.IsEndScenario)
{
yield return 0;
}
}
행동을 보자. 오! 좋은 느낌!
가까이 다가오고 마우스 클릭하면 대화 대화 상자 표시 코드 구현 - YouTube
UI를 제대로 구축하면 더 나은 느낌이 될 것 같네요^^
참고문헌
연회 3 활용 방법 참조
대화 장면으로 연회 사용 | Unity 용 비주얼 노벨 도구 "연회"
2 오브젝트 사이의 거리를 측정합니다.
Unity에서 두 객체 사이의 거리를 취한다 : 브리브서 개발 전선 ~ 우리는 그 싸움을 잊지 않는다 ~
Reference
이 문제에 관하여(Unity + 연 3에서 액션 RPG로 마을 사람들에게 다가가 말을 걸어 대화하는 상황을 상정한 장면 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k_mawa82/items/724789dfc9873ce881b4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if (主人公とCubeの距離 < 一定 かつ クリック=True)
{ 会話呼び出し; }
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class conversation : MonoBehaviour {
public GameObject objOne;
public GameObject objTwo;
bool One;
bool Two;
// Use this for initialization
void Start () {
//このOneとTwoを一回DebugLog呼び出したら
//True,False切り替えるようにしておき、
//1フレームごとに距離が出力されないようにしておきます
//状態が変わったときだけDebugLogを吐き出すということです
One = true;
Two = true;
}
// Update is called once per frame
void Update () {
Vector3 OnePos = objOne.transform.position; //主人公キャラプレファブ
Vector3 TwoPos = objTwo.transform.position; //Cube(実践だとキャラクタープレファブ等を想定)
float dis = Vector3.Distance(OnePos, TwoPos); //距離測定
if (One)
{
if (dis >= 2) //主人公とCubeの距離が2以上なら
{
Debug.Log("Distance is over 2. far : " + dis); //more than でしたね。すみません。
One = false;
Two = true;
}
}
if (Two)
{
if (dis < 2) //主人公とCubeの距離が2未満なら
{
Debug.Log("Distance is under 2. close : " + dis);
Two = false;
One = true;
}
}
}
이런 느낌이군요.
거동도 봅시다. 잘 생각한대로
거동을 하고 있습니다.
가까워지면 말을 걸 수 있도록 센서 코드 구현 - YouTube
3단계: 연회 설정
여기에서는 연회를 이용하기 때문에 연회 자체의 세팅(구입, 임포트 등)이 먼저 필요합니다. 가져온 후에는 아래 공식 매뉴얼에 따라 히에랄 키에 배치 된 상태로 두십시오.
대화 장면으로 연회 사용 | Unity 용 비주얼 노벨 도구 "연회"
4단계: 거리가 가까울 때 클릭하여 대화 대화를 호출합니다.
드디어 핵심 부분의 구현입니다.
//手順2と同じスクリプトです
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Utage; //宴を忘れずに付加します
public class conversation : MonoBehaviour {
//ここで宴のコントローラー的なオブジェクトを
//呼び出す必要あります
AdvEngine Engine { get { return engine ?? (engine = FindObjectOfType<AdvEngine>()); } }
public AdvEngine engine;
//・・・(中略)・・・・
void Update () {
Vector3 OnePos = objOne.transform.position;
Vector3 TwoPos = objTwo.transform.position;
float dis = Vector3.Distance(OnePos, TwoPos);
//・・・(手順2と重なるので中略)・・・・
if (dis< 2) //主人公とCubeの距離が2未満なら
{
if (Input.GetMouseButtonDown(0)) //さらにマウスクリックがあったなら
{
Debug.Log("conversation start");
StartCoroutine(CoTalk()); //会話シナリオを呼び出します
}
}
}
IEnumerator CoTalk()
{
//「宴」のシナリオ「Start」タグの会話シーンを呼び出す
//会話をどのように構成するか、条件分岐、フラグ設定などは
//なんと1つのエクセルでできてしまいます・・・
//なお「Start」はデフォルトで入っているタグなので
//設定しなくとも下記コードは動きます
Debug.Log("call co talk");
Engine.JumpScenario("Start");
//「宴」のシナリオ終了待ち
while (!Engine.IsEndScenario)
{
yield return 0;
}
}
행동을 보자. 오! 좋은 느낌!
가까이 다가오고 마우스 클릭하면 대화 대화 상자 표시 코드 구현 - YouTube
UI를 제대로 구축하면 더 나은 느낌이 될 것 같네요^^
참고문헌
연회 3 활용 방법 참조
대화 장면으로 연회 사용 | Unity 용 비주얼 노벨 도구 "연회"
2 오브젝트 사이의 거리를 측정합니다.
Unity에서 두 객체 사이의 거리를 취한다 : 브리브서 개발 전선 ~ 우리는 그 싸움을 잊지 않는다 ~
Reference
이 문제에 관하여(Unity + 연 3에서 액션 RPG로 마을 사람들에게 다가가 말을 걸어 대화하는 상황을 상정한 장면 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k_mawa82/items/724789dfc9873ce881b4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
드디어 핵심 부분의 구현입니다.
//手順2と同じスクリプトです
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Utage; //宴を忘れずに付加します
public class conversation : MonoBehaviour {
//ここで宴のコントローラー的なオブジェクトを
//呼び出す必要あります
AdvEngine Engine { get { return engine ?? (engine = FindObjectOfType<AdvEngine>()); } }
public AdvEngine engine;
//・・・(中略)・・・・
void Update () {
Vector3 OnePos = objOne.transform.position;
Vector3 TwoPos = objTwo.transform.position;
float dis = Vector3.Distance(OnePos, TwoPos);
//・・・(手順2と重なるので中略)・・・・
if (dis< 2) //主人公とCubeの距離が2未満なら
{
if (Input.GetMouseButtonDown(0)) //さらにマウスクリックがあったなら
{
Debug.Log("conversation start");
StartCoroutine(CoTalk()); //会話シナリオを呼び出します
}
}
}
IEnumerator CoTalk()
{
//「宴」のシナリオ「Start」タグの会話シーンを呼び出す
//会話をどのように構成するか、条件分岐、フラグ設定などは
//なんと1つのエクセルでできてしまいます・・・
//なお「Start」はデフォルトで入っているタグなので
//設定しなくとも下記コードは動きます
Debug.Log("call co talk");
Engine.JumpScenario("Start");
//「宴」のシナリオ終了待ち
while (!Engine.IsEndScenario)
{
yield return 0;
}
}
행동을 보자. 오! 좋은 느낌!
가까이 다가오고 마우스 클릭하면 대화 대화 상자 표시 코드 구현 - YouTube
UI를 제대로 구축하면 더 나은 느낌이 될 것 같네요^^
참고문헌
연회 3 활용 방법 참조
대화 장면으로 연회 사용 | Unity 용 비주얼 노벨 도구 "연회"
2 오브젝트 사이의 거리를 측정합니다.
Unity에서 두 객체 사이의 거리를 취한다 : 브리브서 개발 전선 ~ 우리는 그 싸움을 잊지 않는다 ~
Reference
이 문제에 관하여(Unity + 연 3에서 액션 RPG로 마을 사람들에게 다가가 말을 걸어 대화하는 상황을 상정한 장면 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k_mawa82/items/724789dfc9873ce881b4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)