using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
CapsuleCollider2D capsule_pl;
public GameManager gameManager;
public float maxSpeed;
public float jumpPower;
Rigidbody2D rigid;
SpriteRenderer spriteRenderer;
Animator anim;
int up_Value;
int left_Value;
int right_Value;
bool up_Down;
bool left_Down;
bool right_Down;
bool up_Up;
bool left_Up;
bool right_Up;
void Awake()
{
rigid = GetComponent();
spriteRenderer = GetComponent();
anim = GetComponent();
capsule_pl = GetComponent();
}
void Update()
{
//점프
if (Input.GetButtonDown("Jump") && !anim.GetBool("isjumping") || up_Down&& !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.5f, rigid.velocity.y);
}
//방향 전환
if (Input.GetButton("Horizontal") || left_Down || right_Down)
{
spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
}
}
if (Mathf.Abs ( rigid.velocity.x)
anim.SetBool("iswalking", false);
else
anim.SetBool("iswalking", true);
up_Down = false;
up_Up = false;
left_Down = false;
left_Up = false;
right_Down = false;
right_Up = false;
}
void FixedUpdate()
{
//가속도
float h = Input.GetAxisRaw("Horizontal") + right_Value + left_Value;
rigid.AddForce(Vector2.right * h*2, ForceMode2D.Impulse);
if (rigid.velocity.x > maxSpeed) //Right Max Speed
rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
else if (rigid.velocity.x
rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);
//착지
if (rigid.velocity.y
{
Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
RaycastHit2D rayhit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("plaform"));
if (rayhit.collider != null)
{
if (rayhit.distance
anim.SetBool("isjumping", false);
}
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.tag == "Enemy")
{ //몬스터 떄리기
if(rigid.velocity.y collision.transform.position.y)
{
OnAttack(collision.transform);
}
else
OnDamaged(collision.transform.position);
}
}
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "Item")
{
bool isBronze = collision.gameObject.name.Contains("브론즈");
bool isSilver = collision.gameObject.name.Contains("실버");
bool isGold = collision.gameObject.name.Contains("골드");
if(isBronze)
gameManager.stagePoint += 50;
else if(isSilver)
gameManager.stagePoint += 100;
else if(isGold)
gameManager.stagePoint += 300;
collision.gameObject.SetActive(false);
}
else if (collision.gameObject.tag == "Finish")
{
gameManager.NextStage();
}
}
void OnAttack(Transform enemy)
{
gameManager.stagePoint += 100;
rigid.AddForce(Vector2.up * 10, ForceMode2D.Impulse);
MonsterMove enemyMove = enemy.GetComponent();
enemyMove.OnDamaged();
}
void OnDamaged(Vector2 targetPos)
{ //피 깍임
gameManager.HealthDown();
//레이어 변경
gameObject.layer = 11;
//색 변경
spriteRenderer.color = new Color(1, 1, 1, 0.4f);
//튕겨나가기
int dirc = transform.position.x - targetPos.x > 0 ? 1 : -1;
rigid.AddForce(new Vector2(dirc, 2)*7, ForceMode2D.Impulse);
//애니메이션
anim.SetTrigger("Damaged");
Invoke("offDamaged", 3);
}
void offDamaged()
{
gameObject.layer = 10;
spriteRenderer.color = new Color(1, 1, 1, 1);
}
public void OnDie()
{
spriteRenderer.color = new Color(1, 1, 1, 0.4f);
spriteRenderer.flipY = true;
capsule_pl.enabled = false;
rigid.AddForce(Vector2.up * 30, ForceMode2D.Impulse);
}
public void VelocityZero()
{
rigid.velocity = Vector2.zero;
}
public void ButtonDown(string type)
{
switch (type)
{ case "U":
up_Value = 1;
up_Down = true;
break;
case "R":
right_Value = 1;
right_Down = true;
break;
case "L":
left_Value = -1;
left_Down = true;
break;
}
}
public void ButtonUp(string type)
{
switch (type)
{
case "U":
up_Value = 0;
up_Up = true;
break;
case "R":
right_Value = 0;
right_Up = true;
break;
case "L":
left_Value = 0;
left_Up = true;
break;
}
}
}
어디가 문제인걸까.. 갑자기 잘되다가 모든곳에 빨간줄이 다생거다라..
전부 껏다 켜봐
해당 댓글은 삭제되었습니다.
정말 미안한데.. 픽셀업데이트가 어딨어?
괄호 하나 안치면 변수 선언 전부 안된것처럼 되는 경우 자주 있음
if문이 메서드 밖에 있는데?
?
if (Mathf.Abs (rigid.velocity.x) anim.SetBool ("iswalking", false); else anim.SetBool ("iswalking", true); up_Down = false; up_Up = false; left_Down = false; left_Up = false; right_Down = false; right_Up = false; }
이부분만 따로노는데
수정한거올림 보셈
해결했습니닥 감사합니다
fixedupdate의 닫는 괄호가 update에 가있네
구체적으로는 update에서 방향 전환 if문 다음에 닫는 괄호가 하나 더있고, fixedupdate에서 착지 if문의 )랑 }가 없음
해결했어요 감사합니다
해당 댓글은 삭제되었습니다.
감사합니다 해결했어요 ㅠ
과하게 친절한곳