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;
}