首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要在运行时统一2d替换sprite

我需要在运行时统一2d替换sprite
EN

Game Development用户
提问于 2016-10-25 16:34:43
回答 2查看 487关注 0票数 1

我需要帮助,我有一些代码在团结,应该取代玩家的精灵在运行时。但是,这段代码不能正确地使其正确,也不会进行更改。你能帮我一下吗?谢谢

代码语言:javascript
运行
复制
using UnityEngine;
using System.Collections;

public class PlayerBehavior : MonoBehaviour {

  public enum Skins 
  {
    normal,
    verde
  }

  private Skins skinAtual; 

  private Rigidbody2D player;
  public float height;
  private Transform posicao;
  public float jumpForce = 10f;
  private AudioSource audio;
  public DeathMenu deathMenu;
  private float initialX;
  public float goBackSpeed = 10f;
  Object[] BGMusics;
  //private SpriteRenderer sprite;

  public SpriteRenderer[] sprites;

  public Sprite skinVerde, skinNormal; 


  void Start () {

    //skinAtual = Skins.normal;
    skinAtual = Skins.verde;
    //sprite = GetComponent<SpriteRenderer> ();
    player = GetComponent<Rigidbody2D> ();
    BGMusics = Resources.LoadAll ("Music/BG");
    initialX = transform.position.x;


    //skinVerde = Resources.Load<Sprite> ("Sprites/BOYrECORTADOvERDE");
    skinVerde = Resources.Load<Sprite> ("Sprites/PersonagemFatiado_verde");
    skinNormal = Resources.Load<Sprite> ("Sprites/PersonagemFatiado");

  }

  private void UpdateSkin(Sprite novaSprite)
  {
    foreach (var item in sprites) {
      item.sprite = novaSprite;
    }
  }


  void Update () 
  {

    switch (skinAtual) {

    case Skins.normal:
      UpdateSkin (skinNormal);
      break; 
    case Skins.verde:
      UpdateSkin (skinVerde);
      break;
    default:
      break;
    }

    if (Input.GetKeyDown (KeyCode.Escape))
      Pause.INSTANCE.Pausing ();

    if (Pause.isPaused)
      return;       

    if (Application.isEditor)
      inputComputer ();
    else if(Application.isMobilePlatform)
      inputMobile ();

    FixePosition ();
  }

  void FixePosition()
  {
    if (transform.position.x <= initialX) return;

    var newPX = Mathf.Lerp (transform.position.x, initialX, Time.deltaTime * goBackSpeed);
    transform.position = new Vector3 (newPX, transform.position.y); 

  } 

  private void inputMobile(){
    if(Input.GetMouseButtonDown(0))
      playerJump ();
  }

  private void inputComputer(){

    if(Input.GetKeyDown(KeyCode.Space))
      playerJump ();
  }

  private void playerJump(){
    if (player.transform.position.y <= -8.93000f ) 
    {
      player.AddForce (new Vector2 (0, height * jumpForce), ForceMode2D.Impulse);
      MusicManager.INSTANCE.JumpSound ();
    }
  }

  void PlayRandom(){
    int i = Random.Range(0, BGMusics.Length); // index sortido
    AudioClip m = (AudioClip) BGMusics[i]; // uma referencia ao audioclip sortido
    GetComponent<AudioSource>().PlayOneShot(m); // tocamos esse audioclip
  }

  void Reset(){
    GetComponent<AudioSource>().playOnAwake = false; // aqui tira o play on awake do audio source
  }


  // CONFIGURANDO OS TRIGGERS E SUAS ACOES
  void OnTriggerEnter2D(Collider2D col)
  {
    if(col.gameObject.CompareTag("Heart"))
    {
      Score.INSTANCE.AddPoints ();
      col.gameObject.SetActive (false);
      Handheld.Vibrate ();
      //TOCAR
      PlayRandom ();

    } 
    else 
    {
      if (col.gameObject.tag == "Doctor") 
      {
        MusicManager.INSTANCE.DeathSong ();
        player.gameObject.SetActive (false);
        Handheld.Vibrate ();
        ToggleEndMenu();
      }
    }

  }

  void ToggleEndMenu()
  {
    deathMenu.ToggleEndMenu (Score.INSTANCE.GetScore ()); //Send to DeathMenu the Score value
  }
}
EN

回答 2

Game Development用户

发布于 2018-11-19 15:06:29

代码语言:javascript
运行
复制
private void UpdateSkin(Sprite novaSprite){
foreach (var item in sprites)
    item.sprite = novaSprite;
}

上面的函数使用了一个for-each循环来为您在类型sprites[]的顶部定义的spriteRenderer分配特定的top。

,以下是您可以做的:

  1. 确保在检查器选项卡中正确分配了SpriteRenderer引用。
  2. 确保skinVerde = Resources.Load<Sprite> ("Sprites/PersonagemFatiado_verde"); skinNormal = Resources.Load<Sprite> ("Sprites/PersonagemFatiado");

实际上是获取对精灵的引用而不是null。尝试在检查器选项卡中分配那些精灵,而不是那样加载,看看它是否有效。

提示:尝试使用print语句确保函数正在执行,并在按play按钮时注意编辑器中的错误,它们是一个生命保护程序。

票数 1
EN

Game Development用户

发布于 2019-08-26 15:55:39

您的对象应该在检查器中附加一个spriteRenderer组件。只需使用下面的代码更新:

代码语言:javascript
运行
复制
public Sprite mySprite;

this.GetComponent<SpriteRenderer>().sprite = mySprite;

我的雪碧是公开的所以你可以在巡官身上看到它。只需在任何事件中使用秒,就可以更改对象的sprite。

票数 0
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/132052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档