示例#1
0
            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);
            }
示例#2
0
            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));
                }
            }
示例#3
0
            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));
                }
            }
示例#4
0
        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();
            }
        }
示例#5
0
 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);
                }
            }
        }