public void OnButtonUpNPC() { if (isTouch == false) { conTouch = null; return; } touchUpPosition = Input.mousePosition; // 만약 드래그한 길이(y축만 판별)가 최소 길이를 넘으면.. if (touchDownPosition.y - touchUpPosition.y >= standardMinDrag * (Screen.height / screenHeight)) { // 우선 우유배달소년만 다르게 작동되므로 따로 하드코딩.. 시간이 없다.. if (conTouch.nPCSpecialWork == TouchPointScript.NPCSpecialWork.MILKBOY) { Sprite newImage; switch (milkboyEarPullCount) { case 0: // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", "냥군님…? 아파옹…", null); milkboyEarPullCount++; // 귀가 조금 찢어진 이미지로 교체 newImage = Resources.Load <Sprite>("ArtResource/Stage1/ETC/우유소년_귀조금찢어짐"); GameObject.FindObjectOfType <ObservationManager>().ChangeNpcImage(newImage); break; case 1: // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", "냥군님… 적당히t하시라옹…", null); milkboyEarPullCount++; // 귀가 찢어진 이미지로 교체 newImage = Resources.Load <Sprite>("ArtResource/Stage1/ETC/우유소년_귀찢어짐"); GameObject.FindObjectOfType <ObservationManager>().ChangeNpcImage(newImage); break; case 2: // 귀 획득 GameObject.FindObjectOfType <ObservationManager>().GetItem("가짜 귀", "우유배달소년이 끼우던 가짜 귀", "야, 그만 하라고 했지.", GameObject.Find("08_AfterGetToyEar").GetComponent <ReactionCollection>()); // 귀가 찢어진 이미지로 교체 newImage = Resources.Load <Sprite>("ArtResource/Stage1/ETC/우유소년_귀뜯어짐"); GameObject.FindObjectOfType <ObservationManager>().ChangeNpcImage(newImage); break; } return; } // 해당 이벤트들을 처리 ParsingData tempData = Resources.Load("CSVData/All Observation List Asset") as ParsingData; for (int i = 0; i < tempData.list.Count; i++) { // 이벤트를 찾아서.. if (tempData.list[i]["ID"] as string != conTouch.ID) { continue; } // 이 이벤트에서 정보들을 추출 string npcName = tempData.list[i]["Character"] as string; string talkScript = (tempData.list[i]["TalkScript"] as string).Replace("/", ","); string division = tempData.list[i]["Division"] as string; string condition = tempData.list[i]["Condition"] as string; // 추출한 정보를 Manager로 전송하여 처리 switch (division) { case "x": // 별다른 이벤트가 없이 대사만 처리. GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); break; case "item": // 얻는 아이템의 이름 확인 string itemName = tempData.list[i]["Param"] as string; // 이 아이템을.. AllConditions conditions = Resources.Load <AllConditions>("AllConditions"); foreach (Condition tempCondition in conditions.conditions) { // 이전에 아이템을 얻은적이 있는지 확인 if (tempCondition.description == condition) { // 이전에 얻은 아이템이면.. if (tempCondition.satisfied == true) { // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); } // 이전에 얻은 적이 없다면.. else { // 아이템을 획득하였음을 기록 tempCondition.satisfied = true; // 실제 아이템을 획득 ContentScript tempcontent = GameObject.FindObjectOfType <ContentScript>(); string itemID = tempcontent.GetIDByName(itemName); tempcontent.GetItem(itemID); // 획득한 아이템에 대한 대사 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem(itemName, tempcontent.GetExpByName(itemName), talkScript, null); } break; } } break; case "character": // 얻는 정보의 이름 확인 string infoName = tempData.list[i]["Param"] as string; // 이 정보를.. conditions = Resources.Load <AllConditions>("AllConditions"); foreach (Condition tempCondition in conditions.conditions) { // 이전에 정보를 얻은적이 있는지 확인 if (tempCondition.description == condition) { // 이전에 얻은 정보이면.. if (tempCondition.satisfied == true) { // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); } // 이전에 얻은 적이 없다면.. else { // 정보를 획득하였음을 기록 tempCondition.satisfied = true; // 해당 아이템을 획득 DocumentCharacterManager tempDocument = GameObject.FindObjectOfType <DocumentManager>().character; CharacterSlot tempSlot = tempDocument.GetSlot(npcName); tempSlot.characterExp += "------------------\n"; tempSlot.characterExp += infoName + "\n"; tempDocument.CharacterKnow(npcName); // 대사 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("기 록", infoName, talkScript, null); } break; } } break; case "tutorial": // 이 정보를.. conditions = Resources.Load <AllConditions>("AllConditions"); foreach (Condition tempCondition in conditions.conditions) { // 이전에 정보를 얻은적이 있는지 확인 if (tempCondition.description == condition) { // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); // 정보를 획득하였음을 기록 tempCondition.satisfied = true; break; } } break; } } } isTouch = false; conTouch = null; }
public void LoadData() { // 이전의 위치로 플레이어를 이동 FindObjectOfType <NewPlayer>().transform.position = new Vector3((float)saveData.tempData.posX, (float)saveData.tempData.posY, (float)saveData.tempData.posZ); // 이전의 미션으로 현재 미션을 갱신 FindObjectOfType <MissionScript>().SetMission(saveData.tempData.mission); // 이전 stage로 현재 위치를 갱신 stage = saveData.tempData.stage; // 최초 맵 Active stageObject.Find(stage.ToString()).gameObject.SetActive(true); // 이전의 상태로 진행상태를 갱신 AllConditions allConditions = Resources.Load <AllConditions>("AllConditions"); for (int i = 0; i < allConditions.conditions.Length; i++) { allConditions.conditions[i].satisfied = saveData.tempData.conditionsCheck[i]; } // 이전의 상태로 인벤토리 정보를 갱신 ContentScript inventory = FindObjectOfType <ContentScript>(); for (int i = 0; i < saveData.tempData.itemsCheck.Count; i++) { for (int j = 0; j < saveData.tempData.itemsCheck[i].count; j++) { inventory.GetItem(saveData.tempData.itemsCheck[i].id); } } // 이전의 상태로 문서단서 정보를 갱신 DocumentInformationManager information = FindObjectOfType <DocumentManager>().information; for (int i = 0; i < saveData.tempData.infosCheck.Count; i++) { if (saveData.tempData.infosCheck[i]) { information.KnowNewInfoByIndex(i); } } // 이전의 상태로 인물단서 정보를 갱신 DocumentCharacterManager character = FindObjectOfType <DocumentManager>().character; for (int i = 0; i < saveData.tempData.charsCheck.Count; i++) { CharacterSlot slot = character.GetSlot(saveData.tempData.charsCheck[i].name); slot.CharacterKnow(false); slot.characterExp = saveData.tempData.charsCheck[i].exp; } // 이전의 상태로 사운드 상태를 변경 StaticInfoForSound.con_BGM_Audio = GameObject.Find(saveData.tempData.conBgmSourceName).GetComponent <AudioSource>(); if (saveData.tempData.conBgmClipName != "") { StaticInfoForSound.con_BGM_Audio.clip = Resources.Load <AudioClip>("AudioResource/BGM/" + saveData.tempData.conBgmClipName); StartCoroutine(SoundStart()); } // etc isCanSave = saveData.tempData.isCanSave; isDay20 = saveData.tempData.isDay20; if (isDay20) { if (slot != null) { slot.informationName = infoName; slot.informationExp = infoExp; slot.informationImage = infoImage; } if (clue != null) { clue.informationName = infoName; clue.informationExp = infoExp; clue.informationImage = infoImage; clue.transform.Find("Known").GetComponent <Image>().sprite = infoImage; } } isOnBackGarden = saveData.tempData.isOnBackgarden; if (isOnBackGarden) { footSource.clip = footClip; footSource.Play(); } isFindBirthClue = saveData.tempData.isFindBirthClue; if (isFindBirthClue == false) { foreach (GameObject hideObject in hideObjects) { hideObject.SetActive(false); } } isGetEar = saveData.tempData.isGetEar; if (isGetEar) { ear.SetActive(false); } isGetHair = saveData.tempData.isGetHair; if (isGetHair) { hair.SetActive(false); } isGetSpoon = saveData.tempData.isGetSpoon; if (isGetSpoon) { spoon.SetActive(false); } isOnCriminalLine = saveData.tempData.isOnCriminalLine; if (isOnCriminalLine) { criminalLine.SetActive(true); } isOnLibraryLine = saveData.tempData.isOnLibraryLine; if (isOnLibraryLine) { libraryLine.SetActive(true); } isLibraryNpcOut = saveData.tempData.isLibraryNpcOut; if (isLibraryNpcOut) { libraryNpc.position = new Vector3(libraryNpcNewPos.position.x, libraryNpcNewPos.position.y, libraryNpcNewPos.position.y); } isCustomerNotDrunken = saveData.tempData.isCustomerNotDrunken; if (isCustomerNotDrunken) { customerNpc.position = new Vector3(npcNewPos.position.x, npcNewPos.position.y, npcNewPos.position.y); customerNpc.Find("Sprite").GetComponent <SpriteRenderer>().sprite = npcNewSprite; npcDrunkenReaction.SetActive(false); } isPoliceWallRemove = saveData.tempData.isPoliceWallRemove; if (isPoliceWallRemove) { policeWall.SetActive(false); } isLibraryTempRemove = saveData.tempData.isLibraryTempRemove; if (isLibraryTempRemove) { libraryTemp.SetActive(false); } }
// ===================================================== private function =========================================================== // 지정된 TouchPoint 최소 관찰 시간 제어 IEnumerator TimeCounting(TouchPointScript conTouch) { float touchPointTime = 0.0f; // 1초동안 TouchPoint를 돋보기로 보아야 관찰한것으로 인정 while (touchPointTime < 1.0f) { touchPointTime += Time.deltaTime; yield return(null); } // 우선 우유배달소년만 다르게 작동되므로 따로 하드코딩.. 시간이 없다.. if (conTouch.nPCSpecialWork == TouchPointScript.NPCSpecialWork.MILKBOY) { canLook = false; GameObject.FindObjectOfType <ObservationManager>().GetItem("기 록", "흉터 같은 게 있다. 좀 갈라진 것 같다…?", "", GameObject.Find("07_AfterFindScar").GetComponent <ReactionCollection>()); } else { canLook = true; // 해당 이벤트들을 처리 ParsingData tempData = Resources.Load("CSVData/All Observation List Asset") as ParsingData; for (int i = 0; i < tempData.list.Count; i++) { // 이벤트를 찾아서.. if (tempData.list[i]["ID"] as string != conTouch.ID) { continue; } // 이 이벤트에서 정보들을 추출 string npcName = tempData.list[i]["Character"] as string; string talkScript = (tempData.list[i]["TalkScript"] as string).Replace("/", ","); string division = tempData.list[i]["Division"] as string; string condition = tempData.list[i]["Condition"] as string; // 추출한 정보를 Manager로 전송하여 처리 switch (division) { case "x": // 별다른 이벤트가 없이 대사만 처리. GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); break; case "item": // 얻는 아이템의 이름 확인 string itemName = tempData.list[i]["Param"] as string; // 이 아이템을.. AllConditions conditions = Resources.Load <AllConditions>("AllConditions"); foreach (Condition tempCondition in conditions.conditions) { // 이전에 아이템을 얻은적이 있는지 확인 if (tempCondition.description == condition) { // 이전에 얻은 아이템이면.. if (tempCondition.satisfied == true) { // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); } // 이전에 얻은 적이 없다면.. else { // 아이템을 획득하였음을 기록 tempCondition.satisfied = true; // 실제 아이템을 획득 ContentScript tempcontent = GameObject.FindObjectOfType <ContentScript>(); string itemID = tempcontent.GetIDByName(itemName); tempcontent.GetItem(itemID); // 획득한 아이템에 대한 대사 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem(itemName, tempcontent.GetExpByName(itemName), talkScript, null); } break; } } break; case "character": // 얻는 정보의 이름 확인 string infoName = tempData.list[i]["Param"] as string; // 이 정보를.. conditions = Resources.Load <AllConditions>("AllConditions"); foreach (Condition tempCondition in conditions.conditions) { // 이전에 정보를 얻은적이 있는지 확인 if (tempCondition.description == condition) { // 이전에 얻은 정보이면.. if (tempCondition.satisfied == true) { // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); } // 이전에 얻은 적이 없다면.. else { // 정보를 획득하였음을 기록 tempCondition.satisfied = true; // 해당 아이템을 획득 DocumentCharacterManager tempDocument = GameObject.FindObjectOfType <DocumentManager>().character; CharacterSlot tempSlot = tempDocument.GetSlot(npcName); tempSlot.characterExp += "------------------\n"; tempSlot.characterExp += infoName + "\n"; tempDocument.CharacterKnow(npcName); // 대사 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("기 록", infoName, talkScript, null); } break; } } break; case "tutorial": // 이 정보를.. conditions = Resources.Load <AllConditions>("AllConditions"); foreach (Condition tempCondition in conditions.conditions) { // 이전에 정보를 얻은적이 있는지 확인 if (tempCondition.description == condition) { // 대사만 처리 GameObject.FindObjectOfType <ObservationManager>().GetItem("", "", talkScript, null); // 정보를 획득하였음을 기록 tempCondition.satisfied = true; break; } } break; } } } }