코딩일지

유니티 c#으로 점프게임 만들기

성은공주 2024. 2. 29. 20:48

이제 한 20%는 한거같다 기본동작은 다 만들었고 이제 맵만들기 노가다하면서 함정을 만들것이다

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Player_move : MonoBehaviour
{
  public float maxSpeed;
  public float JumpPower;
  Rigidbody2D rigid;
  SpriteRenderer spritrRenderer;
  Animator anim;

      void Awake()
    {
      rigid = GetComponent<Rigidbody2D>();
      spritrRenderer = GetComponent<SpriteRenderer>();
      anim = GetComponent<Animator>();
    }

    void Update() //단발적인 입력은 업데이트에 쓰는것이 좋다.
    {
      //추락
      if(transform.position.y < -8){ //만약 플레이어의 좌표가 -8 미만이라면 부활(씬리셋)
        SceneManager.LoadScene("SampleScene");
      }

      //점프
      if(Input.GetButtonDown("Jump") && !anim.GetBool("isjumping")) {
      rigid.AddForce(Vector2.up * JumpPower, ForceMode2D.Impulse);
      anim.SetBool("isjumping",true); 
      }


      //이동 정지
      if (Input.GetButtonUp("Horizontal")) {
        rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.0000001f, rigid.velocity.y);
      }
      //방향전환
      if(Input.GetButtonDown("Horizontal"))
      spritrRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;

      //애니메이션
      if(Mathf.Abs(rigid.velocity.x) < 0.3) //만약 절댓값이 0.3보다 작으면
      anim.SetBool("isrunning", false);
      else
      anim.SetBool("isrunning", true);

    }
    
    void FixedUpdate()
    {
      //이동 속도
        float h = Input.GetAxisRaw("Horizontal");
        rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);

        if(rigid.velocity.x > maxSpeed)//오른쪽 속도
        rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
        else if(rigid.velocity.x < maxSpeed*(-1))//왼쪽 속도
        rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);
        
        if(rigid.velocity.y < 0) {
          Debug.DrawRay(rigid.position, Vector3.down, new Color(0,1,0));
          RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
          if(rayHit.collider != null) {
            if(rayHit.distance < 10f) //좌표가  10 이하면 점프모션에서 기본모션으로 변경
                anim.SetBool("isjumping", false);
                
          }
        } 
    }
}