Unity + 연 3에서 액션 RPG로 마을 사람들에게 다가가 말을 걸어 대화하는 상황을 상정한 장면 구현

12088 단어 Unity3DC#연회Unity


코멘트



마을 사람들에게 다가가 말을 걸어서 퀘스트를 발생시키거나 선택사항에 따라 진행을 분기시키거나 매우 자주 사용하는 구현을 했을 때의 이야기를 정리했습니다.

(이 기사는 자신의 블로그의 전재가됩니다)
개발 일지 :: Unity + 연회 3에서 액션 RPG로 마을 사람들에게 다가가 말을 걸어 대화하는 상황을 상정한 장면 구현 -

필요한 것 및 구현 환경


  • 연회 3
    UTAGE3 Unity Text Adventure Game Engine Version3 - Asset Store
  • 연회 공식 사이트
    h tp // 마 d 넷 s 아보. 네 t/우타게/
  • Unity 2017.2.1f1
  • Windows10Pro

  • 연회는 일가에 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에서 두 객체 사이의 거리를 취한다 : 브리브서 개발 전선 ~ 우리는 그 싸움을 잊지 않는다 ~

    좋은 웹페이지 즐겨찾기