我需要帮助,我有一些代码在团结,应该取代玩家的精灵在运行时。但是,这段代码不能正确地使其正确,也不会进行更改。你能帮我一下吗?谢谢
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
}
}
发布于 2018-11-19 15:06:29
private void UpdateSkin(Sprite novaSprite){
foreach (var item in sprites)
item.sprite = novaSprite;
}
上面的函数使用了一个for-each循环来为您在类型sprites[]
的顶部定义的spriteRenderer
分配特定的top。
skinVerde = Resources.Load<Sprite> ("Sprites/PersonagemFatiado_verde");
skinNormal = Resources.Load<Sprite> ("Sprites/PersonagemFatiado");
实际上是获取对精灵的引用而不是null。尝试在检查器选项卡中分配那些精灵,而不是那样加载,看看它是否有效。
提示:尝试使用print语句确保函数正在执行,并在按play按钮时注意编辑器中的错误,它们是一个生命保护程序。
发布于 2019-08-26 15:55:39
您的对象应该在检查器中附加一个spriteRenderer
组件。只需使用下面的代码更新:
public Sprite mySprite;
this.GetComponent<SpriteRenderer>().sprite = mySprite;
我的雪碧是公开的所以你可以在巡官身上看到它。只需在任何事件中使用秒,就可以更改对象的sprite。
https://gamedev.stackexchange.com/questions/132052
复制相似问题