Skip to content

UnityEngine

게임을 만들어보자

네트워크 연결 체크

by CroitzK posted Mar 26, 2019 Views 5 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
네트워크 연결 체크하기 

C#에서 네트워크이 연결되어 있는지 체크하기 위해서는 NetworkInterface 클래스 (System.Net.NetworkInformation 네임스페이스) 에 있는 GetIsNetworkAvailable() 메서드를 호출하면 된다. 이 메서드는 네트워크가 연결되어 있으면 true를 리턴하는데, 여기서의 네트워크 연결은 로컬 네트워크로만 연결된 경우도 포함한다. 즉, 인터넷으로 연결되진 않았지만, 로컬 네트워크 상에만 있는 경우도 네트워크가 연결되었다고 판단한다. 

예제

// using System.Net.NetworkInformation;
bool connected = NetworkInterface.GetIsNetworkAvailable(); 



네트워크 연결 상태 체크하기 

네트워크가 종종 끊기는 경우 네트워크 상태를 체크할 필요가 있다. 네트워크 체크는 NetworkChange 클래스 (System.Net.NetworkInformation 네임스페이스)의 NetworkAvailabilityChanged 이벤트를 사용하여 모니터링 할 수 있는데, 이 이벤트의 이벤트핸들러에 전달되는 NetworkAvailabilityEventArgs 파라미터의 IsAvailable 속성을 체크하면 네트워크가 다운되었는지, 다시 돌아왔는지를 체크할 수 있다. 

예제

// using System.Net.NetworkInformation;
// ne = NetworkAvailabilityEventArgs 파라미터
NetworkChange.NetworkAvailabilityChanged += (s, ne) =>
{
    if (ne.IsAvailable)
    {
        Debug.WriteLine("Network이 돌아옴");
    }
    else
    {
        Debug.WriteLine("Network이 다운됨");
    }
};



인터넷 연결 체크하기 

위의 [네트워크 연결 체크하기]에서 사용된 GetIsNetworkAvailable() 메서드는 네트워크가 로컬 네트워크라도 연결되어 있으면 true를 리턴하는데, 많은 경우 개발자가 원하는 것은 머신이 인터넷에 연결되어 있는지를 체크하는 것이다. 인터넷에 연결되어 있고, 인터넷이 정상적으로 동작하는지를 체크하기 위해, 외부 유명 웹사이트를 접속해 보는 방식을 사용할 수 있다. 예를 들어, microsoft.com 혹은 google.com 등을 접속해 보고 만약 에러가 없으면 인터넷이 연결되어 있다고 판단하는 것이다.

마이크로소프트는 이러한 네트워크 체크를 위한 특별한 웹사이트를 만들었는데, Vista 이상의 윈도우즈 운영체제에서 실제 네트워크 체크를 위해 이 방식을 사용한다. NCSI (Network Connectivity Status Indicator)이라고 불리우는 이 기능은 HTTP GET 을 사용하여 www.msftncsi.com/ncsi.txt 을 가져올 수 있는지 체크하고, 또한 dns.msftncsi.com 이라는 호스트의 IP가 131.107.255.255 이 되는지 체크하게 된다. 아래 예제는 이러한 NCSI 방식을 사용하여 인터넷 연결 여부를 체크하는 코드이다. 


예제

public bool IsInternetConnected()
{
    const string NCSI_TEST_URL = "http://www.msftncsi.com/ncsi.txt";
    const string NCSI_TEST_RESULT = "Microsoft NCSI";
    const string NCSI_DNS = "dns.msftncsi.com";
    const string NCSI_DNS_IP_ADDRESS = "131.107.255.255";

    try
    {
        // Check NCSI test link
        var webClient = new WebClient();
        string result = webClient.DownloadString(NCSI_TEST_URL);
        if (result != NCSI_TEST_RESULT)
        {
            return false;
        }

        // Check NCSI DNS IP
        var dnsHost = Dns.GetHostEntry(NCSI_DNS);
        if (dnsHost.AddressList.Count() < 0 || dnsHost.AddressList[0].ToString() != NCSI_DNS_IP_ADDRESS)
        {
            return false;
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex);
        return false;
    }

    return true;
}



Public IP 체크 

자신의 컴퓨터의 인터넷 상의 주소 즉 Public IP 를 알아내기 위해서는 통상 http://whatismyip.com 과 같은 웹사이트를 방문하면 된다. 만약 C# 에서 프로그래밍 방식으로 Public IP를 얻기 위해서는 checkip.dyndns.org 와 같이 IP 주소만을 간단하게 리턴하는 사이트를 방문해서 결과를 파싱하는 방식을 사용한다. 아래 예제는 이러한 사이트를 방문해서 Public IP를 얻는 예제이다. 

예제

// Public IP 주소 구하기
WebClient wc = new WebClient();
string result = wc.DownloadString("http://checkip.dyndns.org");
string ip = result.Split(':')[1].Split('<')[0].Trim();

Console.WriteLine(ip);



출처: http://www.csharpstudy.com/Tip/Tip-network-connectivity.aspx
?

자동업데이트 구현 관련

by CroitzK posted Mar 26, 2019 Views 5 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

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

링크1: https://honsal.blogspot.com/2016/05/c_17.html


링크2: https://blog.naver.com/thefeel777/130097883405

?

실제 IP Address 값 취득방법

by CroitzK posted Mar 26, 2019 Views 3 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

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

        public string GetExternalIp()
        {
            IPAddress externalIp = null;
            try
            {
                string Ip = "http://www.whatismyip.com/automation/n09230945.asp";
                WebClient wc = new WebClient();
                UTF8Encoding utf8 = new UTF8Encoding();
                string requestHtml = string.Empty;
                requestHtml = utf8.GetString(wc.DownloadData(Ip));
                externalIp = IPAddress.Parse(requestHtml);

                return externalIp.ToString();
            }
            catch (Exception ex)
            {
                KMLog.SetLog("MainForm Exception", "GetExternalIp() ", ex.Message);
                return null;
            }
        }

?

Mac Address & IP Address 값 취득

by CroitzK posted Mar 26, 2019 Views 6 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
# Mac Address 취득 코드
private static string GetMacAddress()
{
return NetworkInterface.GetAllNetworkInterfaces()[0].GetPhysicalAddress().ToString();
}

private static string MacFormat(string str)
{
    string mac = "";
    char[] chrArr = str.ToCharArray();
    for (int i = 0; i < chrArr.Length; i++)
    {
         if (i % 2 == 0)
         {
             mac += chrArr[i].ToString();
         }
         else
         {
             mac += chrArr[i].ToString();
             if (i != chrArr.Length - 1)
             mac += ":";
         }
    }
    return mac;
}


# IP Address 취득 코드
private static string GetIPAddress()
{
string ip="";
IPAddress[] host = Dns.GetHostAddresses(Dns.GetHostName());
foreach(var item in host)
{
if(item.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
ip = item.ToString();
}
}
return ip;
}

[출처: https://m.blog.naver.com/PostList.nhn?blogId=leegh1587]
?

C# Thread.Sleep() 대신 사용하기 좋은 Delay() 함수

by CroitzK posted Mar 16, 2019 Views 5 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

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

private static DateTime Delay(int MS)

{

DateTime ThisMoment = DateTime.Now;

TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS);

DateTime AfterWards = ThisMoment.Add(duration);

while (AfterWards >= ThisMoment)

{

System.Windows.Forms.Application.DoEvents();

ThisMoment = DateTime.Now;

}

return DateTime.Now;

}



출처: https://bananamandoo.tistory.com/27 [바나나만두의 넋두리]
?

2D 캐릭터 Sprite의 움직임 효과 구성.

by CroitzK posted Aug 05, 2018 Views 258 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

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

C# - 2D캐릭터 Sprite의 움직임효과 구성하기

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

public class PlayerMovement : MonoBehaviour {

    Rigidbody2D rbody;
    Animator anim;

    // Use this for initialization
    void Start () {
        rbody = GetComponent<Rigidbody2D> ();
        anim = GetComponent<Animator> ();
    }
    
    // Update is called once per frame
    void Update () {
        Vector2 Movement_Vector = new Vector2 (Input.GetAxisRaw ("Horizontal"), Input.GetAxisRaw ("Vertical"));

        if (Movement_Vector != Vector2.zero) {
            anim.SetBool ("isWalking", true);
            anim.SetFloat ("Input_x", Movement_Vector.x);
            anim.SetFloat ("Input_y", Movement_Vector.y);
        } else {
            anim.SetBool ("isWalking", false);
        }

        rbody.MovePosition (rbody.position + Movement_Vector * Time.deltaTime * 3);
    }
}


!코드내용 자체 해석


Rigidbody2D , Animator 참조 선언.

​Start() 함수에서 컴포넌트 정보를 취득.

Update() 함수에서 ​Vector2 참조 선언 Input.GetAxisRaw 옵션으로, Horizontal(수평), Vertical(수직) 입력값의 취득.

취득한 Animator 오브젝트에서 isWalking, Input_x, Input_y 값에 따른 Vector2 값을 취득한 다음 Bool, Flaot 값을 대입한다.

Rigidbody2D 오브젝트의 이동위치를 Rigidbody2D 오브젝트의 현재위치 + Vector2 값 * Time.deltaTime (시간차?) 값으로. 

 

TAG •
?

C# Code List

by CroitzK posted Aug 05, 2018 Views 438 Likes 0 Replies 1
?

단축키

Prev이전 문서

Next다음 문서

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

C# Code List



1) 게임종료 코드


      public void GameExit() { //함수의 명칭은 적절하게 설정하면 된다. 
        UnityEditor.EditorApplication.isPlaying = false; //유니티 에터상에서 게임의 실행을 중단하는 옵션이라 추측한다.
        Application.Quit(); //문장그대로 어플리케이션을 닫는것 같다.
    }




2) Scene전환 코드

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class NewGame : MonoBehaviour {

    public void LoadByIndex(int sceneIndex){
        SceneManager.LoadScene (sceneIndex);
    }
}


3) string 변수로 keyboard의 key값 읽어오기.

 string RunKey;

if (Input.GetKey (RunKey)){}

//주의 UnityEditor에서 대문자로 Input값을 입력하면 컴파일 에러난다.ex) 'x'(O) 'X'(X)


4) Input.getKey/getKeyUp/getKeyDown 이란?

Input.GetKey([KeyCode]) : 이녀석은 Turbo Key(?) 효과가 있다.

Input.GetKey​Down([KeyCode]) : 1회 타이핑 또는 누르고 있는 효과를 볼수 있다.

Input.GetKeyUp([KeyCode]) : 위와 동일한듯 하다.



TAG •
?

목록
Board Pagination Prev 1 Next
/ 1

Recent Comment

Counter Info

방문자수

전체 : 10,911
오늘 : 14
어제 : 272

페이지뷰

전체 : 1,237,476
오늘 : 52
어제 : 882

COPYRIGHT 2009 by AGMServer.com

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소