그래픽 API에 따라서 안드로이드 빌드시 쉐이더가 깨질 수 있습니다.

 

저는 Vulkan API가 기본 API로 되어 있었습니다.

기본인 VulkanAPI로 빌드 했더니 Forge에서 예제로 준 파일과 Forge로 작업 했던 쉐이더가 깨지는 현상이 생겼었습니다.

 

그래픽 API를 확인해 보세요.

 

OpenGL3로 안드로이드 빌드 했을때

Forge 예제 쉐이더는 정상적으로 작동이 되었으나 Forge로 만든 작업물은 쉐이더가 깨져서 보이지 않았습니다. 

 

OpenGL2로 안드로이드 빌드 했을 때  

Forge 예제 쉐이더와 Forge로 만든 작업물 쉐이더 모두 정상적으로 작동 했습니다. 

 

 

 

 

 

원래 이걸 보면서 홀로그렘을 만들고 있었다. 

https://sharpcoderblog.com/blog/create-a-hologram-effect-in-unity-3d 

 

Hologram Effect in Unity 3D

Hologram Effect is widely used in many popular games such as Halo series, Call of Duty: Advanced Warfare, Half Life 2 etc. In this tutorial I will be showing how to create a ...

sharpcoderblog.com

이 쉐이더를 그냥 에셋 스토어에서 굴러다니는 좀비 모델에 테스트 해봤다.  

와! 홀로그렘 좀비! 

이렇게 만들고 있었는데 기획자분이 줄무늬 없는 그런 홀로그렘은 원하셔서 눈물을 머금고 텍스쳐 부분을 빼봤는데

 

세상에 

 

 

 

 

 

구강구조 TMI.... 

저는 당신의 구강구조를 알고싶지 않습니다 좀비 선생님.. 

 

 

 

 

내부 구조가 있는 모델은 알파로 투명하게 만들면 내부 구조가 보일 수 밖에 없다. 

예전에 알파가 대환장파티라는걸 공부해 둬서 다행이다. 

 

darkcatgame.tistory.com/31

 

Unity Shader - Alpha 이론 & 문제 해결

게임을 만드는데 있어서 반투명 그래픽은 필수적이며 여러가지 활용하는 곳이 많습니다, 반투명이라는 것은 뒤의 픽셀과 블렌딩(Blending)된다는 의미입니다. 이번 포스팅에서는 알파에 관한 이

darkcatgame.tistory.com

이 블로그를 참고해서 고쳤다. 

이 부분을 참고했음

 

결론은 간단하게 말하자면 2pass로 Zwrite On , Off 하면 되는 문제이다.

근데 원래 있던 코드를 2Pass 적용하는데 코드가 복잡해서 잘 안됐다. 쉐이더 코드를 읽을줄은 아는데 전체적으로 뜯어 고치는건 아직 어렵다..

그래서 처음 썼던 쉐이더코드 말고 해당 블로그에서 2Pass 를 통해 처리하는 코드를 토대로 정말 간단한 림 라이트를 고치는 방향으로 갔다.

 

darkcatgame님의 코드에서

이렇게 수정했다. 

Shader "Custom/RimLight"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _RimPower ("RimPower" , Range(1, 5) ) = 3
     
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" "Queue" = "Transparent" }
        
        ZWrite on    //! zwrite는 기본적으로 켜져있지만 확실하게 코드를 짜줍니다.
        ColorMask 0    //! 렌더하지 않습니다.
        CGPROGRAM
 
        #pragma surface surf _NoLit nolight keepalpha noambient noforwardadd nolightmap novertexlights noshadow        //! 최적화 코드
 
        struct Input
        {
            float2 color:COLOR;
        };
 
        void surf (Input IN, inout SurfaceOutput o)
        {
        }
        float4 Lighting_NoLit(SurfaceOutput s, float3 lightDir, float atten)    //! 커스텀 라이트 함수를 만들어 아무런 연산을 하지 않습니다.
        {
            return 0.0f;
        }
        ENDCG
        
 
        ZWrite off
        CGPROGRAM
 
        #pragma surface surf Lambert alpha:blend
 
        sampler2D _MainTex;
        fixed4 _Color;
        float _RimPower;

        struct Input
        {
            float2 uv_MainTex;
            float3 viewDir;
        };
 
        
 
        void surf(Input IN, inout SurfaceOutput o)
        {
            // 여기에서 따로 림라이트를 만들어서 홀로그램을 만들자
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex );
            //o.Albedo = c.rgb;
            float rim = saturate(dot(o.Normal, IN.viewDir));
            rim = pow(1-rim,_RimPower);
            o.Emission = _Color;
            o.Alpha = rim;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

Surf 함수에서 림라이트 연산을 하는 것 뿐이다. 매우 간단. 연산도 그렇게 많지 않아서

모바일에서도 크게 문제 없을 거 같다. 

 

결과물은 

 

 

후~~~ 편안

그리고 RimPower 변수를 하나 더 만들어서 정도도 조절 할 수 있게 했다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Unity > Shader' 카테고리의 다른 글

[ 쉐이더 ]요절복통 Alpha 이야기 ppt  (0) 2020.07.07
[Unity] post processing 적용방법  (0) 2020.02.26
[ Unity Shader ] RimLight 구현  (0) 2020.02.13

커뮤니케이션이 잘못되어 작업하던 파이프라인은 레거시 파이프라인이지만 URP 쉐이더 그래프로 작업물을 받았다.

(명칭이  생각나지 않아 URP 이전 파이프라인은 레거시 파이프라인이라 지칭하겠다)

소통의부재의 잘못은 일단 그렇다 치고 아무튼 상황을 해결하기 위해 의논을 했고 상황 정리를 해봤다.

 

받은 작업물은 게임에서 핵심요소이다. 그리고 우리팀에는 쉐이더 코드를 짤 수 있는 사람이 없다. 따라서 쉐이더 그래프를 보고 코드를 짜는 것은 불가능. 그렇다고 진행하고 있던 프로젝트를 전부 다 URP로 업그레이드 하는건 매우 비효율적이다.

하지만 작업물 자체를 레거시 파이프라인에 맞추는것이 제일 나은 방법이였다.

 

 

URP 파이프 라인에서 쉐이더 그래프로 만든 작업물을 레거시 파이프라인으로 적용시킬 방법을 생각해봤다.

그렇게 3가지 방법을 모색했다

 

해결 방안 ( 최고의 방법순으로 나열함 )

  1. 쉐이더 그래프를 코드로 변환하는 기능을 찾아서 레거시 파이프라인 적용시킨다.
  2. 이전 버전에 쉐이더 그래프 플러그인이 있던게 기억났다. 레거시파이프라인의 쉐이더 플러그인으로 재작업을 한다.
  3. 기획을 생략해서 그냥 메테리얼을 경우의 만큼 준비해서 바꿔치기한다.

 

 

 

 

1번 방법 : 쉐이더 그래프를 코드로 변환하는 기능

1. 레딧글에 대충 안된다는 내용 근데 2년전 내용

https://www.reddit.com/r/Unity3D/comments/9oq7ij/can_i_convert_shader_graph_shader_into_shader/e7wrdcn/

2. 대충 된다는 1년전 내용   

https://forum.unity.com/threads/converting-shader-graphs-to-editable-usable-shader-code.709007/  

 

 

 

 

 

그대로 해봤음

 

 

생성 된 코드 표시를 통해 코드를 있었다.

 

 

코드는 보이는데 포럼의 한 부분이 신경쓰인다.. 

 

 

 

안될거같긴 한데…

 

 

 

레거시 파이프라인으로 해봤는데 안된다.

 

 

이럴수가... 

1번 방법은 역시 무리였다. 

 

다음! 

2번 방법 : 이전버전에 쉐이더 그래프 적용

에셋스토어에서

키워드 검색 : Graph

에셋 1 :

https://assetstore.unity.com/packages/tools/utilities/graph-development-interface-72081#content

 

키워드 검색 : shader graph

기존 URP 쉐이더 그래프 확장 플러그인 밖에 없음

이럴수가

…....... 없다

 

 

 

에셋스토어 외의

 

에셋스토어에서는 시간이 지나면서 예전 에셋들은 정리하는 경향이 있었다.

그래서 예전에 유용하게 쓰던 에셋이 스토어에서 내려갔지만 예전에 다운받아놨던 에셋을 가져와서 사용했던 기억이 있다.

 

따라서 에셋스토어에서 찾으면 안됨

 

구글링을 통해 쉐이더 그래프가 나오기 이전인 2013~2016년을 기간 범위를 잡아 키워드를 유니티 쉐이더 그래프로 검색을 해봤다.

 

그러다

https://sites.google.com/site/unity3dstudy/home/test2/shader 이곳을 찾았는데

 

 

 

뭔지는 모르겠는데 New Graph라는걸 찾았음

 

쉐이더그래프 플러그인거같았다.

 

그리고 Stumpy 알아보다 대마왕 교수님 블로그에서

https://chulin28ho.tistory.com/210

 

그래프가 2 있다는걸 알았다.

 

 

스트럼피는 굉장히 별로고

Forge PBR 지원을 한다는 글이다.

 

그렇다면 Forge 써야할거같아서 Forge 찾아봤다. 

 

 

Forge로 개발이 가능한가? 

 

2018년에 유니티에서 공식으로 쉐이더 그래프를 지원해주면서 Forge 무료로 오픈소스로 풀렸고

https://xysterxx.tistory.com/168

 

누가 2018버전에 호환되게 만든 깃허브가 있었다.

https://github.com/jackisgames/ShaderForge

 

2018버전을 2020 버전 프로젝트로 불러와봤는데

 

이런식으로 예제로 들어있던 쉐이더는 호환을 해서 되는 모습을 보여줬지만

 

 

 

그래프를 띄우는건 불가능 했다.

 

따라서

 

이전 버전으로 만든 쉐이더 자체는 호환이 가능하나 2020 프로젝트에서는 그래프 에디터를 없다.

=> 따라서 2018 프로젝트에서쉐이더를작업해서작업물만 2020 프로젝트로올리면되지않을까? 생각을해봤다.

 

 

그래서 2018 가장 최신을 받아봤는데

 

오류가

 

 

 

 

해당 오류를 찾아보니 유니티에서 제공하는 시스템이 바뀌어서 레퍼런스를 못잡는거같다.

아마 같은 2018이였지만 처음에 버전 업그레이드를 하겠냐는 창이 떠서 2018에서 세부적인 버전을 찾아야 되는거같다.

 

그래서 깃허브에 올라온 Forge 2018 프로젝트의 버전을 알아내서 진행했다. 

 

2018.1.02f 였고

 

해당 프로젝트에서는 열렸다.

 

 

그럼 Forge 만든 쉐이더가 2018에서 현재 버전인 2020 호환이 되는가?

 

 

예제 쉐이더 하나를 간단하게 익스포트 해봤다.

 

그리고 패키지를 가져와봤는데

 

 

2020프로젝트 에서도 잘 임포트 되었다!

 

 

 

 

 

그리고 그래픽 개발자님께 Forge로 개발이 가능하냐고 여쭤봤고 가능하다고 하셔서 해당 이슈는 일단락 되었다.

쉐이더를 대충이라도 공부해서 해당 이슈가 무엇때문에 문제였고 해결방안을 찾을 수 있어서 정말 다행이다.

 

 

 

 

 

 

 

프로젝트중 TTS 음성을 통해 게임 진행을 안내하는 부분이 있었다. 게임에서 이 부분은 꽤나 큰 비중을 차지했고 그만큼 파일의 수 또한 많았다. 이 파일들을 효율적으로 설정하고 관리하는 방법을 이 포스팅에서 다룰 생각이다.

 

 

 

전체 목차

0. 프로젝트 상황 <-

1. TTS 음원 파일의 문제점 <-

2. 음원 파일을 자동으로 수정하고 관리 문서(Json)를 만드는 툴 만들기

3. 해당 음원과 관리 문서 Json 파일을 유니티에서 읽어들이기

4. 읽어들인 데이터를 활용하기

 

 

 

 


0. 프로젝트 상황

 

기획자분께 대사가 적힌 엑셀파일을 가져와서 작업한다.

작업 했던 엑세파일 그대로 예시로 들 수 없어서 예시로 나무위키에 있던 페이커 소개글로 채워 넣었다. 

형식은 똑같다. 이 글을 쓰는 동안 담원이 우승했다 담원으로 쓸껄 담원! 담원! 담원!

 

해당 엑셀파일에서 대사를 긁어서 타입캐스트에 넣어줍니다.  

 

그리고 해당 대사를 아래 처럼 받습니다.  

 

 

그럼 아래와 같은 형식으로 파일을들 받게 됩니다. 

이때 문제점들이 있었습니다. 

 

 

 

 


1. TTS 음원 파일의 문제점

 

문제점은 크게 3가지가 있습니다.

  1. 파일 이름이 한글이다.
  2. 해당 파일이 어떤 대사를 가지고 있는지 알아야 한다.
  3. 순서가 int취급이 아닌 String취급을 받아 0다음에 10으로 된다.
1. 파일 이름이 한글이다.

문제점 :

파일 이름이 한글이기 때문에 분명 이름이 꺠질 가능성이 있다. 파일을 이름명으로 가져 왔을 때 파일 이름이 깨졌기 때문에 불러오지 못하는 현상이 생길 수 있다. 따라서 한글이름을 제거해줘야 한다.

 

해결방안 :

유니티에서 가져오고 나서 한글은 모두 지우긴 하지만 파일 자체 이름을 바꾸는건 아니다. 따라서 위험성은 여전하다.

따라서 새로운 툴을 만들어 한글을 없애는 툴을 만들어야 한다..

 

 

2. 해당 파일이 어떤 대사를 가지고 있는지 알아야 한다.

문제점 :

1번의 문제를 해결하면 해당 파일이 어떤 대사였는지 파악하기 힘들다.

다른 외부 문서로 관리...를 하면 좋겠지만 대사 스크립트가 생각보다 많고 시간도 많이 없다.

 

해결방안 :

그럼 자동으로 문서를 만들자.

해당 파일 이름을 txt 파일로 index 번호와 스크립트를 추출한다.

그리고 파일의 이름은 인덱스값만 가지고 있는다.

 

그리고 유니티에서 해당 txt 파일을 읽어온다.

그리고 (AudioClip clip , int index , string Script ) 클래스를 만들어 관리한다.

 

(clip , 22 , "아이템을 획득했구나") 이런식으로 될것이다.

 

이러면 직관적으로 관리가 가능할것이다.

3. 순서가 0 다음에 10으로 된다.

아래 이미지 처럼 숫자가 String으로 취급되서 정렬이 괴상해집니다. 

하지만 2번 문제를 통해 파일이름이 인덱스만 된다면 해당 문제는 자연스럽게 해결될것입니다. 

 

 

즉! 파일들을 관리하는 툴을 만들 필요성이 생겼다. 

 


 

WPF로 툴을 만드는 것은 nichi72.tistory.com/37 에서 계속 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

아나가 Yield Return 키워드고 꿀잠자는 맥크리가 코루틴 함수라고 생각하면 된다. 

 

 

저번에 알파에 대한 수업자료로 만든 PPT를 올려본다. 

 

ppt 링크 : https://docs.google.com/presentation/d/1BELbWk9oHqKhuauq1vIGVuWtLTRxNYyjUCtzolHhz4s/edit#slide=id.g7dcd321d58_0_0

 

요절복통 alpha 이야기

요절복통 alpha 이야기

docs.google.com

 

 

4번째로 오신 유니티 과외 일지 타래! 코딩은 C를 최근에 배우셨고 포인터 까지 아신다. 그리고 어느정도 유니티 지식은 아는 상태.

 

 

1일차

 

유니티 지식과 코딩은 어느정도 아시기 때문에 기초부분은 굉장히 스무스하고 빠르게 넘어갔다. 그래서 하루만에 1.5주치를 다 배우셨다. 생각보다 이해가 빠르시고 호응도 잘 해주셔서 과외 하면서 제일 재미 있었던 ㅋㅋㄱㄱㅋㅋ

기본적인 유니티 인터페이스. 오브젝트를 움직이는 코드. 오브젝트를 움직이는 코드를 활용해 사용자 버튼을 받아 방향을 정해 움직이는 코드. 벡터의 덧셈 , 뺄셈. Transform과 transform 의 차이 까지 했다. 와 너모 많아...

 

 

2일차

 

벡터의 뺄셈 개념까지만 해서 벡터으 뺄셈을 이용해 적 오브젝트를 플레이어를 향해 돌진하도록 만들었다. 그리고 코드를 짜면서 필연적으로 지역변수 전역변수 때문에 버그가 나는데 이 부분의 개념을 PPT로 정리 해놔야겠음 지역전역을 비전공자분은 여기에서 어려워 하시는게 느껴지는데 아시는 분은 아~ 하면서 쿨 하게 넘어가는걸 보고 느꼈다. 일단 전역 지역변수를 여기서 다져야겠다. 그리고 학생분이 전역변수랑 Static이랑 헷갈려 하셔서 Static 개념을 잡아드렸다. 문제는 Static은 싱글톤 할 때 다뤄야되서 예전에 쓴 코드들을 가지고 예제를 삼는데 너무 빨리 Static을 다루는 바람에 예제가 없어서 좀 애먹었다 ㅋㅋㅋ 그래서 충돌하고 에너미 생성까지 했다. 다음시간에 예전에 만든 충돌 비교 프로젝트로 예시를 보여드리기로 했다. 그리고 진도 넘 빠름 돌겠구만~~~~~

 

 

3일차

 

드디어 그 구간... 여태까지 배운걸 토대로 스스로 코딩하기... 여태까지 했듯 코딩하는걸 옆에서 지켜봤는데 안좋은 습관들이 보여 조언해줬다.

 

첫번째 버그가 나는게 무서우신지 코드 실행하기전에 너무 오래 생각하신다. 그래서 여태까지 이해도 잘 하셔서 금방 뚝딱뚝딱 하실줄알았는데 생각보다 오래 걸리셨다. 그래서 어느정도 막힐때는 그냥 돌려보고 버그를 내는게 좋다고 조언해드렸다. 계속 생각만 하면 답이 안보이니까

 

차라리 버그를 내고 그 곳을 중점으로 생각해보고 디버그 찍어보면서 값이 어떻게 변하는지 파악하는게 더 빠르게 개발 가능하다고 말씀드렸다

 

4일차

 

쉐이더와 메테리얼의 개념을 알고 텍스쳐 롤링기법을 사용해 배경이 자동으로 움직이게 해보았다. 겟컴포넌트를 사용해 컴포넌트에 접근하는 방법을 배웠고 메테리얼은 컴포넌트가 아니기 때문에 매쉬 랜더러에 있는 메테리얼으로 접근 해야한다는것을 일부러 버그 내서 보여줬다 그리고 오브젝트 풀링을 해보기 전에 개념을짚고 넘어 갔고 배열과 리스트가 어떤 상황에서 유용하게 쓰이는지 상황별로 보여주며 이해시켰다. 아 다음에 복습하면서 자료구조 앱 그거 보여줘야겠다 그리고 시간이 애매해서 요까지 하고 끝남. 계속 생각해봤는데 이 분은 지금부터

개인적으로 게임개발 해보라고 시키고 싶다. 오늘 한번 이야기 해봐야겠음

 

 

이 이후부터는 안쓰게 되었다. 이유는 패턴이 똑같아서 쓸 필요성을 잃었기 때문이다! 자유 과제때는 패턴 또 달라질거같으니까 그때부터 다시 쓰겠지

 

2019년 7월에 처음으로 쓰게 된 과외 일지다. 

 

간단하게 메모형식으로 적으면서 무엇이 부족했고 무엇을 보완해나갈지 적었었다.

그 메모들을 이 블로그로 옮겼다. 

 

 

새로오신 분 유니티 과외 교육 일지 이번엔 오프라인이 아니라 온라인 강의이다. 프로그래밍은 하나도 모르시는 분!

 

 

1일차 :

 

구글에서 만든 코딩과 유사한 퍼즐게임인 Blockly Game을 9단계 까지 해 보았다. 어떻게 문제를 해결해 나가는지 잘 보면 나중에 디버그를 어떻게 할지 감이 잡힌다. 감을 잘 잡으시는거 같으시면서도 헤매시는 부분들이 있었는데 그 부분들을 잘 기억해놔야겠다.

 

분명 코드 짤때도 비슷하게 실수 하실거 같다. Blockly Game 좋다. 자연스럽게 If문 for문의 필요성을 알게 해주기 때문이다. 그리고 유니티의 기초적인 인터페이스나 지식들을 알려드렸다. 한번에 좀 많은 내용들을 다뤄서 당연히 몇가지는 까먹을 수 있으니 다음 강의 때 잠깐 복습을 하고 넘어가야 겠다! 과제는 자신의 방을 유니티 기본 도형으로 구현해 보도록 했다. 이렇게 하면 유니티 다루는게 익숙해 지기 때문에 매번 첫 과제는 자신의 방을 만드는거로 한다.

 

2일차 :

 

과제 잘 해오셨다.너무 아기자기해서 넘 귀여웠음. 복습으로 저번에 했던거 쭉 훑으면서 상기 시켜줬다. 오늘 좀 많은걸 배웠는데 먼저 IF문! 브록키 코드로 IF문을 배우고 그대로 유니티 가서 IF문을 만들어 좀 더 이해하기 쉽게 IF문을 알려줬다. 둘이 비교해보면 비슷해 이해하기 쉽다

 

그 다음엔 클래스와 변수와 함수를 알려줬다. 클래스와 함수는 원으로 비유하고 변수는 선으로 비유했다. 그리고 각자 역할을 설명했다. 그리고 transform.Translate(Vector3.right * 5 * Time.deltaTime); 이 코드가 뭔지는 모르겠지만 아무튼 적용시켜보니 오브젝트가 오른쪽으로 움직이는걸 볼 수 있게 해줬다. 이러면 딱 감이 오니까. 그리고 뭔지는 모르겠지만 왼쪽으로 움직이게끔 해보라고 유도 했다. 역시나 right를 Left로 바꾸셨다. 역시 다들 눈치가 좋으셔 그리고 해당 코드를 하나씩 하나씩 설명해줬다.

 

이번 시간은 조금 내 자신이 못마땅 했다. 전달력이 별로였던거 같음. 설명도 잘 한거같지도 않다. 온라인으로 강의해서 그런가 좀 맘에 안든다. 그리고 PPT 예전에 자신있게 만든건데 지금보니 매우 맘에 안든다. 싹다 고쳐버릴까. 흐름도 맘에 안들고 디자인도 맘에 안듬

 

지금 과외생은 플밍 기초는 다 알고있어서 이거 모를거 같아 조목조목 설명하다가 학생이 형 저이거 알아요 하면 아 그래?? 머쓱 하고 이젠 그냥 이거 알지? 하면 ㅇㅇ 알아요 하고 슥 넘어가게 되니 이젠 기초적인거 설명할때 더 머리아프네... 기초 부분 다시 만들어야겠다 ㄹㅇ 맘에 안듬

 

3일차 :

 

벡터에 대해 더 자세히 알아보기로 했다. 벡터 덧셈을 이용해서 사용자 키를 받아 플레이어를 움직이게 했고 벡터 뺼셈을 이용해 적을 만들기로 했다. 벡터 뺄셈으로 오브젝트 간의 거리를 구하고 적이 플레이어에게 박치기 하도록 했다. 크게 적을껀 없어보인다..!

 

4일차 :

 

전전 수업까지 복습 후에 다음 수업으로 넘어갔다. 복습은 저번 수업때 썼던 코드들 쭉 보면서 함수 주석으로 필기하고 왜 이런식으로 썼는지 원인과 결과를 중점적으로 봤다. 그리고 2번 복습후에 3번째 때는 직접 나한테 설명 해보라고 해야겠다. 나만 알려주니까 내가 다 외워버려서...ㅎ

 

그리고 진도는 충돌관련 컴포넌트 적을 일정한 시간마다 생성하기 위해 생성코드, 타이머 까지 구현했고 시간땜에 프리펩은 아직..!

 

5일차 :

 

다시 복습...! 적응이 잘 안되시는 듯 하다... 유튜브에 플밍강의 보시면 좀 나아지시려나

 

6일차 :

 

여태 썼던 코드들을 나한테 리뷰해보도록 했다. 어떤 지식을 누군가한테 설명 하려면 자세하게 알아야하고 무엇을 잘못 이해하고 있고 모르는지 금방 파악이 가능하다. 오늘을 위해 계속 복습했는데 그 덕분인지 전체적으로는 파악을 하고 계셨는데 자세하게는 아직 낯선듯하다.

 

그리고 다음 수업에는 드디어 스스로 코드 짜는 부분이다... 호호호.. 수많은 버그가 기다린다...

 

 

 

 

// 이 다음 부터의 메모는 없었음 

 

 

+ Recent posts