Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Question How do I get a list of sprites that will appear in a 2d animation?

Discussion in '2D' started by hurukawakouki, Sep 29, 2022.

  1. hurukawakouki

    hurukawakouki

    Joined:
    Nov 25, 2020
    Posts:
    1
    I am new to unity and programming and am trying to create a 2d game.
    I wanted to add a PolygonCollider to each sprites in my 2d animation and have created a script that will give a PolygonCollider to each sprites as it changes.
    The following is a description of the script.
    Code (CSharp):
    1.    
    2.     [Tooltip("Renderer")]
    3.     protected SpriteRenderer spriteRenderer;
    4.  
    5.     [Tooltip("Colliders")]
    6.     private Dictionary<Sprite, PolygonCollider2D> pairs;
    7.  
    8.     [Tooltip("Parameter")]
    9.     [SerializeField]
    10.     private BaseObjectParameter baseObjectParameter;
    11.  
    12.     [Tooltip("for comparison")]
    13.     protected Sprite sprite;
    14.  
    15.     // Start is called before the first frame update
    16.     protected void Start() {
    17.         this.spriteRenderer = this.GetComponent<SpriteRenderer>();
    18.         this.sprite = this.spriteRenderer.sprite;
    19.         this.pairs = new Dictionary<Sprite, PolygonCollider2D>();
    20.         this.pairs.Add(this.spriteRenderer.sprite, this.AddComponent<PolygonCollider2D>());
    21.         this.pairs[this.spriteRenderer.sprite].enabled = true;
    22.         this.pairs[this.spriteRenderer.sprite].isTrigger = true;
    23.     }
    24.  
    25.     // Update is called once per frame
    26.     protected void Update() {
    27.         this.HitDecisionUpdate();
    28.     }
    29.  
    30.    private void HitDecisionUpdate() {
    31.         if (this.sprite == this.spriteRenderer.sprite) {
    32.             return;
    33.         }
    34.         this.sprite = this.spriteRenderer.sprite;
    35.         foreach (var temp in this.pairs.Values) {
    36.             temp.enabled = false;
    37.             temp.isTrigger = this.baseObjectParameter.isTrigger;
    38.         }
    39.         if (!this.pairs.ContainsKey(this.sprite)) {
    40.             this.pairs.Add(this.sprite, this.AddComponent<PolygonCollider2D>());
    41.         }
    42.         this.pairs[this.sprite].enabled = true;
    43.     }
    The result worked, but it was uncommonly slow.
    So I decided to use Reset() to generate a PolygonCollider decision on attach.
    However, I do not know how to get a group of sprites registered in the 2d animation.
    If you know how to solve this or a better way to do it, please let me know.