@Savlon. 예, 했어요. 현재는 키를 눌렀을 때만 움직일 수 있습니다. 그러면 타일이 걸을 수 있는지 여부를 확인합니다. 그리고 그럴 경우 이동이 수행됩니다. 키를 누르고있는 동안 만 이런 일이 발생합니다. 아래 코드는 동일한 코드입니다.
public GameObject levelCreator_;
levelCreator temp;
Vector3 playerPos;
int[,] mapArray = new int[13,17];
public bool inhibitPlayerInput;
void Start() {
DOTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(6000, 6000);
levelCreator_ = GameObject.Find ("LevelCreatorGameObject");
temp = levelCreator_.gameObject.GetComponent<levelCreator>();
mapArray = temp.mapArray;
for(int i = 1; i<12; i++)
{
for(int ii = 1; ii < 16; ii++)
{
if(mapArray[i,ii] == 2) // tile with value 2 is the starting position of the player
{
playerPos = new Vector3(i,ii,0);
}
}
}
transform.position = new Vector3(playerPos.x,playerPos.y,0);
}
void Update() {
if (inhibitPlayerInput) return;
getInput();
}
void getInput()
{
bool inputPressed = false;
Vector3 newPlayerPos = playerPos;
if(Input.GetKey(KeyCode.W))
{
inputPressed = true;
newPlayerPos += new Vector3(-1,0,0);
}
else if (Input.GetKey(KeyCode.S))
{
inputPressed = true;
newPlayerPos += new Vector3(1,0,0);
}
else if(Input.GetKey(KeyCode.A))
{
inputPressed = true;
newPlayerPos += new Vector3(0,-1,0);
}
else if(Input.GetKey(KeyCode.D))
{
inputPressed = true;
newPlayerPos += new Vector3(0,1,0);
}
if (!inputPressed) return;
if (mapArray[(int)newPlayerPos.x,(int)newPlayerPos.y] == 1) // Unwalkable tile check
{
return;
}
playerPos = newPlayerPos;
if(mapArray[(int)playerPos.x,(int)playerPos.y] == 0 || mapArray[(int)playerPos.x,(int)playerPos.y] >= 2)
{
inhibitPlayerInput = true;
transform.DOMove(playerPos, TweenWpDuration).OnComplete(() => inhibitPlayerInput = false).SetEase(Ease.Linear);
return;
}
}
아무 것도 시도해 보지 않으셨습니까? 당신이 묻는 것은 기본적이고 참고 문헌은 쉽게 Google에서 찾을 수 있기 때문에 나는 추측하고 있습니다 ... – Savlon