오랫만에 개발
그냥 농사겜이 만들고 싶은 기분이라 에셋 찾아보는데 그냥 필요한 모든게 다 있는 에셋을 봐버림
바로 구매 후 개발 시작
나는 성장 요소가 있는 게임을 너무 너무 좋아함
농사에 성장 요소 + 서브 컨텐츠로 로그라이크 광산을 넣어보려고 함
그리고 이번엔 상당히 초기버전을 만들어서 출시해볼거임
하도 출시 못하고 드랍해버려서 ㅋㅋ
일단 이동과 오브젝트 상호작용을 먼저 만들거임

임시로 맵을 배치해주고 조이스틱 에셋을 활용해 이동과 연결해줌
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
이 에셋 썼는데 코드가 간결해서 수정하기 쉽고 좋음

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

이걸 블렌드 트리로 걷기랑 달리기를 애니메이션 할당해줬음
다른것도 블렌드 트리 썼는데 그것들은 그냥 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 아래는 무시하게 만들었음.
왜 내부로 그리냐면 마찬가지로 에셋에 이미 까만 아웃라인이 있어서 겉에 다시 흰색 씌우면 뭔가 어색해서 일케 했음
근데 딥시크 성능 진짜 좋긴 함. 설명만 잘하면 꽤 복잡한 코드도 정말 잘 짜줌
이제 이것 저것 코드 작성 해주면 완성

겹친 오브젝트에서도 잘 동작함
이제 나무를 캐는걸 만들어야함
캐는건 탭으로 하려고 함
일단 탭하면 현재 선택된 오브젝트에서 정보를 받아와서
애니메이션 실행하고 StateMachineBehaviour 이용해서 공격 타이밍에 데미지 콜백 넣어주고
다른 것들도 적용해주면

이렇게 어느정도 범용성 있는 상호작용 구조 만들었고
물론 채집하지 않은 일반 상호작용도 쉽게 가능
이제 이펙트랑 아이템 드랍을 만들어야함
인데 그건 내일의 나에게
근데 농사겜에 굳이 광산을 만들어 로그라이크 하는거보다 농사 그 자체를 로그라이크로 만드는거 어떰? 어차피 실제 농사도 도박이라고들도 하잖아 - dc App
훌륭한 고민임. 여러가지 고민해봤지만 모바일 게임에다 농사라 템포가 그렇게 빠르지 않고 로그라이크 광산도 농사에 영향을 좀 많이 받는 편이라 (유물이나 일부) 병행이 좋을 것 같아서 일케 했음. 전부 로그라이크로 하는것도 구상했었는데 농사를 공장겜 느낌으로 게임 하면서 테크 올리고 광산에서 죽치고 돈벌고 이런 구상이었음. 근데 이걸 재밌게 살리기에 내 능력이 살짝 딸릴 것 같음 ㅋㅋ
아니 그냥 걸어다니는데 벌써 대박이 보인다!
맛있어요!
졸귀다 - dc App
저런 조작감 어케구현하나요 - dc App
너꺼보고 멋있어서 좀 따라해봣는데 어렵네.. 혹시 너가 만든 이너라인 쉐이더에 빛 받으면 밝아지고 빛 없으면 어두워지는 기능 추가도 할수있어?