멍멍이네 블로그

유니티에서 드래그로 오브젝트 선택하는거 만들기 영상

 

출처 : https://www.youtube.com/watch?v=2wgeDQlwnQ0&list=PLm1w78-UUlMJ-S8Apf96YzzAaa2yfZzAx

이벤트 함수의 실행 순서

Unity 스크립팅시, 미리 정의된 순서대로 실행되는 많은 이벤트 함수가 있습니다. 아래에서는, 실행 순서를 설명합니다.

에디터

  • __ Reset : __ Reset은 개체가 처음 연결되었을 때 스크립트의 프로퍼티로 초기화하는 데 호출됩니다. Reset 명령을 실행했을 때도 마찬가지입니다.

첫 번째 씬 로드

이 함수는 씬이 시작되면 호출됩니다(씬의 각 오브젝트에 대해 한 번).

  • __ Awake : __이 함수는 항상 Start 함수의 이전 및 프리팹의 인스턴스화 직후에 호출됩니다. (만약 게임 오브젝트가 시작할 때 무효인 경우, 활성화되거나 연결된 하나의 스크립트 함수가 호출될 때까지, Awake는 호출되지 않습니다.)
  • __ OnEnable : __ (오브젝트가 활성화된 경우에만 호출됩니다): 이 함수는 오브젝트를 활성화 한 직후에 호출됩니다. 이것은 MonoBehaviour 인스턴스가 생성될 때, 예를 들어 레벨 로드 또는 스크립트 컴포넌트에 연결된 게임 오브젝트가 인스턴스화 될 때 발생합니다.

씬에 추가 된 오브젝트에서 모든 스크립트는 Start, Update 등기 기타 함수가 호출되기 전에 Awake와 OnEnable 함수가 호출되는 것에 주의하십시오. 당연히 오브젝트가 게임 플레이 중에 인스턴스화 되었을 때 강제로 호출할 수 없습니다.

첫 번째 프레임의 업데이트 전

  • __ Start : __ 스크립트의 인스턴스가 활성화되면 첫 번째 프레임의 업데이트 전에 Start가 호출됩니다.

씬에 추가된 오브젝트의 Start 함수는 모든 스크립트 Update 및 기타 함수가 호출되기 전에 호출됩니다. 당연히 오브젝트가 게임 플레이 중에 인스턴스화되었을 때 강제로 호출 할 수 없습니다.

프레임 사이

  • __ OnApplicationPause : __ 일반 프레임 업데이트 사이에서 pause가 탐지된 프레임의 끝에서 호출 됩니다. OnApplicationPause가 호출되면 추가 프레임이 발행되어, pause 상태를 나타내는 그래픽 인디케이터가 표시 됩니다.

업데이트 순서

게임 로직 인터랙션, 애니메이션, 카메라 위치 등을 추적하는 경우, 각종 이벤트를 사용할 수 있습니다. 일반적인 패턴은 Update() 함수 내에서 대부분의 작업을 수행하는 것입니다만, 다른 함수도 사용할 수 있습니다.

  • __ FixedUpdate : __ FixedUpdate()Update()보다 자주 호출되는 경우가 많습니다. 프레임 속도가 낮은 경우에는 프레임마다 여러 번 호출 할 수 있지만, 프레임 속도가 높을 경우 프레임간에 호출 할 수 없습니다. FixedUpdate() 직후에 모든 물리적 특성 계산 및 업데이트가 발생합니다. FixedUpdate()에서 이동 계산을 적용 할 때 Time.deltaTime 값을 곱할 필요는 없습니다. 이것은 프레임 속도와는 독립적으로 FixedUpdate()가 신뢰할 수있는 타이머에서 호출되기 때문 입니다.

  • __ Update : __ Update는 프레임마다 한 번씩 호출됩니다. 이것은 프레임의 업데이트에 대한 주요 기능입니다.

  • __ LateUpdate : __ LateUpdate()Update() 후 프레임마다 한 번씩 호출됩니다. Update()에서 수행되는 계산이 완료되면 LateUpdate() 함수가 시작 합니다. LateUpdate()의 일반적인 사용은 다음의 3인칭 카메라입니다. Update()에서 캐릭터를 이동하고 회전시킬 경우 LateUpdate()에서 카메라의 이동과 회전 계산을 수행할 수 있습니다. 이렇게하면 캐릭터가 카메라가 그 위치를 추적하기 전에 완전히 이동합니다.

렌더링

  • __ OnPreCull : __ 카메라가 씬을 추려내기 전에 호출됩니다. 컬링(Culling)하여 카메라에 어떤 오브젝트를 표시할 지가 결정됩니다. OnPreCull은 컬링이 발생하기 직전에 호출됩니다.
  • __ OnBecameVisible / OnBecameInvisible : __ 오브젝트가 카메라에 표시되거나 표시되지 않게 될 때 호출됩니다.
  • __ OnWillRenderObject : __ 오브젝트가 표시되면 각 카메라에 __ 한 번 __ 호출됩니다.
  • __ OnPreRender : __ 카메라가 씬의 렌더링을 시작하기 전에 호출됩니다.
  • __ OnRenderObject : __ 모든 씬 렌더링 종료 후에 호출됩니다. GL 클래스 또는 Graphics.DrawMeshNow을 사용하여 이 시점에 사용자 지정 지오메트리를 그릴 수 있습니다.
  • __ OnPostRender : __ 카메라가 씬의 렌더링을 종료한 후 호출됩니다.
  • __ OnRenderImage: __ 화면 렌더링이 완료되고, 화면 이미지 처리가 가능하게 된 후에 호출됩니다.
  • __ OnGUI : __ GUI 이벤트에 따라 프레임마다 여러 차례 호출됩니다. 레이아웃 및 리페인트 이벤트가 먼저 처리된 후 레이아웃 및 키보드 / 마우스 이벤트가 각 입력 이벤트에 대해 처리됩니다.
  • __ OnDrawGizmos__ 시각화를 위한 씬 뷰에서 기즈모(Gizmos)를 그리는 데 사용됩니다.

코루틴

일반적인 코루틴 업데이트는 Update 함수가 반환된 후 수행됩니다. 코루틴은 YieldInstruction이 종료할 때까지 그 실행(생성)을 중지할 수 있는 함수입니다. 코루틴의 다른 사용법은 아래와 같습니다.

  • __ yield__ 코루틴은 다음 프레임에서 모든 Update 함수가 호출된 후에 속행합니다.
  • __ yield WaitForSeconds__ 프레임에 대한 모든 Update 함수가 호출된 후 지정된 시간 지연 후에 속행합니다.
  • __ yield WaitForFixedUpdate__ 모든 스크립트에서 모든 FixedUpdate 호출 후 속행합니다.
  • __ yield WWW__ WWW 다운로드 완료 후 속행합니다.
  • __ yield StartCoroutine__ 코루틴을 연결하고 MyFunc 코루틴이 먼저 완료될 때까지 기다립니다.

오브젝트를 파기할 때

  • __ OnDestroy : __ 오브젝트 생존기간의 마지막 프레임의 프레임 업데이트 후 OnDestroy가 호출됩니다. (오브젝트는 Object.Destroy 또는 씬 종료시에 파기됩니다)

종료 시

이 함수는 씬 안에 있는 모든 활성 오브젝트에서 호출됩니다. :

  • __ OnApplicationQuit : __이 함수는 응용 프로그램 종료 전에 모든 게임 오브젝트에서 호출됩니다. 에디터에서는 사용자가 재생 모드를 중지하면 호출됩니다. 웹 플레이어에서는 웹 뷰가 닫힐 때 호출됩니다.
  • __ OnDisable : __이 함수는 동작이 비활성화 될 때 호출됩니다.

스크립트 라이프 사이클 플로우차트(Script Lifecycle Flowchart)

다음 그림은 스크립트의 유효기간 동안 이벤트 함수의 순서와 반복 처리를 정리 한 것입니다.

 

출처 유니티 레퍼런스

http://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html

어플리케이션의 스테이트에 따라서 특정한 처리가 요구될 경우가 있습니다.

이를 위해 안드로이드. iOS 양쪽 모두 통용되는 메소드를 지원하고 있습니다. 

 

OnApplicationPause(bool pause) : 홈키로 어플을 내려 pause 상태로 만들었을 때의 처리

OnApplicationQuit() : 어플을 종료할 때의 처리

 

메소드의 이름만 보면, 안드로이드 쪽에 가깝군요. 하지만 Unity3D는 여러가지 면에서 iOS를 더 사랑하는 것 같습니다.

(푸시 지원 해주는 것만 봐도...) 간략한 예제를 통해서 어떤 식으로 쓰이게 되는지 알아보도록 하겠습니다.

 

 

1) OnApplicationPause

 

bool bPaused = false;  // 어플리케이션이 내려진 상태인지 아닌지의 스테이트를 저장하기 위한 변수

 

void OnApplicationPause(bool pause)

{

  if (pause)

  {

    bPaused = true;

    // todo : 어플리케이션을 내리는 순간에 처리할 행동들 /

  }

  else

  {

    if (bPaused)

    {

      bPaused = false;

      //todo : 내려놓은 어플리케이션을 다시 올리는 순간에 처리할 행동들 

    }

  }

 

 

2) OnApplicationQuit

 

void OnApplicationQuit()

{

  // todo : 어플리케이션을 종료하는 순간에 처리할 행동들

}

 

출처 : http://blueasa.tistory.com/1147


 

 

http://www.devkorea.co.kr/reference/Documentation/ScriptReference

한글을 사용해서 테스트를 했는데 잘 됐다!

 

하지만! 외부접근을 통해서 접속했을 경우 한글이 깨짐현상이 발생함!

 

해결방법 : 한글을 제대로 출력하기 위하여

 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

헤더에 문자열 utf-8 선언!

 

이렇게 선언하고 보니 외부접근 할 경우에도 한글이 꺠지지 않고 잘 나온다!

1. C:\APM_Setup\Server\Apache\conf\extra 폴더의 httpd-alias.conf 파일을 열어서 수정한다.


    Alias /myadmin/ "C:/APM_Setup/Server/phpMyAdmin/"   <--- " " 사이에 자기가 잡은 경로를 넣어줘야됨
    <Directory "C:/APM_Setup/Server/phpMyAdmin"> # 마찬가지로 경로 적어줘야됨.
        Options MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all

    </Directory>

</IfModule>

 

2. 아파치 실행 후 오른쪽클릭 -> 서버 환경 설정 -> Apache 설정 탭에서 ServerName을 공유기 IP로 바꿔준다.

2번 참고 출처 : http://www.apmsetup.com/board.php?bid=513&mode=view&uid=23941

 

3. 제어판 -> 모든 제어판 항목 -> Windows 방화벽 -> 고급설정 -> 인바운드규칙 -> 새 규칙.. (창의 오른쪽)

에 들어가서 3306 포트를 개방한다(mysql 포트)

3번 참고 출처 : http://hyogeun.tistory.com/123


(추가)4. 

mysql 콘솔화면으로 실행하고 권한 설정

grant all privileges on 디비이름.* to 아이디@'%'​ identified by '비밀번호';

 4번 참고 출처 : https://blog.naver.com/PostView.nhn?blogId=igazoa2&logNo=220372994579&proxyReferer=https%3A%2F%2Fwww.google.com%2F



p.s. 아파치 설정을 바꾸었다면 아파치에서 MySQL과 아파치가 실행중인데, STOP했다가 START 해야지 적용됨


(2019.7.19)p.s. apm들이 버전업되면서 설정이 조금 바뀜.

업 된 버전을 받을 시 설정이 다름.  Require all granted 이 줄을 추가한다고함. 혹은 4번 참고


[APM] 설치

프로그래밍/php2015. 6. 18. 19:38

http://www.apmsetup.com/download.php

 

APM이란 ? 웹서버를 사용하기 위한 프로그램들(아파치, php, mysql)의 약자.

APMSetup7을 설치하면 프로그램들을 기본 설정(?)으로 한꺼번에 설치해줌!

 

APMSetup7을 다운받아서 설치!

(p.s. 아파치는 포트 80번을 사용하기때문에 몇몇 프로그램(스카이프 등)과 충돌일어나므로 주의!)

 

다운받을 때 다음다음 누르면 됀다(굳이 설정을 바꾸려면 바꿔도 됌)

설치경로는 C드라이브의 APM_Setup 이라는 폴더가 생성돼며 설치됀다!

 

그리고 가장 기본적으로 외부접근을 허용하기 위해서는

(Window7, 설치파일의 경로를 안바꿨다는 기준)

C:\APM_Setup\Server\Apache\conf\extra 폴더에 httpd-alias.conf파일을 열어서 (저는 메모장으로 수정)

 

 

<IfModule alias_module>

#    Alias /myadmin/ "C:/APM_Setup/Server/phpMyAdmin/"
#    <Directory "C:/APM_Setup/Server/phpMyAdmin">
#        Options MultiViews
#        AllowOverride None
#        Order deny,allow
# deny from all
#        Allow from 127.0.0.1
#    </Directory>

# 외부 접속 가능하게 하려면 아래 설정처럼 변경하여 주시기 바랍니다.

    Alias /myadmin/ "C:/APM_Setup/Server/phpMyAdmin/"
    <Directory "C:/APM_Setup/Server/phpMyAdmin">
        Options MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</IfModule>

이렇게 바꿔준다.

 

외부접근에 대해서는 다음 게시물에서 더 자세히 다루겠습니다.

인터넷을 URL로 띄우는데, 검색했더니 전부다 플러그인을 이용한 Android와 iOS기반의 웹뷰밖에 안나왔다 ㅜㅜ

 

메뉴얼에서 검색해봤더니 Application.OpenURL(string url); 이 있었다.

 

위와같이 string형태의 url을 매게변수로 주면 Application.OpenURL이 호출 될 경우 url 주소의 인터넷창이 켜진다!

There are no audio listeners in the scene. Please ensure there is always one audio listener in the scene

 

 

오디오 리스너가 없기 때문에 생기는 경고(에러아님).

오디오 리스너가 없는데, 오디오를 출력하려고 함.

 

해결 : 오디오 리스너를 추가해줌.

 

 

반대로

There are ? audio listeners in the scene. Please ensure there is always ...

라는 에러가 뜰 경우(경고 아님).

오디오 출력을 하려고 하는데 리스너가 ?개( ?는 2 이상의 수 )일 경우 뜨는 에러.

 

해결 : 오디어 리스너를 0개 혹은 1개를 남겨놓고 나머지 삭제하자!

Intent intent = new Intent(this, MainActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

 

addFlags를 안해주면 어플이 강제종료 될겁니다. 

 

아는분이 필요해서 도와드렸는데, 다른분들께도 도움이 될까 싶어서 지식공유!