protected virtual void UpdateSprite() { if (_directionalAnimation == null) { _renderer.SetSprite( _animation.GetSprite(_animator.FrameIndex), _animation.NormalMap, _animation.EmissiveMap, _animation.GetSpriteCollider(_animator.FrameIndex), _animNode.InstancedIndex, _animNode.ForceReverse); return; } _lastOrientation = _billboard.Orientation; var facing = _billboard.Orientation; if (_billboard.Facing.RequiresFlipping()) { facing = _billboard.Orientation.GetFlippedSide(); _renderer.Flip(_billboard.Orientation.IsFlipped()); } var animFacing = _directionalAnimation.GetFacing(facing); if (animFacing == null || _animator.FrameIndex >= animFacing.FrameIndices.Length) { return; } var idx = animFacing.FrameIndices[_animator.FrameIndex]; _renderer.SetSprite(_directionalAnimation.GetSprite(idx), _directionalAnimation.NormalMap, _directionalAnimation.EmissiveMap, _directionalAnimation.GetSpriteCollider(idx), _animNode.InstancedIndex, _animNode.ForceReverse); }
private void SetSprite() { var frame = _spriteNode.Frame; if (_spriteNode.InstancedIndex >= 0) { var data = _simpleRenderer.Sprites[_spriteNode.InstancedIndex]; data.Sprite = _spriteAnimation.GetSprite(frame); data.Emissive = _spriteAnimation.EmissiveMap; data.Normal = _spriteAnimation.NormalMap; data.Flip = false; } else { _spriteRenderer.SetSprite(_spriteAnimation.GetSprite(frame), _spriteAnimation.NormalMap, _spriteAnimation.EmissiveMap, _spriteAnimation.GetSpriteCollider(frame)); } }
private void SetSprite() { var frame = _spriteNode.Frame; if (_spriteNode.InstancedIndex >= 0) { _simpleRenderer.SetSprite( _spriteAnimation.GetSprite(frame), _spriteAnimation.NormalMap, _spriteAnimation.EmissiveMap, null, _spriteNode.InstancedIndex, false); } else { _spriteRenderer.SetSprite(_spriteAnimation.GetSprite(frame), _spriteAnimation.NormalMap, _spriteAnimation.EmissiveMap, _spriteAnimation.GetSpriteCollider(frame)); } }
protected override void OnGUI() { DisplayCurrent(); var mousePos = Event.current.mousePosition; Rect currentRect = new Rect(); Sprite currentSprite = null; SavedSpriteCollider spriteCollider = null; var cnt = _animation.LengthSprites; Handles.color = Color.red; var basePosition = TextureRect.position; int spriteCnt = 0; for (int i = 0; i < cnt; i++) { var sprite = _animation.GetSprite(i); if (sprite == null) { continue; } var collider = _animation.GetSpriteCollider(i); spriteCnt++; var xPos = sprite.rect.position.x * Multiple; var yPos = (CurrentTexture.height - sprite.rect.position.y) * Multiple; var size = sprite.rect.size * Multiple; yPos -= size.y; var rect = new Rect(basePosition + new Vector2(xPos, yPos), size); //rect.position += (rect.size * 0.5f); //EditorGUI.DrawRect(rect, Color.red); Handles.color = Color.blue; Handles.DrawWireCube(rect.center, rect.size); if (collider == null) { GUI.Label(rect, "No Collider"); } else { //Handles.DrawWireCube(rect.center + (collider.CriticalRect.center * Multiple), collider.CriticalRect.size * Multiple); var critPos = new Vector2(Mathf.Lerp(rect.xMin, rect.xMax, collider.CriticalRect.x), Mathf.Lerp(rect.yMax, rect.yMin, collider.CriticalRect.y)); var critSize = new Vector2(Mathf.Lerp(0, size.x, collider.CriticalRect.size.x), Mathf.Lerp(0, size.y, collider.CriticalRect.size.y)); Handles.color = Color.red; Handles.DrawWireCube(critPos, critSize); } if (rect.Contains(mousePos)) { currentRect = rect; currentSprite = sprite; spriteCollider = collider; } } Vector3 spriteNormalizedPosition = Vector3.zero; if (currentSprite != null) { spriteNormalizedPosition.x = Mathf.InverseLerp(currentRect.xMin, currentRect.xMax, mousePos.x); spriteNormalizedPosition.y = Mathf.InverseLerp(currentRect.yMax, currentRect.yMin, mousePos.y); EditorGUILayout.LabelField(currentSprite.name + " " + spriteNormalizedPosition); } else { EditorGUILayout.LabelField("No sprite " + spriteCnt + "/" + cnt + " " + mousePos + " / " + (mousePos - TextureRect.position)); } if (currentSprite == null || spriteCollider == null) { return; } bool dirty = false; if (Event.current.type == EventType.MouseDown) { spriteCollider.CriticalRect = new Rect(spriteNormalizedPosition, spriteCollider.CriticalRect.size); dirty = true; } if (Event.current.type == EventType.ScrollWheel) { var sizeChange = -Event.current.delta.y * 0.01f; var size = spriteCollider.CriticalRect.size; if (Event.current.control) { size.x += sizeChange; } else if (Event.current.alt) { size.y += sizeChange; } else { size += Vector2.one * sizeChange; } size = new Vector2(Mathf.Clamp01(size.x), Mathf.Clamp01(size.y)); spriteCollider.CriticalRect = new Rect(spriteCollider.CriticalRect.position, size); dirty = true; } if (dirty) { EditorUtility.SetDirty(_animation); Repaint(); } }
protected virtual void UpdateSprite() { Renderer.SetSprite(Animation.GetSprite(Animator.FrameIndex), Animation.NormalMap, Animation.EmissiveMap, Animation.GetSpriteCollider(Animator.FrameIndex)); }
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); } } }