3.19 오후 5시 시작
일단 점프를 구현해야 하는데
처음에는 반원으로 이동하는 법을 고민하다가
굳이 반원 말고 삼각형의 빗변을 따라 이동하는 식으로 구현하면 어떨까 생각해봤음
즉 반지름x2 만큼의 거리를 점프로 이동하게 되겠고
높이는 미사일이나 폭탄과의 상호작용을 생각해서 나중에 또 설정해야겠다
Vector3.MoveTowords 를 써봐야겠다
일단 기존의 update함수 안의 코드가 너무 번잡하게 되어있어서
g키를 입력받는 포탈 이용 시
g키를 한번 눌러서 바로 반응이 안되고 여러번 눌러야 이동이 되는데
이를 위해 update함수 내 이동관련 코드들을
따로따로 함수로 정의해서
함수만 가져다 쓰고, 이를 인자로 컨트롤 하는 방법을 생각해봐서 코드를 수정해 봤다.
기존코드
void Update() {
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
bool keydown_w = Input.GetKeyDown(KeyCode.W);
float Speed=player_Speed;
Vector3 potal_coordinate;
Vector2 move = new Vector2(horizontal, vertical);
if(!Mathf.Approximately(move.x, 0.0f) || !Mathf.Approximately(move.y, 0.0f))
{
lookDirection.Set(move.x, move.y);
lookDirection.Normalize();
}//lookDirection 을 위한 vector 랑 normalize
if (horizontal==0) {
animator.SetBool("isMoving", false);
}
else if(horizontal < 0) {
animator.SetInteger ("direction", -1);
animator.SetBool("isMoving", true);
}
else if (horizontal > 0 ) {
animator.SetInteger ("direction", 1);
animator.SetBool("isMoving", true);
}
if (Input.GetKeyDown(KeyCode.Q)) { //q키 상호작용
attack();
RaycastHit2D ball_hit = Physics2D.Raycast(rigidbody2d.position + Vector2.up * 0.2f, lookDirection, 2.0f, LayerMask.GetMask("balls"));
string ballN=ball_hit.collider.gameObject.name;
if (ball_hit.collider != null) {
Debug.Log("keydown Q : " + ball_hit.collider.gameObject);
balls character = ball_hit.collider.GetComponent<balls>();
if (character != null)
{
curse_count = curse_count - character.hit(ballN);
Debug.Log("left curse_count : " + curse_count);
}
}
} else {
animator.SetBool("attacking", false);
}
Vector2 position = rigidbody2d.position; //현재위치 백터
if (Input.GetKeyDown(KeyCode.G)) //g키 상호작용
{
RaycastHit2D potal_hit = Physics2D.Raycast(rigidbody2d.position + Vector2.up * 0.2f, lookDirection, 1.0f, LayerMask.GetMask("potal"));
string pointN= potal_hit.collider.gameObject.name;
if (potal_hit.collider != null)
{
Debug.Log("keydown G : " + potal_hit.collider.gameObject);
PointandPotal character = potal_hit.collider.GetComponent<PointandPotal>();
if (character != null)
{
potal_coordinate=character.updown(pointN);
rigidbody2d.MovePosition(potal_coordinate);
}
}
} else {
if(!isAttacking) { //이동이 이루어지는 곳
position.x = position.x + (Speed * horizontal * Time.deltaTime);
rigidbody2d.MovePosition(position);
} else {
rigidbody2d.MovePosition(position);
}
}
}
이게 내가 블로그 작성에서는 코드 안에 색깔로 구분가기 쉽게 되어있는데
포스팅하고나서 완료된 글을 보면 다 흰색글씨로만 되어있는데 왜이런거임.. html로 붙여넣을까 가독성이 너무 떨어지네
- g키
진짜 아무리 해봐도 한번 눌러서 이동이 안되는거임
계속 멈춰있고 getkey 로 바꾸고 해봐도 이동이 잘 안됨
그렇게 지금 한 5시간째 하고있는데 유튜브를 하나 발견함
https://www.youtube.com/watch?v=_LZz5BaWoVY
즉, player 스크립트에서 좌표를 이동시키는게 아니라
portal 에서 제어할 수 있도록 하는거다
이 영상에서 코루틴이란걸 사용하는데
https://docs.unity3d.com/kr/530/Manual/Coroutines.html
이런게 있는지 몰랐으니 구현할 수가 있나...
일단 대충 되게는 해놨다
이게 렉인지 아닌지 모르겠는데
g 키를 누르면 얘가 input 을 못받는다
아니 걍 뭐랄까 걍 논리적으로 조건은 맞는데 유니티에서 실행을 안해준다.
이고 나는 트리거 안에 머물러있을때 g키를 아무리 눌러봐도 로그가 안나온다
지금 보면 getkeydown 으로 키를 입력받았을때
이런식으로 해서
그냥 g키를 눌렀을때 반응을 하는지 알아보려고 update 안에다가 저렇게 써봤는데
한번 g키를 눌렀을때 로그가 11개가 쭉 올라왔다.
이게 맞아?
keydown은 눌렀을때 1회만 되야 하는거 아님?
세팅이 잘못된건가?
후 일단 포탈은 잘 되게 바꿨다.
getkey 로 해서 어찌저찌 잘 되는데 이제 w가 문제임
이런식으로 코드를 짜봤는데
지금 쓰다가 생각난건데 스피드에 타임 델타 곱하면
움직이는걸 꽤 볼 수 있겠다라는 생각임
오
ㅋㅋ 근데 이제 뒤로 점프를 안함 ㅋㅋ
점프 속도도 너무 빠르고
내일은 이걸 좀 조져야하는데
내일은 본가가서 잘 모르겠긴함
오늘은 일단 여기까지
https://github.com/cyanindy/Unity/tree/main/3mario/Assets/Script
'1인개발 메이킹로그 > [Web game] 쿠크세이튼3마리오' 카테고리의 다른 글
[7주-31일차] 쿠크3마 연습용 웹게임 - 저주 아닌 공 구현 + 맥도날드 애니메이션 (0) | 2022.03.22 |
---|---|
[6주-30일차] 쿠크3마 연습용 웹게임 - w점프속도 + 바운스볼 속도 (0) | 2022.03.21 |
[6주-28일차] 쿠크3마 연습용 웹게임 - G키 상호작용 + 포탈 + 파란공 (0) | 2022.03.18 |
[6주-27일차] 쿠크3마 연습용 웹게임 - 애니메이션 이벤트 함수 (0) | 2022.03.16 |
쿠크3마웹게임 개발 계획 수정-3차 (0) | 2022.03.16 |