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); }
// 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); }
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; } } }
/// 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); }
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); }
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); } } }