타일 안깔았을땐 프레임 120까지 나오면서 왜 타일깔고 충돌지정하면 프레임이 20까지 떨어지는지..
순전히 타일이 많아지면 그렇게 되는지 원..
혹시모르니 코드도 첨부함다
그리고 이코드로 했을때 충돌체에서 좀 비비면 뚫고지나가는 버그있던데 그런건 어케 잠슴까?
public class CharacterMove : MonoBehaviour {
private readonly float moveSpeed = 3.0f;
private Rigidbody2D playerRigidbody;
Animator anim;
// enum은 그냥 숫자를 문자로 보여주는 (값)이라고 생각하시면 됩니다!
enum State
{
None,
Left,
Right,
Up,
Down
};
private State mPlayerState = State.None;
private State mColDir = State.None;
private void Awake()
{
playerRigidbody = (Rigidbody2D)GetComponent(typeof(Rigidbody2D));
anim = (Animator)GetComponent(typeof(Animator));
}
// Update is called once per frame
void Update ()
{
// 방향키가 하나라도 입력이 되어 있을 경우
if (Input.GetKey(KeyCode.LeftArrow)
|| Input.GetKey(KeyCode.RightArrow)
|| Input.GetKey(KeyCode.UpArrow)
|| Input.GetKey(KeyCode.DownArrow))
{
// 캐릭터 이동 방향을 지정한다.
{
if (Input.GetKey(KeyCode.LeftArrow))
{
mPlayerState = State.Left;
anim.Play("Left");
}
if (Input.GetKey(KeyCode.RightArrow))
{
mPlayerState = State.Right;
anim.Play("Right");
}
if (Input.GetKey(KeyCode.UpArrow))
{
mPlayerState = State.Up;
anim.Play("Up");
}
if (Input.GetKey(KeyCode.DownArrow))
{
mPlayerState = State.Down;
anim.Play("Down");
}
}
// 충돌 방향이 아무것도 아닌 상태가 아니고 캐릭터가 이동하려는 방향과 충돌한 방향이 같을 경우 리턴을 한다.
if (mColDir != State.None && mPlayerState == mColDir)
{
return;
}
// 충돌한 뱡향과 캐릭터가 이동하려는 방향이 다르면 캐릭터 이동을 처리한다.
switch (mPlayerState)
{
case State.Left:
CharLeft();
break;
case State.Right:
CharRight();
break;
case State.Up:
CharUp();
break;
case State.Down:
CharDown();
break;
}
}
}
// 나무와 충돌했을 때 이 함수가 호출
private void OnTriggerEnter2D(Collider2D other)
{
// 충돌한 뱡향을 캐릭터가 이동한 뱡향으로 설정한다.
mColDir = mPlayerState;
}
// 충돌에서 벗어 났을 때 이 함수가 호출
private void OnTriggerExit2D(Collider2D other)
{
// 충돌에서 벗어났을 경우 아무것도 아닌 상태로 설정한다.
mColDir = State.None;
}
void CharDown()
{
transform.Translate(0, -moveSpeed*Time.deltaTime, 0);
}
void CharUp()
{
transform.Translate(0, moveSpeed * Time.deltaTime, 0);
}
void CharLeft()
{
transform.Translate(-moveSpeed * Time.deltaTime, 0, 0);
}
void CharRight()
{
transform.Translate(moveSpeed * Time.deltaTime, 0, 0);
}
이동은 Transform을 사용하지 말고 Rigidbody를 사용하자. Transform은 충돌처리를 생각해주지 않아.
리지드바디 사용한다면 addforce 쓰는거 아닌가요? 이거 쓰기 힘들던데 ㄷㄷ
프로파일러 써봤냐?
Rigdbody쓰면 물리cpu많이 먹지 않나요?