2017-07-21 13 views
0

私は、playerprefsとドロップダウンUI要素を使用してスプライトを更新しようとしています。 昼夜を選択すると、シーンの再起動/開始時にレンダリングされるスプライトが決まります。しかし、私が昼夜を選択すると、それは動作しません。 ロード時にスプライトを変更していません。私はスプライトが正しくインスペクタにセットされているようにしています。あなたは、階層内のImageコンポーネントを持っている場合は、Imageコンポーネントないスプライトにアクセスする必要がありUnity3Dスプライトが更新されない

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 

public class repeatingBackground : MonoBehaviour { 

    private BoxCollider2D groundCollider; 
    private float groundHorizontalLength; 

    private Sprite spriteRenderer; 
    public Sprite daySprite; 
    public Sprite nightSprite; 

    private int bgImg; 

    void Start() { 

     bgImg = PlayerPrefs.GetInt ("backgroundImg"); 
     spriteRenderer = GetComponent<Sprite>(); 
     if (bgImg == 1 || bgImg == 0) 
      spriteRenderer = daySprite; 
     else if (bgImg == 2) 
      spriteRenderer = nightSprite; 
     groundCollider = GetComponent<BoxCollider2D>(); 
     groundHorizontalLength = groundCollider.size.x; 
    } 
    // Update is called once per frame 
    void Update() { 
     if (transform.position.x < -groundHorizontalLength) { 
      RepositionBackground(); 
     } 
    } 
    public void OnValueChanged(Dropdown value) 
    { 
     PlayerPrefs.SetInt ("backgroundImg", value.value); 
     PlayerPrefs.Save(); 
    } 
    private void RepositionBackground() 
    { 
     Vector2 groundOffset = new Vector2 (groundHorizontalLength * 2f, 0); 
     transform.position = (Vector2)transform.position + groundOffset; 
    } 
} 

答えて

1

、直接ゲームオブジェクトに添付「スプライト」のようなものはありません、それはスプライトレンダラーまたはイメージのいずれかを使用して行われます。

spriteRenderer = GetComponent<SpriteRenderer>(); 
    if (bgImg == 1 || bgImg == 0) 
     spriteRenderer.sprite = daySprite; 
    else if (bgImg == 2) 
     spriteRenderer.sprite = nightSprite; 
(あなたがSpriteRendererを使用している場合)

spriteRenderer = GetComponent<Image>(); 
if (bgImg == 1 || bgImg == 0) 
    spriteRenderer.sprite = daySprite; 
else if (bgImg == 2) 
    spriteRenderer.sprite = nightSprite; 

または(あなたが画像を使用している場合)には、この

spriteRenderer = GetComponent<Sprite>(); 

を変更してみてください

関連する問題