-
(10.5) - 버그 개선#2Galaxy Ball/1. 멀티플레이 - 대전모드 2024. 3. 28. 17:05
위 영상을 보면 구체가 정지하여 고정되기 전에 추가로 firezone에서 마우스를 더 클릭하면 계속해서 힘을 받아
이동하는것을 볼수가 있다. 이렇게 된다면 계속 클릭을 멈추지 않는다는 전제하에 게임이 끝나지 않을것이다
전부터 알고는 있었지만 턴제 시스템을 구현하다보면 사라질거라 생각하며 넘어왔었지만
턴제 시스템을 만들다보니 그냥 이걸 없애버리는게 더 빠르겠다는 생각이 들었다
private void Update() { if (Input.GetMouseButtonUp(0) && rigid != null) { rigid.velocity = GameManager.shotDirection * GameManager.shotDistance; // GameManager에서 값 가져와서 구체 발사 } Move(); expand(); }
마우스 클릭을 떼는 순간 문제가 발생했기에 원인을 찾기 위해서는 마우스 클릭을 떼는 코드를 찾아가면 된다
코드를 보면 마우스 클릭을 올리는 순간 계속해서 구체에 힘을 가하고 있다. 이러니 이럴수 밖에 없지
public class BallController : MonoBehaviour { Rigidbody2D rigid; Vector2 lastVelocity; float deceleration = 2f; public float increase = 4f; private bool iscolliding = false; public bool hasExpanded = false; private bool isStopped = false; private int randomNumber; private TextMeshPro textMesh; private bool hasBeenReleased = false; // 최초 클릭이 되었는지 여부를 추적
바로 bool 타입 변수 has/beenRelaesd를 추가해준뒤 false로 초기화해주자
내가 지금 원하는건 "최초의 딱 한번의 클릭만 구체에게 영향을 주는것"이기에
이 변수 역시 딱 한번의 클릭으로 true가 되는 순간 두번 다시 조건문을 만족시키지 못하게 하겠다
private void Update() { // 최초 클릭 이후에만 힘이 가해지도록 설정 if (Input.GetMouseButtonUp(0) && rigid != null && !hasBeenReleased) { rigid.velocity = GameManager.shotDirection * GameManager.shotDistance; // GameManager에서 값 가져와서 구체 발사 hasBeenReleased = true; // 최초 클릭이 되었음을 표시 } Move(); expand(); }
이러면 hasBeenRelased 변수가 최초에 초기화된 false 상태일때 딱 한번만 조건문이 만족된다
영상만 봐서는 티가 안나지만 구체를 날린뒤 아무리 클릭을 눌러봐도 구체에 변함이 없음을 확인할 수 있다
'Galaxy Ball > 1. 멀티플레이 - 대전모드' 카테고리의 다른 글
(11.5) 버그 개선 #3 (0) 2024.03.29 (11) 턴제 시스템 (0) 2024.03.28 (10) BGM & Sound Effect (2) 2024.03.28 (9) 버그 개선#1 (0) 2024.03.27 (8) 발사구현 마무리 (0) 2024.03.27