2018.03.03 04:58

유니티 질문입니더;

조회 수 492 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

 

public class talkmanager : MonoBehaviour {

    

    public int a = 0;

    public int g = 0;

    public int f = 0;

    public int e = 0;

    public int d = 0;

    public int c = 0;

    public int b = 0;

public int[] order = new int[80]; //1은 대사창 2는 선택지 3은 아이템 획득

public string[] TalkName = new string[80];

public string[] TalkMal = new string[80];

int talknum=0;

int itemnum=0;

int lastscene;

string[] Suntak = new string[3];

int[] ItemCode = new int[80];

public bool Window = false;

public int number = 0;

public Sprite TalkWindow;

public Sprite NameWindow;

public Sprite TestMan;

Sprite man;

uitest makeui;

 

public string asdasd = "";

//선택지는 무조건 마지막

void Start(){

    makeui = GameObject.Find("manager").GetComponent<uitest>();

for(int i=0;i<80;i++)

{

    TalkMal[i]="";

    TalkName[i]="";

}

}

public void Talk(string name, string mal){

    asdasd = mal;

for(int i = 0; i<80; i++)

{

    if(order[i] == 0)

    {

        order[i] = 1;

        i = 81;

    }

 

}

for(int i = 0; i<80; i++)

{

    

    if(TalkName[i] =="")

    {a++;

        TalkName[i] = name;

        i = 81;

    }

 

}

for(int i = 0; i<80; i++)

{

    if(TalkMal[i] == "")

    {

        TalkMal[i] = mal;

        i = 81;

    }

 

}

if(name == "박재현")

{

man = TestMan;

}

}

public void Sun(string first, string second, string third)

{

    Suntak[0] = first;

    Suntak[1] = second;

    Suntak[2] = third;

}

public void Itme(int Code)

{

    for(int i = 0; i<80;i++)

    {

     if(ItemCode[i]==0){

         ItemCode[i] = Code;

         i=80;

     }

    }

    

}


 

    void Update(){

        if (order[0]!=0)

        {

            b++;

            if(GameObject.Find("manager").GetComponent<manager>().scene !=14)

{

    c++;

    lastscene = GameObject.Find("manager").GetComponent<manager>().scene;

            GameObject.Find("manager").GetComponent<manager>().scene = 14;

        }

            if(!Window){

                

                //그냥 if에 num ++

            if(order[number] == 1)

            {

                

                    if(number ==0){

makeui.MakeUI(man,"테스트맨",new Vector3(0,0,0),new Vector2(300f,600f));

            

                    }else if(order[number-1]==1)

                    {

GameObject.Find("테스트맨").GetComponent<Image>().sprite = man;

                    }else{

makeui.MakeUI(man,"테스트맨",new Vector3(0,0,0),new Vector2(300f,600f));

            

                    }

 

            

            if(number==0){

                makeui.MakeUI(TalkWindow,"대사 윈도우",new Vector3(0,0,0),new Vector2(1280f,200f));

makeui.MakeUI(NameWindow,"대사 이름창",new Vector3(0,170,0),new Vector2(300f,50f));


 

            }else if(order[number-1]==1)

            {

GameObject.Find("대사 윈도우").GetComponent<Image>().sprite = TalkWindow;

GameObject.Find("대사 이름창").GetComponent<Image>().sprite = NameWindow;

GameObject.Find("대사").GetComponent<Text>().text = TalkMal[talknum];

GameObject.Find("대사 이름").GetComponent<Text>().text = "0/"+ TalkName[talknum];

            }else{

makeui.MakeUI(TalkWindow,"대사 윈도우",new Vector3(0,0,0),new Vector2(1280f,200f));

makeui.MakeUI(NameWindow,"대사 이름창",new Vector3(0,170,0),new Vector2(300f,50f));

 

            }

            d++;

            talknum++;

Window = true;

            }else if(order[number] == 2){

Window = true;

            }else if(order[number]== 3)

            {

Window = true;

            } else if(order[number]==0)

            {

                f++;

GameObject.Find("manager").GetComponent<manager>().scene = lastscene;

System.Array.Clear(order,0,order.Length);

System.Array.Clear(TalkName,0,TalkName.Length);

System.Array.Clear(TalkMal,0,TalkMal.Length);

System.Array.Clear(Suntak,0,Suntak.Length);

System.Array.Clear(ItemCode,0,ItemCode.Length);

talknum = 0;

itemnum = 0;

Window = false;

number = 0;

            }

            

            }

if(Window){

    e++;

if(Input.GetKeyDown(KeyCode.H))

{

    g++;

if(order[number]==1){

    if(order[number+1]!=1){

Destroy(GameObject.Find("대사 윈도우"));

Destroy(GameObject.Find("대사 이름창"));

Destroy(GameObject.Find("테스트맨"));

Destroy(GameObject.Find("대사"));

Destroy(GameObject.Find("대사 이름"));

    }

 

}else if(order[number]==2){

Destroy(GameObject.Find("대사 윈도우"));

Destroy(GameObject.Find("대사 이름"));

Destroy(GameObject.Find("대사"));

Destroy(GameObject.Find("대사 이름"));


 

} else if(order[number]==3){

Destroy(GameObject.Find("대사 윈도우"));

Destroy(GameObject.Find("대사 이름"));

Destroy(GameObject.Find("대사"));

Destroy(GameObject.Find("대사 이름"));


 

}

Window = false;

number ++;

}

 

}

            

        }

        

 

    }

        

            

}

 

프로그래밍 제대로 배운적 없이 혼자 검색하며 만들고 있었는데 이번 오류는 답이 없네요

그냥 다른 스크립트에서  Talk("어쩌고","저쩌고"); 이렇게 적으면 그렇게 이름과 대사가 나가면 되는데

계속 오류가나서 공개변수들로 알아보니까 tlakmal이랑 talkname이 계속 비어있네요.

혹시

for(int i = 0; i<80; i++)

{

    if(TalkMal[i] == "")

    {

        TalkMal[i] = mal;

        i = 81;

    }

 

}

에서 TalkMal[i]가  ""이 아니라 null일까 싶어서 시작에 전부 ""로 넣어줘도 이렇게 되고

asdasd를 확인해 봤더니 입력한 값이 제대로 나오네요??

순서 문제인가 싶었기도 했는데 아무리 기다려도 talkmal은 채워지지가 않네요.

제가 아는 지식 밖의 문제거나 뭔가 오해하는것같은데,

도움좀 주세요 ㅠㅠㅠㅠㅠㅠㅠㅠ 

만들떄는 잘 됐었는데 살짝 바꾸려고 뭔가 고치고 나서 오류가 생겼는데 뭔가ㅏ 뭔지 모르겠네요

a를 for문 안에 if안에 넣은걸 볼 수있는데 talk를 실행시킨 만큼 정확히 나왔습니다.

그런데도 값이 안들어가네요:???????

?
  • ?
    찰드 2018.03.04 22:37
    일단 코드가 좀 복잡해서 @.@; 얼른 보기엔 불필요한 코드가 너무 많아보이는군요. 이거 해석하려면 시간이 좀 많이 걸릴것 같아 일단 훑어본 결과에 의해 말씀드려볼께요 ;ㅅ;
    질문에 관련된 문제점을 찾아보자면, 대사가 여러글자 라고 해서 string 이 배열일 필요는 없습니다. string 변수는 그 자체가 "문자열" 이기 때문에 string 하나에 몇글자든 넣을 수 있어요. string 의 용도가 이름과 대사 표시용이면 배열 말고 그냥 string 변수 2개면 될것 같습니다. 말하는 사람이 누군지 구분이 필요하면 가장 간단한 방법은 Talk 함수의 int 인수를 하나 더 받아서 그걸로 구분하면 될것 같고요 ㅇ.ㅇ;
  • ?
    찰드 2018.03.04 22:43
    그리고 확 눈에 띄는게 하나 있어서 추가로 말씀드리면, GameObject.Find() 함수는 굉장히 무거운 함수입니다. Start 나 Awake 같은 곳에서 한번 사용되고 끝내야지, 이런게 Update 에서 프레임마다 몇십번씩 돌아가게 만드는 코드는 매우 위험해요. Update 가 시작되기 전에 해당 오젝트를 Start 나 Awake 에서 연결시키든, public으로 해서 유니티 상에서 끌어오는걸로 연결시키든 해서 사용하시는 것을 권합니다.
  • profile
    lklslel 2018.03.05 08:50
    order[number]의 number변수 값에 따른 update함수 내의

    if분기에 따른 배열 초기화로 데이터기 적용되기 전에

    데이터를 비워버리는 것은 아닐지 살펴보시기 바랍니다.


    그리고...질문하시는 글에 제일 중요한 요소가 빠져 있습니다.

    코드는 실행에 연관된 부분 전체를 올려주셔야지만 어디서

    오류가 나는지 검수해볼 수 있는데, talk함수에 대한 부분만

    가지고는 실제 실행이 잘 되는지 안되는지에 대해서 분석을

    제대로 할 수 없기 때문입니다.


    현재 올려주신 부분은 코드를 실행할때 에러가 전혀 발생하지

    않습니다.

    로직적인 오류가 있다면 작성하신 로직이 잘못된 것일 수도

    있으니 변수 선언부분을 제외한 모든 곳을 주석처리 하신다음

    구조를 단순화하여 테스트를 해보십시오.

    테스트에 통과한 코드를 게시글로 작성한 부분에 반영해서

    수정을 해도 정상 작동이 되지 않는다면 테스트에 통과한

    코드부분을 감싼 구문 이외의 부분들을 감싸서 주석처리

    (/* ...*/ ) 를 하시고 n차 테스트를 하시면서 원하시는 결과가

    나올 때까지 변수의 값을 출력해 보시면서 디버그하시면

    되겠습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
8800 모바일 mv화면크기조절하는방법좀 이뉴링 2018.05.29 190
8799 알만툴 추천좀 부탁드려요 1 XeNuS 2018.05.28 558
8798 rpg maker xp 가위바위보할때 확률질문 file DeathMoon 2018.05.20 153
8797 rpg maker xp파일 apk변환하기 질문 1 DeathMoon 2018.05.12 616
8796 MV 스킬을 만드는데 질문이 있습니다 3 키보드부셔라 2018.05.02 226
8795 알피지메이커 MV 대화창 및 메뉴창 이상해요 ㅠㅠㅠ 2 file かぜかげ 2018.04.28 641
8794 만들기 2 갓.무.트 2018.04.19 601
8793 RPG MV만들기에 대한 질문 드립니다. 1 자택근무희망 2018.04.05 1076
8792 RPG VX ACE 질문 2 연댕 2018.03.26 666
8791 vx ace로 만든 게임 폰에서 구동 가능한가요? 머리큰두두 2018.03.18 218
» 유니티 질문입니더; 3 yangpanpoo 2018.03.03 492
8789 mv 기본턴제전투 공격순서시스템을 바꾸고 싶습니다. 힣홓 2018.02.27 174
8788 MV게임 플레이시 오류 질문드립니다. 2 아아마바 2018.02.11 620
8787 (mv) 메시지창 질문입니다.(말풍선 형식으로) 1 file 그거킹 2018.02.08 390
8786 신규게임에 게임을 올리려는데 PC쯔꾸르와 PC게임의 차이가 뭔가요?? 2 김용암 2018.01.30 672
8785 캐릭터칩 사용법 질문 드립니다. 2 file 유멘리탈 2018.01.26 597
8784 RPG MV 파티별 아이템 구분 2 시풍 2018.01.17 576
8783 RPG maker MV 새로운 도트 만드는법 3 고르고르고 2018.01.16 706
8782 휴대폰 게임 실행이 안되요 도와주세요ㅜㅜ 1 데거스 2018.01.11 289
8781 mv게임 apk포팅 관련질문 만무방 2018.01.08 237
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 440 Next
/ 440






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)