공부하기싫어
article thumbnail

3월25일 오전 4시15분 포스팅 시작

 

오늘은

어제 만들었던 초록이를 맵에 전부 배치하고

미사일 프리팹을 만들어 보고

점프 길이에 맞게 바닥 길이들을 수정해 보자

 

  • 초록이 배치

배치

배치는 했는데

게임 플레이 누르자 마자 애들이 갑자기

왼쪽으로 한 3 정도 텔레포트 써버림;;

 

음.. 겜 시작하고 1초 정도를 멈춰있게 해야겠음

 

음... 타이머를 설정해서 겜 시작하고 2초간 멈춰있게 하려니까 갑자기 또 오른쪽으로 가버림;;

 

아 

else {
      position = greeny_first_pos;
      stop_timer-=Time.deltaTime;
}

ㅋㅋ 타이머가 안됬을때는 처음 위치를 포지션에 넣어주는 구문을 깜빡했찌

이제 괜찮게 움직이는데 지금 이속이 10으로 되어있다

너무 빨라서 7정도로 전체적으로 낮춰줬다.

굿

 

  • 미사일 구현

처음에는 맥도날드나 초록이한테 했던것처럼 자식 오브젝트를 만들어서

어느정도 선에 도착하면 위치를 초기화 시키려고 했는데

이게 미사일 움직이면 같이움직여서

 

맥도날드가 플레이어를 인식할때 했던 방식으로 구현해야 할것같다.

 

??

미사일 오브젝트가 트리거로 설정되어있어서 그런지 충돌을 감지 못하는것 같다...

range 오브젝트를 받아오고 미사일의 x좌표와 range 오브젝트의 x좌표 절대값을 뺀 값이 1 미만일 경우 위치를 초기화 시켜봐야겠다.

 

성공

미사일

미사일이 빨간색 range 에 근접할 경우 위치를 초기화 할 수 있었고

플레이어와 접촉시에도 다시 위치를 초기화 하도록 구현했다.

 

missile 코드

public class missile : MonoBehaviour
{
    public float speed=2.5f; // 이동속도
    public int direction;
    Vector2 position; //현재위치
    public Vector2 first_position;

    float start_timer=2;
    public GameObject missile_range;

    // Start is called before the first frame update
    void Start()
    {
        transform.position=first_position;
    }

    // Update is called once per frame
    void Update()
    {
        if(start_timer>0) {
            position=first_position;
            start_timer-=Time.deltaTime;
        } else {
            position.x=position.x + speed*direction*Time.deltaTime;
        }

        float cur_mis_x = Mathf.Abs(position.x);
        float mis_range_x  =Mathf.Abs(missile_range.transform.position.x);
        float distance=cur_mis_x-mis_range_x;
        if (distance<=1 && distance>=-1) { reset_position(); } //위치 리셋
       
        transform.position=position;
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        player controller = other.GetComponent<player>();

        if (controller != null)
        {
            controller.ChangeHealth(-1);
            reset_position();
        }
    }

    public void reset_position() {
        position=first_position;
    }
}

 

이제 배치를 해보자

음...

 

왼쪽으로 가기..

왼쪽으로 갈때 위 코드로 하면 중간에 초기화 되버린다...

저 오브젝트의 x좌표가 28이고 limit 의 좌표가 -19인데

절댓값해서 뺀 값이 1이하 -1 이상이라고 하면

오브젝트는 8밖에 이동하지 못한다...

 

어떻게하지 흠..

 

public class missile : MonoBehaviour
{
    public float speed=2.5f; // 이동속도
    public int direction;
    Vector2 position; //현재위치
    public Vector2 first_position;

    public float start_timer=2;
    public GameObject missile_range;

    // Start is called before the first frame update
    void Start()
    {
        transform.position=first_position;
    }

    // Update is called once per frame
    void Update()
    {

        if(start_timer>0) {
            position=first_position;
            start_timer-=Time.deltaTime;
        } else {
            position.x=position.x + speed*direction*Time.deltaTime;
        }

        float cur_mis_x = position.x;
        float mis_range_x  = missile_range.transform.position.x;
        if ( cur_mis_x <= mis_range_x+0.5 && cur_mis_x >= mis_range_x-0.5) {
            reset_position();
        } //위치 리셋
       
        transform.position=position;
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        player controller = other.GetComponent<player>();

        if (controller != null)
        {
            controller.ChangeHealth(-1);
            reset_position();
        }
    }

    public void reset_position() {
        position=first_position;
    }
}

 

limit-0.5 <= missile <= limit+0.5 로 판단해서 초기화 하도록 해봤다

이제 다시 배치를 해보자

배치끝!

 

 

  • 바닥 길이 수정

점프를 더 정확히 구현하기 위해서 바닥도 수정해 보자

맵에서 1층만 수정하면 될것같다.

 

콜라이더

점프할때 기존 콜라이더를 너무 높게 설정해놓은탓인지 자꾸 살짝 걸려서 체력이 0이 되버리는 부분을 수정했다.

그리고 점프 길이에 맞춰서 사진의 위치보다 조금 뒤에서 뛰면 짧은 바닥 가운데에 오게끔 길이를 조정했다

 

오늘은 여기까지

 

오늘 여친이 화염방사기를 보내줘서

내일은 화염방사기 프리팹 구현과 바운스볼 히트 판정을 작업해볼 예정이다.

 

오늘은 뭐랑 술먹지

 

 

https://github.com/cyanindy/Unity/tree/main/3mario/Assets/Script

 

GitHub - cyanindy/Unity: game dev

game dev. Contribute to cyanindy/Unity development by creating an account on GitHub.

github.com

현재 제작중인 쿠크세이튼3마리오 프로젝트는 깃허브에 public 으로 업로드 되있습니다.