Пример #1
0
    // Update is called once per frame
    void Update()
    {
        checkDeath();

        if (dead == false)
        {
            Vector2    origin;
            Collider2D collider = null;

            if (moveDir.x >= 0)
            {
                // check right
                origin = new Vector2(transform.position.x + transform.localScale.x * 0.51f, transform.position.y);
                RaycastHit2D hitRight = Physics2D.Raycast(origin, Vector2.right, speed * Time.deltaTime);

                collider = hitRight.collider;

                if (collider != null)
                {
                    moveDir.x *= -1f;

                    WallScript wall = (WallScript)collider.transform.parent.gameObject.GetComponent <WallScript>();
                    if (wall != null)
                    {
                        if (wall.isElectric())
                        {
                            dead = true;
                        }
                    }
                }
            }
            else
            {
                // check left
                origin = new Vector2(transform.position.x - transform.localScale.x * 0.51f, transform.position.y);
                RaycastHit2D hitLeft = Physics2D.Raycast(origin, Vector2.right * -1f, speed * Time.deltaTime);

                collider = hitLeft.collider;

                if (collider != null)
                {
                    moveDir.x *= -1f;

                    WallScript wall = (WallScript)collider.transform.parent.gameObject.GetComponent <WallScript>();
                    if (wall != null)
                    {
                        if (wall.isElectric())
                        {
                            dead = true;
                        }
                    }
                }
            }

            if (moveDir.y > 0)
            {
                // check up
                origin = new Vector2(transform.position.x, transform.position.y + transform.localScale.x * 0.51f);
                RaycastHit2D hitUp = Physics2D.Raycast(origin, Vector2.up, speed * Time.deltaTime);

                collider = hitUp.collider;

                if (collider != null)
                {
                    moveDir.y *= -1f;

                    WallScript wall = (WallScript)collider.transform.parent.gameObject.GetComponent <WallScript>();
                    if (wall != null)
                    {
                        if (wall.isElectric())
                        {
                            dead = true;
                        }
                    }
                }
            }
            else
            {
                // check down
                origin = new Vector2(transform.position.x, transform.position.y - transform.localScale.x * 0.51f);
                RaycastHit2D hitDown = Physics2D.Raycast(origin, Vector2.up * -1f, speed * Time.deltaTime);

                collider = hitDown.collider;

                if (collider != null)
                {
                    moveDir.y *= -1f;

                    WallScript wall = (WallScript)collider.transform.parent.gameObject.GetComponent <WallScript>();
                    if (wall != null)
                    {
                        if (wall.isElectric())
                        {
                            dead = true;
                        }
                    }
                }
            }

            // move
            transform.Translate(moveDir * speed * Time.deltaTime);
        }
        else
        {
            if (gameObject.GetComponent <SpriteRenderer>().color.a < 0.001)
            {
                gameObject.SetActive(false);
            }
            else
            {
                transform.localScale *= 1.2f;
                Color col = gameObject.GetComponent <SpriteRenderer>().color;
                gameObject.GetComponent <SpriteRenderer>().color = new Color(col.r, col.g, col.b, col.a * 0.9f);
            }
        }
    }