오랫만에 개발


그냥 농사겜이 만들고 싶은 기분이라 에셋 찾아보는데 그냥 필요한 모든게 다 있는 에셋을 봐버림



바로 구매 후 개발 시작



나는 성장 요소가 있는 게임을 너무 너무 좋아함

농사에 성장 요소 + 서브 컨텐츠로 로그라이크 광산을 넣어보려고 함


그리고 이번엔 상당히 초기버전을 만들어서 출시해볼거임

하도 출시 못하고 드랍해버려서 ㅋㅋ


일단 이동과 오브젝트 상호작용을 먼저 만들거임



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ce884fa1bd6253119da20824c04b6efd9ad482f5cc4f7aff4800028717a54b518f71cf49e56061312b9215749c97cfc7184cce9ba0647c0


임시로 맵을 배치해주고 조이스틱 에셋을 활용해 이동과 연결해줌


https://assetstore.unity.com/packages/tools/input-management/joystick-pack-107631

Joystick Pack | Input Management | Unity Asset Store

Get the Joystick Pack package from Fenerax Studios and speed up your game development process. Find this & other Input Management options on the Unity Asset Store.

assetstore.unity.com


이 에셋 썼는데 코드가 간결해서 수정하기 쉽고 좋음 



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ce884fa1bd6253119da20824c04b6efd9ad482f5cc4f7aff4800028717a54b518b34ea29c39041395e03a0f1ce4aedd60d8a20ef1c14bf60d5663b26c


aseprite importer로 에셋에 캐릭터 애니메이션 정말 잘 나뉘어있던걸 가져왔음



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ce884fa1bd6253119da20824c04b6efd9ad482f5cc4f7aff4800028717a54b518b34ea29c39041395e03a0f1ce4aedd60dda60ffc9b4ca563997b94fd


이걸 블렌드 트리로 걷기랑 달리기를 애니메이션 할당해줬음


다른것도 블렌드 트리 썼는데 그것들은 그냥 1 -1 씩만으로 했음



그 다음은 게임의 기반이 될 오브젝트 상호작용임


가까이 다가간 오브젝트에 상호작용 가능하다고 알려주기 위해 흰색 테두리를 씌울거임


상호작용이 가능한 오브젝트에 Interactable Object를 상속받는 스크립트를 할당해줌


상호작용 방식은 플레이어 기준으로 조이스틱 좌표가 추가된 작은 점에 닿은 오브젝트를 감지대상으로 삼을거임



아웃라인은 셰이더를 사용해서 표시할거임


셰이더는 딥시크를 이용해 작성했음.




Shader "Custom/SpriteInnerBorder" { Properties { _MainTex ("Texture", 2D) = "white" {} _BorderColor ("Border Color", Color) = (1, 1, 1, 1) _BorderWidth ("Border Width", Float) = 1.0 } SubShader { Tags { "Queue"="Transparent" "RenderType"="Transparent" } Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_TexelSize; float4 _BorderColor; float _BorderWidth; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); // 현재 픽셀의 알파 값이 1인지 확인 if (col.a == 1) { // 주변 픽셀의 알파 값을 확인 float alphaUp = tex2D(_MainTex, i.uv + float2(0, _MainTex_TexelSize.y * _BorderWidth)).a; float alphaDown = tex2D(_MainTex, i.uv - float2(0, _MainTex_TexelSize.y * _BorderWidth)).a; float alphaLeft = tex2D(_MainTex, i.uv - float2(_MainTex_TexelSize.x * _BorderWidth, 0)).a; float alphaRight = tex2D(_MainTex, i.uv + float2(_MainTex_TexelSize.x * _BorderWidth, 0)).a; // 주변 픽셀 중 하나라도 알파 값이 1보다 작으면 테두리로 처리 if (alphaUp < 1 || alphaDown < 1 || alphaLeft < 1 || alphaRight < 1) { return _BorderColor; } } return col; } ENDCG } } }

이 코든데 *내부*로 1픽셀 아웃라인을 그려줌 에셋 이미지에 그림자가 달려있어서 알파값 1 아래는 무시하게 만들었음.

왜 내부로 그리냐면 마찬가지로 에셋에 이미 까만 아웃라인이 있어서 겉에 다시 흰색 씌우면 뭔가 어색해서 일케 했음


근데 딥시크 성능 진짜 좋긴 함. 설명만 잘하면 꽤 복잡한 코드도 정말 잘 짜줌



이제 이것 저것 코드 작성 해주면 완성


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ce884fa1bd6253119da20824c04b6efd9ad482f5cc4f7aff4800028717a54b518f71cf49e56061312b92157189a22a823d5c5efba0647c0


겹친 오브젝트에서도 잘 동작함




이제 나무를 캐는걸 만들어야함


캐는건 탭으로 하려고 함



일단 탭하면 현재 선택된 오브젝트에서 정보를 받아와서

애니메이션 실행하고 StateMachineBehaviour 이용해서 공격 타이밍에 데미지 콜백 넣어주고

다른 것들도 적용해주면



2ab4d675abd531a04e81d2b628f1756d805aeab75779


이렇게 어느정도 범용성 있는 상호작용 구조 만들었고

물론 채집하지 않은 일반 상호작용도 쉽게 가능


이제 이펙트랑 아이템 드랍을 만들어야함

인데 그건 내일의 나에게