
private Vector3 GetMovementDirection()
{
Vector3 forward = stateMachine.MainCamTransform.forward;
Vector3 right = stateMachine.MainCamTransform.right;
forward.y = 0;
right.y = 0;
forward.Normalize();
right.Normalize();
return forward * stateMachine.MovementInput.y + right * stateMachine.MovementInput.x;
}
}
내 의문사항
forward * stateMachine.MovementInput.y + right * stateMachine.MovementInput.x;
Vector3에서 항상 의문이었던점.
앞으로가기 위한 값이니까 forward에는 z축을 곱해야하는거 아닌가? 유니티의 transform에선 앞뒤 이동이 z축이니까.

GPT 답변
Vector3.forward는 (0, 0, 1)이며, MainCamTransform.forward는 카메라가 향하는 전방 벡터로, 월드 공간에서 카메라의 전방을 의미합니다.forward * MovementInput.y와 right * MovementInput.x 방식으로 입력에 따라 방향이 설정됩니다.MovementInput.y와 MovementInput.x
MovementInput.y : 앞뒤 방향의 입력 값입니다. MovementInput.x : 좌우 방향의 입력 값입니다. MainCamTransform.forward
MainCamTransform.forward는 카메라가 바라보는 방향을 나타내는 전방 벡터입니다.깨달은 결론
만약에 input이 Vector3값이었다면?
return forward * stateMachine.MovementInput.z + right * stateMachine.MovementInput.x;public void ChangeState(IState state)
{
currentState?.Exit();
currentState = state;
currentState?.Enter();
}
내 의문사항
델리게이트를 Invoke()할때만 쓰이는줄 알았는데 함수에도 쓰이네?
GPT 답변
Unity에서 ?(물음표)는 nullable 타입을 만들거나 null 조건부 연산자로 사용하는 두 가지 경우가 있음
int?, float?와 같이 사용하면 해당 기본 타입을 null을 허용하는 타입으로 변환합니다. ?는 변수에 null 값을 가질 수 있도록 허용합니다.int? nullableInt = null;?. 형식으로 사용하면, 해당 객체가 null인지 확인 후 null이 아니면 그 뒤의 메서드나 속성을 실행합니다.null 참조 예외를 방지할 수 있습니다.?. 연산자는 null 검사를 간편하게 하기 위해 함수 호출이나 델리게이트 실행 시에도 자주 쓰입니다.Action myDelegate = null;
myDelegate?.Invoke(); // 델리게이트가 null이면 실행하지 않음#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
// 정답 체크 함수, 맞은 갯수 돌려줌
int UserTest(vector<int> answers, vector<int> user)
{
int temp = 0;
int index = 0;
for (int i = 0; i < answers.size(); i++)
{
if (user[index] == answers[i])
{
temp++;
}
if (index == user.size() - 1)
index = 0;
else
index++;
}
return temp;
}
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> temp; // 맞은 갯수 기록용
// 각 유저 스타일, 반복 되는 만큼만 벡터에 넣음
vector<int> user1 = { 1, 2, 3, 4, 5 };
vector<int> user2 = { 2, 1, 2, 3, 2, 4, 2, 5 };
vector<int> user3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
temp.push_back(UserTest(answers, user1));
temp.push_back(UserTest(answers, user2));
temp.push_back(UserTest(answers, user3));
// 가장 높은 수를 뽑아 max에 넣음
int max = *max_element(temp.begin(), temp.end());
// max와 하나하나 순서대로 비교해서 일치하거나 높으면 answer 배열에 추가
for (int i = 0; i < temp.size(); i++)
{
if (max == temp[i])
answer.push_back(i+1);
}
return answer;
}
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> one = {1,2,3,4,5};
vector<int> two = {2,1,2,3,2,4,2,5};
vector<int> thr = {3,3,1,1,2,2,4,4,5,5};
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> they(3);
for(int i=0; i<answers.size(); i++) {
if(answers[i] == one[i%one.size()]) they[0]++;
if(answers[i] == two[i%two.size()]) they[1]++;
if(answers[i] == thr[i%thr.size()]) they[2]++;
}
int they_max = *max_element(they.begin(),they.end());
for(int i = 0; i< 3; i++) {
if(they[i] == they_max) answer.push_back(i+1);
}
return answer;
}