/// <summary> /// 캐릭터 스킨을 설정된 캐릭터 타입에 따라 초기화한다. /// </summary> /// <param name="characterType">캐릭터 타입</param> public void InitCharacter(EPlayerCharacterType characterType) { switch (characterType) { case EPlayerCharacterType.archer: for (int i = 0; i < warriorCharacters.Length; i++) { SetArcharSkin(archarSkinNumber); } break; case EPlayerCharacterType.warrior: for (int i = 0; i < archarCharacters.Length; i++) { SetWarriorSkin(warriorSkinNumber); } break; case EPlayerCharacterType.none: for (int i = 0; i < warriorCharacters.Length; i++) { SetArcharSkin(archarSkinNumber); } break; default: Debug.Assert(false, "캐릭터 선택이 안됨"); break; } }
/// <summary> /// 레벨과 캐릭터 타입에 따라 스텟을 설정한다. /// </summary> /// <param name="characterType">캐릭터 타입</param> /// <param name="level">설정 할 레벨(default : 1)</param> public void SetCharacterStat(EPlayerCharacterType characterType, int level = 1) { if (level <= 0) // level이 0 이하이면 1로 바꿈 { level = 1; } this.level = level; if (characterType == EPlayerCharacterType.warrior) // 전사의 Default 값을 설정 { atk = 10 + (level * 10); // 공격력 설정 def = 10 + (level * 10); // 방어력 설정 moveSpeed = 1; // 이동 속도 설정 attackSpeed = 1; // 공격 속도 설정 hp = 100 + (level * 100); // 체력 설정 } else if (characterType == EPlayerCharacterType.archer) // 궁수의 Default 값을 설정 { atk = 20 + (level * 15); // 공격력 설정 def = 5 + (level * 10); // 방어력 설정 moveSpeed = 1; // 이동 속도 설정 attackSpeed = 1; // 공격 속도 설정 hp = 80 + (level * 80); // 체력 설정 } else { Debug.LogWarning("캐릭터의 Default 수치를 설정하지 못했습니다."); } }
/// <summary> /// MainScene이 켜지면 처음 세팅을 해준다. /// </summary> public void InitSetting() { defaultCharacterData = new UserData[characterCount]; Debug.Log("defaultCharacterIndex : " + characterIndex); // 캐릭터의 상태가 아무것도 없으면// 현재 캐릭타입 상태가 none일 경우 현재 타입을 Warrior로 변환한다. if (EPlayerCharacterType.none == PlayerInformation.userData.characterType) { currentCharacterType = EPlayerCharacterType.warrior; backButton.SetActive(false); } else { backButton.SetActive(true); } // 현재 캐릭터 상태가 archar일 경우 archar가 있는 곳으로 화면을 돌린다 if (EPlayerCharacterType.archer == PlayerInformation.userData.characterType) { currentCharacterType = EPlayerCharacterType.archer; OnClick_RightCharacterChoiceBtn(); } Debug.Log("chararcterIndex 333 : " + characterIndex); StartCoroutine(IInitSetting()); }
/// <summary> /// 캐릭터의 설명 창을 업데이트 한다. /// </summary> /// <param name="characterType">선택 할 캐릭터 타입</param> private void UpdateCharacterDescription(EPlayerCharacterType characterType) { CharacterData characterData = null; // 캐릭터 설명 창 업데이트 if (characterType == EPlayerCharacterType.warrior) { characterData = Resources.Load <CharacterData>(PathOfResources.warriorData); characterImage.sprite = Resources.Load <Sprite>(PathOfResources.warriorFaceImage); } else if (characterType == EPlayerCharacterType.archer) { characterData = Resources.Load <CharacterData>(PathOfResources.archarData); characterImage.sprite = Resources.Load <Sprite>(PathOfResources.archarFaceImage); } else { characterTypeText.text = ""; characterDescriptionText.text = ""; } characterTypeText.text = characterData.characterType; characterDescriptionText.text = characterData.characterDescription; PlayerInformation.userData.ChangeFaceImage(characterType); // 캐릭터 얼굴 이미지 바꾸기 // 캐릭터 스텟 창 UI 업데이트 //Debug.Log("hp : " + PlayerInformation.userData.hp + ", atk: " + PlayerInformation.userData.atk + ", def : " + PlayerInformation.userData.def + ", attack speed : " + PlayerInformation.userData.attackSpeed); hpSlider.value = PlayerInformation.userData.hp / defaulMaxHp; attackSlider.value = PlayerInformation.userData.atk / defaultMaxAtk; defenceSlider.value = PlayerInformation.userData.def / defaultMaxDef; attackSpeedSlider.value = PlayerInformation.userData.attackSpeed / defaultMaxAttackSpeed; }
/// <summary> /// 캐릭터가 존재하는지 체크한다. /// </summary> /// <param name="name">캐릭터 이름</param> /// <param name="characterType">캐릭터 타입</param> /// <returns>응답 메세지</returns> public IEnumerator ICheckCharacterExist(string name, EPlayerCharacterType characterType) { Debug.Log("4.3 characterType : " + characterType); WWWForm form = new WWWForm(); form.AddField("Name", name); form.AddField("Character_Type", (int)characterType); UnityWebRequest www = UnityWebRequest.Post(CHECK_IF_USER_CHARACTER_EXIST_URL, form); yield return(www.SendWebRequest()); if (www.isDone) { Debug.Log(" download handler : " + www.downloadHandler.text); JSONArray jsonArray = (JSONArray)JSON.Parse(www.downloadHandler.text); string message = jsonArray[0]["COUNT(User_Name)"]; if (message == "1") // 1이면 존재한다 { isExistCharacter[(int)characterType - 1] = true; Debug.Log("isExist 0 : " + isExistCharacter[0] + ", 1 : " + isExistCharacter[1]); } } }
/// <summary> /// 캐릭터 선택 창의 모든 UI를 새롭게 업데이트 한다 /// </summary> private void UpdateUIScreen() { UpdateButtonImage(); // 버튼 이미지 업데이트 currentCharacterType = (EPlayerCharacterType)characterIndex + 1; UpdateDefaultCharacterInformation(); // 캐릭터의 기본 정보로 업데이트 UpdateCharacterDescription(currentCharacterType); // 캐릭터 설명 창 업데이트 Debug.Log("characterIndex : " + characterIndex + " current character Type : " + currentCharacterType); // 캐릭터 타입이 이미 설정 되어 있으면 Debug.Log("현재 플레이어 상태 : " + PlayerInformation.userData.characterType + ",픽창 캐릭 상태 : " + currentCharacterType);; }
/// <summary> /// 파라미테 값에 있는 데이터를 내부에 복사한다. /// </summary> /// <param name="data">복사할 유저 데이터</param> public void CopyData(UserData data) { name = data.name; id = data.id; exp = data.exp; hp = data.hp; def = data.def; atk = data.atk; moveSpeed = data.moveSpeed; attackSpeed = data.attackSpeed; gold = data.gold; crystal = data.crystal; level = data.level; characterType = data.characterType; Stamina = data.Stamina; }
/// <summary> /// 캐릭터 얼굴 이미지를 바꾼다. /// </summary> /// <param name="characterType">바꿀 캐릭터 타입</param> public void ChangeFaceImage(EPlayerCharacterType characterType) { switch (characterType) { case EPlayerCharacterType.archer: characterFaceIcon = Resources.Load <Sprite>(PathOfResources.archarFaceImage); break; case EPlayerCharacterType.warrior: characterFaceIcon = Resources.Load <Sprite>(PathOfResources.warriorFaceImage); break; case EPlayerCharacterType.none: break; default: Debug.Assert(false); break; } }
/// <summary> /// 유저의 캐릭터 데이터를 서버에서 불러와 플레이어 데이터에 저장한다. /// </summary> /// <param name="name">유저 이름</param> /// <param name="characterType">불러올 캐릭터 타입</param> /// <returns></returns> public IEnumerator ILoadCharacterDataFromServer(string name, EPlayerCharacterType characterType) { Debug.Log("코루틴 돌아감 ILoadUserDataFromServer"); WWWForm form = new WWWForm(); form.AddField("Name", name); form.AddField("Character_Type", (int)characterType); UnityWebRequest www = UnityWebRequest.Post(LOAD_CHARACTER_DATA, form); yield return(www.SendWebRequest()); if (www.isDone) { Debug.Log("유저 데이터를 받아옴 : " + www.downloadHandler.text); // 서버에서 받아온 데이터를 저장. JSONArray json = (JSONArray)JSON.Parse(www.downloadHandler.text); PlayerInformation.userData.name = json[0]["User_Name"]; //if (json[0]["Character_Type"] == EPlayerCharacterType.warrior.ToString()) //{ // PlayerInformation.userData.characterType = EPlayerCharacterType.warrior; //} //else if (json[0]["Character_Type"] == EPlayerCharacterType.archer.ToString()) //{ // PlayerInformation.userData.characterType = EPlayerCharacterType.archer; //} PlayerInformation.userData.hp = json[0]["HP"]; PlayerInformation.userData.atk = json[0]["ATK"]; PlayerInformation.userData.def = json[0]["DEF"]; PlayerInformation.userData.moveSpeed = json[0]["SPD_MOV"]; PlayerInformation.userData.attackSpeed = json[0]["SPD_ATK"]; PlayerInformation.userData.gold = json[0]["Gold"]; PlayerInformation.userData.crystal = json[0]["Crystal"]; PlayerInformation.userData.exp = json[0]["EXP"]; PlayerInformation.userData.level = json[0]["Level"]; PlayerInformation.userData.Stamina = json[0]["Stamina"]; } }