유튜브 골드메탈님 강의 보면서 2D 플랫폼 게임 만들기 따라하는 중입니다.
코드도 똑같이 작성하고 하나하나 따라가는데 계속 좌우로 움직일때 소수점 단위로 y값이 바뀌네요..
이것때문에 이동하다가 넘어지는 것도 있는거 같고, 점프 기능에서 떨어질때 레이 활성화 되는데 y값이 조금씩 떨어지면 활성화 되버려서 점프 모션이 안나옵니다..
저항은 마찰력없이 공기저항만 넣었어요.
코드오류는 없습니다.
<코드>
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public float maxSpeed;
public float jumpPower;
Rigidbody2D rigid;
SpriteRenderer spriteRenderer;
Animator anim;
void Awake()
{
rigid = GetComponent<Rigidbody2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
anim = GetComponent<Animator>();
}
private void Update()
{
//jump
if (Input.GetButtonDown("Jump"))
{
rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
}
//stop speed
if (Input.GetButtonUp("Horizontal")) {
rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.5f, rigid.velocity.y);
}
//direction sprite
if(Input.GetButtonDown("Horizontal"))
spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
//Animation
if (Mathf.Abs(rigid.velocity.x) < 0.3)
anim.SetBool("isWalking", false);
else
anim.SetBool("isWalking", true);
}
void FixedUpdate()
{
//move speed
float h = Input.GetAxisRaw("Horizontal");
rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
//max speed
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);
//landing platform
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 < 0.5f)
anim.SetBool("isJumping", false);
}
}
}
}
댓글 0