Как сделать механику Block Slider с Raycast2D - PullRequest
0 голосов
/ 17 октября 2019

На прошлой неделе я разрабатывал блочную скользящую игру. где вы должны сдвинуть блок игрока, чтобы выйти из сетки, но для этого вам нужно переместить блок препятствий по горизонтали или вертикали, зависит от блока

я хотел сделать это с помощью raycast, потому что яразрабатывал его с помощью простой onmouse Drag n 'drop, но недостаток в том, что моя мышь внезапно схватила другой блок на моей позиции мыши, когда я захватывал блок.

void Start()
    {
        BlockRB = gameObject.GetComponent<Rigidbody2D>();
        BlockCollider = gameObject.GetComponent<BoxCollider2D>();
    }

    // Update is called once per frame
    void Update()
    {       
        GrabABlock();
    }

    public void HorizontalMovement() {
        //this.gameObject.transform.position = new Vector3(mousePos.x, gameObject.transform.position.y, 0);
        BlockRB.transform.position = new Vector3(GrabPoint.transform.position.x, gameObject.transform.position.y, 0);
    }

    public void VerticalMovement()
    {
        //this.gameObject.transform.position = new Vector3(gameObject.transform.position.x, mousePos.y, 0);
        BlockRB.transform.position = new Vector3(gameObject.transform.position.x, GrabPoint.transform.position.y, 0);
    }

    public void OctaMovement()
    {
        this.gameObject.transform.position = new Vector3(mousePos.x, mousePos.y, 0);
    }

    private void GrabABlock()
    {

        if (Grabbed == true) {
            Vector3 CursorPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 MousePos2D = new Vector2(CursorPos.x, CursorPos.y);
            RaycastHit2D Grab = Physics2D.Raycast(MousePos2D, gameObject.transform.position);
            if (Grab.collider != null)
            {
                Debug.Log("You Grabbed A Block");
                switch (BlockDirection)
                {
                    case BlockShape.Horizontal:
                        //HorizontalMovement();
                        BlockRB.transform.position = new Vector3(gameObject.transform.position.x, Grab.transform.position.y, 0);
                        break;
                    case BlockShape.Vertical:
                        BlockRB.transform.position = new Vector3(gameObject.transform.position.x, Grab.transform.position.y, 0);
                        //VerticalMovement();
                        break;
                    case BlockShape.Square:
                        OctaMovement();
                        break;
                }
            }
        }      

    }

    private void OnMouseOver()
    {
        if (Input.GetMouseButton(0))
        {
            Grabbed = true;
        }
        else if (Input.GetMouseButtonUp(0))
        {
            Grabbed = false;
        }
    }
}

теперь проблема в том, что блок может'Я могу захватить блок только немного. я что-то упустил?

...