[Unity2018.3.0f2] 코루틴 - 유니티에서 While문 멈추지 않고 돌리기.

이미지
별거 아닌 얘기긴 한데, 한창 유니티 배우던 때, While문으로 내부에서 돌리고 싶은데 쓰면 거의 반드시 멈추기 때문에 골치아팠던 때가 있습니다. Update에서 주로 돌렸는데, 업데이트에서 while문을 돌리게 되면, 대충 잡아서 몇만회 이상 돌아가기 시작하면 Update에서 뻗어버리는 문제가 있었죠. 그 때 가장 흔하게 쓰던 방법으로 Coroutine 시스템이 있습니다. While은 코드의 컨트롤을 넘기지 않고 자기 자신이 끝날때까지 모든 일을 중단하고 잡고 있기 때문에 코드 중간에 넣어서 사용하기 시작하면 그 일을 끝날때까지 모든 코드의 일이 멈춰버리기 때문에, 부하가 심하게 걸리는 작업에 들어가버리면 가끔 멈춰버리기도 합니다. 1 2 3 4 5 6 7 void  Start()  // Unity Stop! {      while ( true )     {         Debug.Log( "Hello, World!" );     } } Colored by Color Scripter cs 그럴때 멈추지 않고 사용하기 위해서 특정 행위가 종료된 후 컨트롤을 다시 넘겨주고, 다시 돌아왔을때 해당 작업을 진행할 수 있도록 하는 내용입니다. 다음은 0.2초마다 1씩 더한 내용을 출력하는 코드입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13      void  Start()     {         Start...

[Unreal 4.20] 애니메이션 블루프린트에 캐릭터 가져오기.

이미지
  블루프린트 애니메이션은 메인 애님그래프에 State Machine 을 이용해서 상태에 따라 다른 애니메이션을 재생해 주는 등 여러가지 기능을 제공합니다만 , 으레 그렇듯이 구조가 익숙하지 않은 사람에겐 이 상태를 업데이트할 부분을 찾는게 곤란해지기도 합니다 .( 이 글을 작성하기 바로 직전의 저처럼요 .) 그런고로 , 간단하게 애니메이션을 데려와서 상태별로 애니메이션이 변경하는 소스를 일부 발췌하여 올립니다 . 애니메이션 블루프린트 탭을 가면 볼 수 있는 애님 그래프 구조 . 스테이트 머신은 스테이트 머신 새로 추가로 넣을 수 있습니다 . 해당 스테이트 머신을 더블 클릭해서 들어가면    이런 황량한 핀이 나오는데 ,   스테이트 추가로 상태를 추가할 수 있습니다 . 만들어진 스테이트 Entry 를 해당 스테이트를 연결해 시작점을 만들어주고 ,    다른 스테이트를 추가해 연결해줌으로서 스테이트간 이동을 만들어 줄 수 있게 됩니다 .   테스트로 구성한 스테이트 . 해당 테스트 스테이트들은 각자의 스테이트가 애니메이션을 가지고 있을 수 있으며 , 조금 복잡한 몽타주도 가질 수 있는걸로 알지만 , 저는 기본 애니메이션만 넣었습니다 . 해당 테스트 스테이트들을 잇는 선 옆에 서로의 상태를 변경하는 bool 을 구하는 Can Enter Transition 이 있는데 , 해당 아이콘을 더블 클릭하면 ,    상태를 전환할 수 있는 내용을 그래프로 만들 수 있습니다 . 하지만 , 정작 Character 를 안가져 왔네요 .   간단히 사용할 CharacterTest 입니다 . 컨트롤러로 Possess 했을때 bPress 변수가 바뀌도록 세팅해뒀습니다 . ...

(웹서버) 우분투 마테 아파치 웹서버 설치

마테 터미널 실행. $ sudo apt - get install php $ sudo apt - get install apache2 $ sudo apt - get install mariadb - server   웹서버 필요 앱(php. apache2, mariadb-server) 설치.       apache2 - v $ sudo apt - get install libapache2 - mod - php7 . 0 $ php - v   아파치 및 php 연동 패키지 설치 후 확인.   sudo mysql > SET PASSWORD FOR root @ localhost = PASSWORD ( '원하는 패스워드 입력' ) ; > quit ;   마리아DB 접속 후 패스워드 입력.   sudo user/bin/mysql_secure_installation   마리아DB 보안설정. 맨처음 나오는 패스워드 입력후 나오는 패스워드 변경만 n, 나머지는 엔터.  $ sudo mysql > USER mysql ; > UPDATE USER SET plugin = '' WHERE user = 'root' ; > FLUSH privileges ; > quit ;   관리자 권한일때 비밀번호 입력 없이도 들어가지는 부분 수정. 1 2 $ sudo mysql - u root - p 자신이 설정한 패스워드   로그인 시도 테스트.   $ sudo apt - get install php - mysql   php 마리아DB연동 테스트. $ sudo adduser webuser $ cd ~ webus...

그림맞추기 게임(20170807) 관련 로직. - 배열 체킹 & 전달.

로직 고민은 했지만 중요로직은 아님. 1. 배열 체킹 그림 자체를 9분할 해서 한군데는 빼주고, 나머지를 섞은 형태로 함.(이미지는 자체 삭제.) 각각 그림들은 특정 정보를 가지고 있는데, 이는 원 이미지 소스랑 자기 위치를 가지고 있음. struct PieceImage {  Image* image; // 제작 프레임워크 이미지 시스템.  int xPos, yPos; // 원 위치.  RECT rc; // 드로잉 위치. }; 이미지 소스들은 각각 이미지를 등록하고, Pos 들에 각각 자신의 원래 위치값을 순서대로 등록해줌. 그 뒤에 섞어줌.(맨 마지막 조각은 빈 파일을 하나 입력해둠.) 2. 전달. WinApi 업데이트단에서 이동 행동을 하면, 빈 타일이 입력한 방향에 있는 타일들과 교환을 함. 교환이 가능한 상태일때 옆 그림과 바꿔줌. if (KEYMANAGER->isOnceKeyDown(VK_LEFT)) // 여기부터.  {   int pieceBlank = ConXPos * 3 + ConYPos;   if (pieceBlank - 3 >= 0)   {    PieceImage tempPiece;    tempPiece = piece[pieceBlank];    piece[pieceBlank] = piece[pieceBlank - 3];    piece[pieceBlank - 3] = tempPiece;    pieceBlank -= 3;    ConXPos = pieceBlank / 3;    ConYPos = pieceBlank % 3;   }  } 왼쪽 이동 관련 소스. ...

winapi 지렁이 부드럽게 움직이는법 - 20170726

연속추적 지렁이(우리가 해야됬던쪽) 지렁이는 그냥 끝부분이 연결이 안끊기고 따라가는 쪽이 많지만, 기본적으로 우리가 해야됬던건 이전 위치를 그대로 답습하는 것이기 때문에 일단 서술함. 지렁이의 머리는 자기가 움직이고 싶은대로 움직일 수 있게 해야됨. 그런고로 이전 정보를 저장한 이후에 따라가면 가장 간단히 완성됨. for (int i = 10; i >0; i--)  {    _bullet[i].x += _bullet[i - 1].x - _bullet[i].x;    _bullet[i].y += _bullet[i - 1].y - _bullet[i].y; } 이런 식으로 구성할 경우, 맨 앞(0번 지렁이 머리)을 제외하고 각각 이전 오브젝트보다  1틱씩 밀려서 생성하고 그대로 따라감. 근데 이걸로 문제가 있는게, 계속 바로 뒷순서로 가기 때문에 일정 간격을 줄수가 없음. 그러므로 간격을 주기 위해서 변형을 해야됨. struct floatPoint // double형 POINT가 아닌 좀 짧은 형태로 재구성. {  float x;  float y; };  floatPoint points[100]; 해당 소스를 통해서 이전값을 저장할 수 있게 함.  points[0] = { _bullet[0].x, _bullet[0].y };  for (int i = 100; i > 0; i--)  {   points[i] = points[i - 1];  } 그리고 이전값을 쫒아 저장하는 배열을 만들어, 내가 뒤로 밀고 싶은만큼 밀린 위치를 불러와 사용할 수 있도록 조절함.    if (_bullet[i].fire)    {     _bullet[i].x = points[i * 10 - 1].x; ...

원 충돌, 올드 페인팅(물체에 색입히기), 충돌 반사 각도 - 20170725

원과 원이 충돌했는지 확인하는 법 점과 점 사이의 길이를 잡은 다음, 각 원들의 반지름을 더한 값이 점과 점사이의 길이보다 짧다면 충돌한 셈이 되므로, struct Circle{ int x, y; // x,y 좌표 int length;} // 반지름 Circle c1, c2; 일때 sqrt(abs(c1.x - c2.x) * abs(c1.x - c2.x) + abs(c1.y - c2.y) * abs(c1.y - c2.y)) (abs(a)-> a 를 양수로 만든다. sqrt(a) -> a의 제곱근을 리턴한다.) 로 점대점 변의 길이를 구한 후, c1.length + c2.legnth 와 비교하면 됨. 원 충돌의 각도를 구하기.(GetAngle 유저 함수) 점과 점 사이의 각도가 얼만지 구하는 방식. 위에서 사용한 sqrt(abs(c1.x - c2.x) * abs(c1.x - c2.x) + abs(c1.y - c2.y) * abs(c1.y - c2.y)) 을 이용하면 대각길이를 구할 수 있음. 그럼 한 변과 해당 대각길이를 사용해 cos를 구하거나, 대각변 이외의 양 변을 이용해 탄젠트(tan)를 구할 수 있음. 그 경우, 구한 탄젠트(tan)를 이용해 각 각도에 적용시켜줌. 예를 들어 187도의 경우, 7도만 계산하고, 180도를 추가로 더해서 사용할 경우 프로그램에선 올바르게 나올 수 있음.(탄젠트는 PI = 3.14값을 90도로 사용하는것 같다.) 그 값을 진행방향값으로 주면 중심점으로부터 충돌한 곳까지의 각도로 다른 힘을 줄수 있다. <참고자료> http://wooriworld2006.tistory.com/186 - 원과 원이 충돌했는지 확인하는 법 http://blog.naver.com/PostView.nhn?blogId=pok_jadan&logNo=186906198 -...