이제 한 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);
}
}
}
}