02/22 본캠프 #41

guno park·2024년 2월 22일
0

본캠프

목록 보기
41/77

개인과제

트러블슈팅

씬 run하면 계속 not Loaded뜸.

문제 원인 : Goal 스크립트에 씬 로드하는 부분에서 대상 특정을 하지 않아 로드가 계속 반복되는 현상이었음
문제 해결 : 대상을 특정하도록 변경하는 것으로 해결

플레이어 Spawn, Die 애니메이션 실행 시 캐릭터가 움직임

따로 뭔가를 걸어준건 아니라서 움직이는게 당연하고, 움직임을 제한하는 3가지 방법을 적는다.

  1. 애니메이션 이벤트로 매개변수를 줘서 제어하는 방식
  2. 애니메이터의 파라미터 값을 가져와서 Input을 잠궈주는 식
  3. 현재 실행중인 애니메이션을 가져와서 프레임 따져서 현재 종료됬는지 체크하는 방법
  • 코드가 길어질수 있음.
private void FixedUpdate()
    {
        if ((_player.Animator.GetCurrentAnimatorStateInfo(0).IsName("Spawn") &&
            _player.Animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f)||
            (_player.Animator.GetCurrentAnimatorStateInfo(0).IsName("Die") &&
             _player.Animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f))
        {
            return;
        }
        Move();
    }
//Animator.GetCurrentAnimatorStateInfo(0).normalizedTime //현재 애니메이션의 진행 %를 반환함,

코딩 팁

화면 전환하기 팁

씬 전환

함수 1 + 매개변수 1 해서 씬 전환을 하는 것이 편함
다양한 버튼이 있어도 스크립트 하나로 처리 가능

public class Goal : MonoBehaviour
{
   public int StageIndex;
   private void OnTriggerEnter2D(Collider2D other)
   {        
   	SceneManager.LoadScene($"Stage{StageIndex}");                    
   }
}

이런 느낌으로 작성해서 하나의 스크립트를 재사용할 수도 있음.

레이어 전환

패널들이 여러개 있을 경우 각 레이어 단위로 불러오는 기능이 있음. 씬을 계속 전환하면 UI전환 시 맞추기 힘들다.
playerprefs로 마지막 씬이나 마지막 UI를 저장해두고(빠르게 처리할 때)

데이터 통신하기

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DataLoad : MonoBehaviour
{
    public class Data_get
    {
        //json파일이랑 이름 맞춰야됨.
       public string version;
       public string key;
       public string info;
    }//저장용 클래스를 따로 파일로 만들어주는게 관리하기 좋음. 딱히 스태틱으로 할 필요도 없음.

    public Data_get DataGet;
    private void Start()
    {
        StartCoroutine(WWW_Get());
    }

    IEnumerator WWW_Get()
    {
        string url = "https://wou6c330.mycafe24.com/test.php";
        
        WWWForm form = new WWWForm();
        form.AddField("send","box");
        form.AddField("version","box2");
        WWW www = new WWW(url, form);

        yield return www;//서버에서 내려받을때까지 기다림.
        
        Debug.Log(www.text);
        // DataGet = JsonUtility.FromJson<Data_get>(www.text);
        // print(DataGet.version); //Debug.Log가 정석이지만 내용은 똑같음.
        yield break;
    }
}

post방식은 서버에 저장되어있는 key값에 value를 추가해준다.
통신할 파일은 www폴더하단에 넣어줘야됨. 폴더의 이름을 바꾸면 안된다.

0개의 댓글