示例#1
0
        private void Zoom()
        {
            if (_camera == null)
            {
                _camera = GetComponent <Camera>();
            }
            var objectToView = transform.parent.transform;

            if (objectToView == null)
            {
                return;
            }
            var objs   = objectToView.GetComponentsInChildren <Renderer>();
            var bounds = objs[0].bounds;

            for (int i = 1; i < objs.Length; i++)
            {
                bounds.Encapsulate(objs[i].bounds);
            }
            var dir = SpriteFacingControl.GetCameraSide(SpriteFacing.Eightway, objectToView, objectToView, 0f, out var inMargin);

            SpriteFacingControl.SetCameraPos(Camera, dir, _viewOffset, 0f);
            if (main._debug)
            {
                DebugExtension.DebugBounds(bounds, Color.red, 5f);
            }
            Zoom(bounds);
            PositionBottom(objectToView.transform.position);
        }
示例#2
0
 // Update is called once per frame
 void Update()
 {
     DebugExtension.DebugPoint(debugPoint_Position, debugPoint_Color, debugPoint_Scale);
     DebugExtension.DebugBounds(new Bounds(new Vector3(10, 0, 0), debugBounds_Size), debugBounds_Color);
     DebugExtension.DebugCircle(new Vector3(20, 0, 0), debugCircle_Up, debugCircle_Color, debugCircle_Radius);
     DebugExtension.DebugWireSphere(new Vector3(30, 0, 0), debugWireSphere_Color, debugWireSphere_Radius);
     DebugExtension.DebugCylinder(new Vector3(40, 0, 0), debugCylinder_End, debugCylinder_Color, debugCylinder_Radius);
     DebugExtension.DebugCone(new Vector3(50, 0, 0), debugCone_Direction, debugCone_Color, debugCone_Angle);
     DebugExtension.DebugArrow(new Vector3(60, 0, 0), debugArrow_Direction, debugArrow_Color);
     DebugExtension.DebugCapsule(new Vector3(70, 0, 0), debugCapsule_End, debugCapsule_Color, debugCapsule_Radius);
 }
示例#3
0
        public void DoSkillEffectForTimer()
        {
            if (mHitCnt > mSkillCfg.mHitCnt)
            {
                LogDC.Log("skill hit max");
                return;
            }
            RaycastHit[] allHit;
            if (null == mBoxCollider)
            {
                allHit = new RaycastHit[0];
            }
            else
            {
                if (mSkillCfg.mAreaHitType == AreaHitType.Normal)
                {
                    var halfExtents = mBoxCollider.Value.size * 0.5f;
                    var center      = CacheTransform.position;
                    allHit = Physics.BoxCastAll(center, halfExtents, CacheTransform.forward, CacheTransform.rotation,
                                                halfExtents.x * 2);
                    var bound = new Bounds(CacheTransform.position, mBoxCollider.Value.size);
                    DebugExtension.DebugBounds(bound, Color.green);
                }
                else
                {
                    var listHitItems = new List <RaycastHit>();
                    var curCastPos   = CacheTransform.position;
                    while (GetNearestTarget(curCastPos, listHitItems, out var nearest) && listHitItems.Count < mSkillCfg.mMaxTargetCnt)
                    {
                        listHitItems.Add(nearest);
                        curCastPos = nearest.transform.position;
                    }

                    allHit = listHitItems.ToArray();
                }
            }

            if (!Toolkit.IsNullOrEmpty(allHit))
            {
                LogDC.Log("get hit cnt: " + allHit.Length);

                switch (mSkillCfg.mSkillType)
                {
                case SkillType.area:
                    DoAreaSkillEffect(allHit);
                    break;

                case SkillType.bullet:
                    DoBulletSkillEffect(allHit);
                    break;
                }
            }
        }
示例#4
0
    /// Returns the edges where we are in contact with another collider.
    Edges GetSurroundings(Vector2 pos)
    {
        Edges output = new Edges();
        List <RaycastHit2D> hits;

        float dist = bloatSpacing;

        //Above
        Vector2 castDir = Vector2.up;

        hits = FilterIgnored(ignoredColliders,
                             Physics2D.BoxCastAll(pos, collider.size, 0f, castDir, dist));
        output = output.SetFlag <Edges>(Edges.Above, hits.Count > 0);

        Bounds debugBounds = new Bounds(collider.bounds.center + (new Vector3(castDir.x, castDir.y) * dist), collider.bounds.size);

        DebugExtension.DebugBounds(debugBounds, hits.Count > 0 ? Color.red : Color.green);

        //Below
        castDir = Vector2.down;
        hits    = FilterIgnored(ignoredColliders,
                                Physics2D.BoxCastAll(pos, collider.size, 0f, castDir, dist));
        output = output.SetFlag <Edges>(Edges.Below, hits.Count > 0);

        debugBounds = new Bounds(collider.bounds.center + (new Vector3(castDir.x, castDir.y) * dist), collider.bounds.size);
        DebugExtension.DebugBounds(debugBounds, hits.Count > 0 ? Color.red : Color.green);

        //Right
        castDir = Vector2.right;
        hits    = FilterIgnored(ignoredColliders,
                                Physics2D.BoxCastAll(pos, collider.size, 0f, castDir, dist));
        output = output.SetFlag <Edges>(Edges.Right, hits.Count > 0);

        debugBounds = new Bounds(collider.bounds.center + (new Vector3(castDir.x, castDir.y) * dist), collider.bounds.size);
        DebugExtension.DebugBounds(debugBounds, hits.Count > 0 ? Color.red : Color.green);

        //Left
        castDir = Vector2.left;
        hits    = FilterIgnored(ignoredColliders,
                                Physics2D.BoxCastAll(pos, collider.size, 0f, castDir, dist));
        output = output.SetFlag <Edges>(Edges.Left, hits.Count > 0);

        debugBounds = new Bounds(collider.bounds.center + (new Vector3(castDir.x, castDir.y) * dist), collider.bounds.size);
        DebugExtension.DebugBounds(debugBounds, hits.Count > 0 ? Color.red : Color.green);

        //None
        output = output.SetFlag <Edges>(Edges.None,
                                        output.HasFlag(Edges.Above) == false && output.HasFlag(Edges.Below) == false &&
                                        output.HasFlag(Edges.Right) == false && output.HasFlag(Edges.Left) == false);

        return(output);
    }
示例#5
0
    public void DebugDraw()
    {
        Bounds bound1 = new Bounds(transform.position + groundCheckOffset, groundCheckSize);
        Bounds bound2 = new Bounds(transform.position + groundCheckOffsetAir, groundCheckSizeAir);

        if (isGrounded)
        {
            DebugExtension.DebugBounds(bound1, Color.red);
        }
        else
        {
            DebugExtension.DebugBounds(bound2, Color.red);
        }

        DebugExtension.DebugCone(transform.position, -transform.forward);
    }
示例#6
0
 private void OnDrawGizmosSelected()
 {
     DebugExtension.DebugBounds(bounds, Color.red, 0f, true);
 }
        private void UpdateSprite(int frameIdx)
        {
            var blockMaterial = new MaterialPropertyBlock();
            var sprite        = _animation.GetSprite(frameIdx);
            var width         = sprite.rect.width;
            var height        = sprite.rect.height;
            //var gridY = Mathf.FloorToInt(spriteData.Frame / spriteData.FrameGridX);
            //var gridX = spriteData.Frame % spriteData.FrameGridX;
            //var pixelCoordsX = gridX * width;
            //var pixelCoordsY = sprite.texture.height - ((gridY+1) * height);
            var   pixelCoordsX = sprite.rect.x;
            var   pixelCoordsY = sprite.rect.y;
            float uvWidth      = width / sprite.texture.width;
            float uvHeight     = height / sprite.texture.height;
            var   uvOffsetX    = pixelCoordsX / sprite.texture.width;
            var   uvOffsetY    = pixelCoordsY / sprite.texture.height;

            blockMaterial.SetVector(_shaderPropertyUv, new Vector4(uvWidth, uvHeight, uvOffsetX, uvOffsetY));
            blockMaterial.SetVector(_shaderPropertyColor, Color.white);
            blockMaterial.SetTexture(_shaderPropertyTexture, sprite.texture);
            blockMaterial.SetTexture(_shaderPropertyNormal, _animation.NormalMap);
            if (_animation.EmissiveMap != null)
            {
                _meshRenderer.sharedMaterial.EnableKeyword(_shaderEmissiveKeyword);
                blockMaterial.SetTexture(_shaderPropertyEmissive, _animation.EmissiveMap);
            }
            else
            {
                _meshRenderer.sharedMaterial.DisableKeyword(_shaderEmissiveKeyword);
            }
            _meshRenderer.SetPropertyBlock(blockMaterial);
            var frame         = _animation.GetFrame(frameIdx);
            var pixelsPerUnit = sprite.pixelsPerUnit;
            var size          = new Vector2(sprite.rect.width / pixelsPerUnit, sprite.rect.height / pixelsPerUnit);

            if (frame.HasEvent)
            {
                var center = _meshFilter.transform.TransformPoint(
                    Mathf.Lerp(
                        -(size.x * 0.5f), (size.x * 0.5f), frame.EventPosition.x), size.y * frame.EventPosition.y, 0);
                Debug.DrawRay(center, _meshFilter.transform.forward * 5, Color.red, 5f);
            }
            if (_meshFilter.sharedMesh == null)
            {
                _meshFilter.sharedMesh = ProceduralMeshUtility.GenerateQuad(size, new Vector2(0.5f, 0));
            }
            if (_vertices.Count == 0)
            {
                _meshFilter.sharedMesh.GetVertices(_vertices);
            }
            Resize(size);
            if (_spriteCollider != null)
            {
                var savedCollider = _animation.GetSpriteCollider(frameIdx);
                _spriteCollider.UpdateCollider(savedCollider);
                if (savedCollider != null)
                {
                    var center = _spriteCollider.transform.TransformPoint(Mathf.Lerp(-(size.x * 0.5f), (size.x * 0.5f), savedCollider
                                                                                     .CriticalRect.x), size.y * savedCollider.CriticalRect.y, 0);
                    var colliderSize = new Vector3(savedCollider.CriticalRect.size.x * size.x,
                                                   savedCollider.CriticalRect.size.y * size.y, 0.5f);
                    DebugExtension.DebugBounds(new Bounds(center, colliderSize), Color.red);
                }
            }
        }