움직일 때 드래그 제한하기

타일을 맞췄을 때 드래그 제한하기

조건 : 여러 타일들이 코루틴으로 움직이는데 첫 타일이 움직이기 시작했을 때부터 마지막 타일이 멈췄을 때까지 드래그를 제한해야 함

- MainGame 클래스를 Tile에서 참조하는 방법 -> 은닉성이 떨어짐

- 변수를 static으로 쓰는 방법 -> 차라리 참조를 쓰는 게 나아보임

- 콜백으로 정보를 변경하고 움직일 수 있는지 받아옴 -> 이 방법을 사용해보지 않아서 사용해봤음

 

- Action<int>로 타일이 움직였으면 1을 더해주고 움직임이 끝났으면 1을 빼줬다.

- Func<bool>로 드래그가 가능한지를 받아왔다. (_movingCount == 0일 때 드래그 가능)

public class CharacterTile : MonoBehaviour, IBeginDragHandler
{
    private Action<int> _onMoveInfoChanged;
    private Func<bool> _getDragable;
	
    public void OnBeginDrag(PointerEventData eventData)
    {
        if (!_getDragable.Invoke())
            return;

        /* 위치 체크,갱신 로직
        	...
        */
    }
    
    public IEnumerator Move(Vector2 targetPos, float moveTime)
    {
        _onMoveInfoChanged.Invoke(ADD_VALUE);
        /* 움직임 로직
        	...
        */
        _onMoveInfoChanged.Invoke(-ADD_VALUE);
    }

    public IEnumerator GoRoundTrip(Vector2 targetPos, float moveTime)
    {
        _onMoveInfoChanged.Invoke(ADD_VALUE);

        /* 움직임 로직
        	...
        */
        _onMoveInfoChanged.Invoke(-ADD_VALUE);
    }
}
public class MainGame : MonoBehaviour
{
	private int _movingCount;
    
    private bool GetDragable()
    {
        return _movingCount == 0;
    }

    private void MoveInfoChangedCallback(int num)
    {
        _movingCount += num;
    }
    
}

 

 

결론

장점 : CharacterTile은 MiniGame의 정보를 모르므로 은닉성이 증가하였다.

단점 : 디버깅 시 코드의 흐름을 따라가기 조금 어렵다.

=> 핵심 로직이거나 은닉화가 필요한 정보를 다룰 때 또는 입력 등의 콜백으로 사용할 때 좋다고 생각한다.

 

 

순차적인 파괴 가능하도록 하기

보드가 변경되었을 때 연속적인 타일이 존재한다면 순차적으로 파괴 되도록 하기

- ReArrangeBoard 메서드에 bool 값 파라미터를 넣음으로써 순차적으로 파괴할 경우와 아닌 경우를 나눴다.

https://jcdevelop98.tistory.com/414

 

애니팡 클론코딩 (6) - 연속적인 타일이 3개 이상인지 확인하기

연속적인 타일이 3개 이상인지 확인하기 타일을 생성시에 연속적으로 3개가 존재하는지 확인 - 상하좌우 3개 이상인지 검사하므로 4칸은 검사하지 않아도 됨 - while문을 돌면서 3개 이상이라면 Exp

jcdevelop98.tistory.com

public class MainGame : MonoBehaviour
{
	private int _movingCount;

    private void MoveInfoChangedCallback(int num)
    {
        _movingCount += num;

        if (_movingCount == 0)
        {
            ReArrangeBoard(true);
        }
    }
    
}

 

 

버그

* 코루틴 중간에 오브젝트가 파괴되는 경우

* 파괴될 오브젝트가 드래그가 먹혀서 문제가 되는 경우

* 한 번에 여러 타일이 파괴될 때 구멍이 생기는 경우

+ Recent posts