레이블이 c#인 게시물을 표시합니다. 모든 게시물 표시
레이블이 c#인 게시물을 표시합니다. 모든 게시물 표시

2016년 2월 13일 토요일

유니티 기본 화면 해상도 설정

코드로 화면 해상도를 설정하기 전에 기본적으로 카메라와 해상도를 설정 할 수 있다.
물론 모바일 기기 각각의 크기에 따른 화면 해상도를 바꾸기 위해서는

Screen.SetResolution(Screen.width, Screen.width, true);

함수를 이용해서 코드를 짠다면 가능하겠지만 일단 기본적으로 처음에
프로젝트를 만들고 설정을 해주지 않으면 사이즈가 임의로 잡혀버려서
모바일에 포팅 할 경우 화면이 잘려보이게 된다.

아주 쉽게 변경이 가능하다 아래 그림처럼 Game 탭에서 바로 아래 메뉴바를
클릭하면 여러 사이즈의 화면 해상도가 변경이 가능해진다.

2015년 9월 13일 일요일

ShiningLoreLauncher 버전 0.4 업데이트

기존에 런처에서 게임 스타트 버튼 누르면 cmd창 뜨면서 게임이 실행되는데
이유는 cmd명령어로 프로그램들을 실행시킨다.
분석해보니 코드상으로도 start 명령어는 모두 cmd 명령어를
거쳐서 실행된다.

근데 문제가 게임을 실행하고 0.5초간 딜레이를 줬다가 프로세스
리스트에서 cmd를 찾아 종료시키는 방식을 사용했는데 크나큰 오류가 생겼다.
유저들 일부가 위 문제로 게임실행에 에로사항이 꽃 피었는데
그 버그는 바로... 게임이 실행안되고 cmd창마저 종료가 안되던것!

게임 실행 명령어 입력하고 쓰레드로 0.5초 딜레이를 주고 그 다음
프로세스리스트를 검색하여 cmd를 종료하는 방식을 사용하였는데
내 생각에는 0.5초 지난 후 cmd가 프로세스 리스트에 없고 킬 명령 이후 cmd가
프로세스 리스트에 올라가서 킬 명령 수행이후 아무 처리가 되지 않아 발생한 것
으로 판단이 되는데... 확실한건 잘 모르겠다.... 으으..

아무튼 위 버그를 해결하고자
msdn이랑 포스팅들을 찾아 본 결과 cmd에서 외부 프로그램 실행 한 다음
cmd를 지정한 딜레이 후 종료해주는 함수도 있었고
cmd창 자체가 뜨지 않도록 숨기는 기능도 있어서 이걸로 해결했다.

2015년 9월 2일 수요일

ShiningLoreLauncher 0.3ver 버전 업데이트

기존과 달라진점

1.dns to ip 기능 추가

기존에는 아이피 자체를 입력해놔서 아이피가 변경되면 런처도 새로 배포해야했지만
이번 업데이트때 dns값을 입력해두고 dns를 아이피로 자동으로 바뀌게 하여
서버 컴퓨터 아이피가 바뀌더라도 자동으로 서버 검색이 가능해짐

2. 파일 변조 확인 기능 추가

md5 해시값을 이용하여 서버와 클라이언트간의 해시값 대조로
위변조 방지 기능을 삽입하여 게임 실행할 때 검사를 한다.
옛날 게임이라 클라이언트 추출 및 변경이 쉬웠고 클라이언트에서만 변경이 되면
사기 플레이가 가능할 정도의 문제가 발생하기도 하였는데 저번에 16진수 코드로
추출과 변조를 1차로 방해하고 이번에는 런처에서 실행 될 때 위변조 체크를 하여
사실상 일반인들은 클라이언트 개조가 불가능해졌다.

3. 프로세스 리스트를 확인하여 여러개 게임 실행 방지

프로세스 리스트를 불러와 읽은다음 해당 프로그램이 여러개 실행되면
2개의 클라이언트 빼고 3개째 부터 강제 종료시키는 기능을 추가하였다.
마찬가지로 옛날 게임이다보니 여러개의 게임이 실행 가능해서
계정만 많으면 다중 접속이 가능했는데 이 점을 런처에서 제어하도록 추가하였다.

c# 다른 클래스에서 폼 이벤트 조작방법

c#에서는 다른 클래스에서 메인 폼의 버튼이나 라벨, 혹은 또 다른 클래스의 함수를 제어하기 위해서 델리게이트라는 것을 사용한다. c와 c++은 포인터로 조작하지만 c#은 델리게이트라는 포인트형 함수같은걸 사용한다.

class1 에서 form1 에 있는 라벨 텍스트값을 조작해보는 방법을 간단하게 소개해보겠다.

class1
{
  //메인 폼에 있는 텍스트라벨을 갱신하기 위해 델리게이트 사용
  public delegate void uptext(string upLabelText); //델리게이트 선언
  public event uptext ReturnToText; //델리게이트 이벤트 선언

  private void labelToText()
  {
    ReturnToText("연결이 잘 되나 보자");//이벤트 호출
  }
}

form1
{
  public Form1()
  {
    InitializeComponent();
    class1 cl = new class1(); //class1을 동적할당
    cl.ReturnToText += new cl.uptext(UpdateText_set);//이벤트 핸들러 연결

    cl.labelToText();//이벤트 호출 값을 지닌 함수 호출
  }
  private void UpdateText_set(string upLabelText)
  {
    UpdateText.Text = upLabelText;//라벨의 텍스트 값 변경
  }
}

이걸 잘 응용하면 폼과 폼 끼리 클래스와 클래스끼리 폼과 클래스끼리 데이터를 주고 받을 수 있으니 응용하기 나름인 것 같다.
위 방법을 응용해서 ShiningLoreLauncher 프로그램에서 업데이트 할 때 업데이트 클래스에서 출력되는 이벤트 텍스트 값을 메인 폼에 출력할 수 있었다.

2015년 8월 29일 토요일

ShiningLoreLauncher 0.2ver 업데이트

c#을 이용하여 제작한 샤이닝로어 접속 런처다.

주로 사용한 클래스와 함수는 다음과 같다.

파일 다운로드 및 서버와 클라이언트 파일 비교를 위해 사용한 것
WebClient - 여러 기능이 있는데 업로드와 다운로드 그리고 동작이벤트 값을 담당.
DownloadProgressChanged  - 다운로드 되는동안의 이벤트 값을 처리한다. 다운로드 되는 도중의 퍼센테이지나 다운로드하는 파일의 용량 및 현재 다운로드되고 있는 파일 크기를 확인 할 수 있다.
DownloadFileAsync - url을 이용하여 외부 서버 파일을 비동기적으로 다운로드 가능하다.
DownloadString - url을 이용하여 외부 서버 파일을 텍스트 형식으로 읽어온다. 나는 텍스트 파일로 된 버전체크 파일을 읽어서 가져와 변환한 다음 클라이언트에 있는 버전과 비교하는데 사용하였다.

클라이언트의 버전 저장값과 모드 저장값을 읽고 쓰기 위해 사용한 것
StreamWriter - 파일을 쓰기 위해 사용한다.
StreamReader - 파일을 읽기 위해 사용한다.

파일의 존재 유무 및 용량 확인 및 생성을 위해 사용
FileInfo - 파일의 존재유무나 파일의 용량 확인
DirectoryInfo - 폴더 생성을 위해 사용한다.

버전 체크기능 추가
창모드/전체화면 설정 저장 기능 추가
자동 업데이트 기능 추가

창모드와 전체화면 세팅 저장값이다. 0과 1로 간단하게 체크

런처를 실행 하였을때 버전값이 다르거나 혹은 Data폴더가 없을 경우
서버에 접속해서 파일을 다운로드 시작한다. 다운로드 되는 동안에는
옵션과 게임 시작버튼을 비활성화 시켰다. 

다운로드 완료되었을때 비활성화 된 버튼 활성화

서버와 클라이언트 버전이 같을 경우 최신버전이라는 문구가 나온다.



2015년 8월 22일 토요일

ShiningLoreLauncher, SopNameChange 프로그램

게임 프리서버 운영하다보니 하도 옛날게임이라

데이터 소스를 추출해서 보면서 부심 부리는 사람 때문에

클라이언트를 조금 조작했더니 기존에 다른 사람이 만든

접속 런처 프로그램이 먹히질 않는다.

매번 패치할 때 마다 바로가기 만들어주기도 귀찮고

해상도 설정도 자유롭지 못해 플레이어들이 불편함을 느끼는

이중고에 답답해서 하나 제작했다.

프로그램 이름은 ShiningLoreLauncher

로고는 플레이하는 유저가 만들어준거 로고에 삽입된

글자가 너무 웃겨서 그냥 사용하기로 했다..ㅋㅋㅋ




cmd를 실행해서 도스 명령어로 프로그램을 실행해준다.

옵션에 있는 창모드는 기본 윈도우에서 많이 사용하는 win, full을

프로그램 시작할때 체크 여부에 따라 다르게 입력시켰다.

그리고 해상도.. 저 게임의 해상도는 레지스트리에 가서 수정해야한다.

라디오 버튼 누르는거에 따라 레지스트리 값이 바뀐다.

바이너리 코드 읽어와서 하는것도 아닌데 거참..

유니티 c# 스크립트 이후 처음으로 정식 c#을 써 보는지라

고작 저거 만드는데 5시간 걸렸다...

그리고 두번째 프로그램

데이터 추출을 막기위해 클라이언트와 프로그램 확장자 등을 바꾸다보니

예전 수정툴로는 그 파일들을 열 수 없어서 패치 할 때마다

원본 변형전 프로그램으로 수정하고 다시 파일을 변경을 매번 하니 짜증나서

자동으로 바꿔주도록 만들었다.







데이터 파일들이 있는 폴더에 넣고 실행한 다음 바꾸기를 누르면

자동으로 특정 파일들을 변형시켜준다.



잘 생각해보면 사소한 귀찮음을 프로그램 만들어서 해결할 수 있다는게

너무 좋다...크..