Input.touchCount는 현재 화면에 터치된 손가락의 개수를 반환합니다.Input.GetTouch(index)는 해당 index에 해당하는 터치 정보를 반환합니다.Input.GetTouch(0)은 첫 번째 터치 정보를 가져오고, Input.GetTouch(1)은 두 번째 터치 정보를 가져옵니다.index 0):Input.GetTouch(0)로 첫 번째 손가락의 위치와 상태를 확인할 수 있습니다.index 1):Input.GetTouch(1)로 두 번째 손가락의 정보를 확인할 수 있습니다.Touch 구조체는 각 터치 이벤트에 대한 자세한 정보를 제공합니다:
touch.position: 터치 지점의 현재 화면 좌표 (픽셀 단위).touch.phase: 현재 터치 상태 (아래 참조).touch.fingerId: 고유한 터치 ID. 손가락마다 고유 ID가 할당됩니다.TouchPhase)터치의 상태를 나타내는 값입니다:
1. TouchPhase.Began: 터치가 막 시작됨.
2. TouchPhase.Moved: 터치가 이동 중.
3. TouchPhase.Stationary: 터치가 정지 상태.
4. TouchPhase.Ended: 터치가 끝났을 때.
5. TouchPhase.Canceled: 터치가 시스템에 의해 취소되었을 때.
가로 모드를 원했는데 가로로 짧아짐
게임이 실행될 때 화면 방향을 강제로 고정할 수 있습니다:
void Start()
{
Screen.orientation = ScreenOrientation.Portrait;
}

터치하면 좌측 상단 이상한 점으로만 공격함
mousePos : (-8.28, 8.22, -10.00)
UnityEngine.Debug:Log (object)
FrogAttack:Update () (at Assets/05.Scripts/Frog/FrogAttack.cs:82)
찍어보니까 여기를 가리키고 있음.
mousePos = Camera.main.ScreenToWorldPoint(Mouse.current.position.ReadValue());
이거 모바일에선 이렇게 하면 안돼?
모바일 환경에서는 마우스 대신 터치 입력(Input.touch 또는 Touchscreen.current)을 사용해야 합니다.
Mouse.current는 연결된 마우스를 기준으로 좌표를 계산하기 때문에 모바일 환경에서 잘못된 값을 반환할 수 있습니다.
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
mousePos = Camera.main.ScreenToWorldPoint(touch.position);
}
else
{
mousePos = Camera.main.ScreenToWorldPoint(Mouse.current.position.ReadValue());
}
gpt가 준 코드 수정해서 터치 대응
프로젝트 종료
일정 숫자 이상으로 벌레들이 많아지면 게임 오버가 된다? 그럴거면 운빨존많겜을 하지 왜 이걸 함? 게임 규칙이야 당연히 다르지만...
미니게임천국은 방을 꾸몄을 때 운동 기구 같은 걸로 애들 스탯이 오른다던가 하는 성장 요소까지 가미해서 구매시의 명확한 이득이 있었음. 근데 그냥 꾸미기 요소에 불과하다고 하면 난 살짝 아쉬울 것 같음. 도트 그래픽을 사용한 이상 귀엽다, 예쁘다 같은 걸로 어필하기도 힘듦.
돈 모아서 뭔가를 하는 건 좀 아닌 것 같음.
첫 게임 만들어놓고 너무 과몰입하는 것 같기도 하다.
힘 빼고 만들어서 경험 삼아 해보는 선에서 그치자.
근데 자꾸 이거 고쳐야지, 저거 붙여야지 하는게
모바일에서의 플레이 경험이 생각보다 별로여서 그런 것 같음.
방금 PC판 다시 해봤는데, 모바일 포팅은 안하는게 맞는 것 같다.
PC에선 마우스로 클릭을 하면 명확한 클릭감에 대응되는 청각적 피드백이 오니까 재미가 있는데
모바일은 터치를 해도 내가 '이곳을 터치해서' 파리를 잡았다는 느낌이 안 들어서 맥아리가 없다고 추정됨.
화면이 쬐끄매서 내가 뭐 하고 있는건지 모르겠는 것도 한 몫 하는듯.

처음 구매할 때만 해도 이것만 사면 금방 그럴듯한 게임 하나 뚝딱할 수 있을 줄 알았는데 막상 쓰고 애셋들에 적용시켜보고 다니니까 영감도 안 떠오르고 애매한 느낌. 결국 2D든 3D든 자기가 애셋을 만들어낼 줄 알아야 상상력에 제약도 안 걸리고 좋을텐데 지금은 레고 블럭 자체가 안 주어지니 분위기만 떠올려봐야 거기서 '게임'으로 발전하기가 좀 힘든듯.

저번에도 말했지만 URP니 머테리얼이니 뭐가 어떻게 되는건질 알아야 이런 식으로 나오는걸 해결책을 바로바로 찾을텐데... 분명 끄기 전엔 동굴 벽 디테일 다 뭉개졌어도 색깔은 보였는데 껐다 키니까 또 이렇게 됐다.
내일부턴 강의를 하나 들은 후에 다시 간단한 게임 하나 더 만들어보자.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
def sum_three(sb,i):
if(i+2 >= N):
temp = 0
for j in range(i,N):
temp += sb[j]
return temp
else:
return sb[i]+sb[i+1]+sb[i+2]
def left_num(idx,i):
left = 0
for j in range(0,i):
left += score_board[idx+j]
return left
def max_val(sb,idx):
global N
if (idx >= N): return 0
val = 0
val_to_add = -float('inf')
# i는 이번 인덱스에서 2배를 시킬 세계선의 기준
for i in range(3):
if(idx+i < N):
if sum_three(sb,idx+i) > 0:
val_to_add = max(val_to_add,max_val(sb,idx+i+3) + 2*sum_three(sb,idx+i) + left_num(idx,i))
# print('세계선 후보 : ',val_to_add)
else:
val_to_add = max(val_to_add,max_val(sb,idx+i+3) + sum_three(sb,idx+i) + left_num(idx,i))
val += val_to_add
return val
N=int(input())
score_board=list(map(int,input().split()))
print(max_val(score_board,0))
N 넘어간거 체크하는 조건식 2개에 더해주는 숫자가 틀렸길래 그거 고쳐줬더니 예제는 다 통과했지만, 시간 초과 당함.

디버그를 찍어봤더니 내가 원하는 거랑 약간 다른 식으로 동작하고 있음. 계산 4번 하는 건 ok. 근데 왜 val_to_add가 다 동일하게 20이 나오지?
def sum_three(sb,i):
if sum_three_dp[i] == False:
temp = 0
if(i+2 >= N):
for j in range(i,N):
temp += sb[j]
else:
temp = sb[i]+sb[i+1]+sb[i+2]
sum_three_dp[i] = temp
return temp
else:
return sum_three_dp[i]
일단 dp를 시도해보았으나 역시 시간 초과

https://velog.io/@nahowo/BOJ-30460-%EC%8A%A4%EC%9C%84%EC%B9%98Python
ㅋㅋㅋㅋㅋ... 짧네
각 초를 기준으로 자신이 3초전에 눌린 세계선과 안 눌린 세계선을 구분하여 최대값을 dp에 담는거
아니 1초 전이나 2초 전에 눌렸을 수도 있잖아??
-> 그 경우의 수는 3초 후의 내가 책임져준다.
아니 그럼 끝의 경우의 수들은? 2배 못하잖아?
-> 그래서 score에 0 2개 넣어놓는다.

Visual Studio > 보기 > 다른 창 > C# Interactive
#help : 명령어 도움말
#cls 또는 #clear : 화면 지우기
#r "dll 파일의 경로" : 외부 DLL 파일 참조
문자열과 숫자 등 리터럴은 Console.WriteLine() 생략하고 직접 출력 가능