Beispiel #1
0
    public void FromState(RayState rs)
    {
        // Muzzel Flash
        muzzelFlash.Flash();

        // Cast ray
        int masks = 0;

        masks |= (1 << LayerMask.NameToLayer("Player"));
        masks |= (1 << LayerMask.NameToLayer("Map"));

        var          fireDir = new Vector2(Mathf.Cos(rs.zAngle), Mathf.Sin(rs.zAngle));
        RaycastHit2D hitInfo = Physics2D.Raycast(rs.pos, fireDir, 1000, masks);

        if (hitInfo)
        {
            // Particle effect
            var effectPosition = new Vector3(hitInfo.point.x, hitInfo.point.y, -1);
            var effectRotation = Quaternion.Euler(0, 0, Random.Range(0.0f, 360.0f));
            var effect         = GameObject.Instantiate(impactEffect, effectPosition, effectRotation);
            GameObject.Destroy(effect, 1);
            //DrawRay.DrawLine(firePoint.transform.position, hitInfo.point, Color.red, 0.05f);
            DrawRay.DrawLine(rs.pos, hitInfo.point, Color.red, 1f);
        }
        else
        {
            //DrawRay.DrawLine(firePoint.transform.position, rs.zAngle, 100f, Color.red, 0.05f);
            DrawRay.DrawLine(rs.pos, rs.zAngle, 100f, Color.red, 1f);
        }
    }
Beispiel #2
0
    public void Move(Vector3 moveAmount)
    {
        Vector3 p = transform.position;

        float deltaX     = moveAmount.x;
        float deltaY     = moveAmount.y;
        float deltaZ     = moveAmount.z;
        float directionX = Mathf.Sign(lastXPos);
        float directionY = Mathf.Sign(deltaY);
        float directionZ = Mathf.Sign(deltaZ);

        if (deltaX != 0)
        {
            lastXPos = deltaX;
        }

        for (int i = 0; i < 3; i++)
        {
            float colliderCenterX = (p.x + initCenter.x - initSize.x / 2) + initSize.x / 2 * i;
            float colliderCenterY = (p.y + initCenter.y - initSize.y / 2) + initSize.y / 2 * i;
            float colliderCenterZ = (p.z + initCenter.z - initSize.z / 2);          // + initSize.z/2 * i;
            float colliderBottom  = p.y + initCenter.y + initSize.y / 2 * directionY;

            rayX = new Ray(new Vector3((p.x + initCenter.x), colliderCenterY, colliderCenterZ), new Vector3(directionX, 0, 0));
            if (Physics.Raycast(rayX, out hitX, rayXDist))
            {
                deltaX = DrawRay.calculateXPosition(rayX, hitX, skin, directionX, deltaX);
            }

            rayY = new Ray(new Vector3(colliderCenterX, colliderBottom, colliderCenterZ), new Vector3(0, directionY, 0));
            if (Physics.Raycast(rayY, out hitY, rayYDist, collisionMask))
            {
                deltaY   = DrawRay.calculateYPosition(rayY, hitY, skin, directionY, Mathf.Abs(deltaY));
                grounded = true;
            }

            if (directionZ == 1)
            {
                colliderCenterZ += initSize.z;
            }
            rayZLeft = new Ray(new Vector3((p.x + initCenter.x - initSize.x / 2), colliderCenterY, colliderCenterZ), new Vector3(0, 0, directionZ));
            if (Physics.Raycast(rayZLeft, rayZDist, collisionMask))
            {
                deltaZ = 0;
            }
            rayZCenter = new Ray(new Vector3((p.x + initCenter.x), colliderCenterY, colliderCenterZ), new Vector3(0, 0, directionZ));
            if (Physics.Raycast(rayZCenter, rayZDist, collisionMask))
            {
                deltaZ = 0;
            }
            rayZRight = new Ray(new Vector3((p.x + initCenter.x + initSize.x / 2), colliderCenterY, colliderCenterZ), new Vector3(0, 0, directionZ));
            if (Physics.Raycast(rayZRight, rayZDist, collisionMask))
            {
                deltaZ = 0;
            }

            Debug.DrawRay(rayZLeft.origin, rayZLeft.direction * rayZDist);
            Debug.DrawRay(rayZCenter.origin, rayZCenter.direction * rayZDist);
            Debug.DrawRay(rayZRight.origin, rayZRight.direction * rayZDist);
        }

        Vector3 finalTransform = new Vector3(deltaX, deltaY, deltaZ);

        transform.Translate(finalTransform);
    }