C# 触摸按钮时更改玩家的精灵
我试图改变一个场景中玩家的精灵。 我有一个脚本,它管理当你从一个播放器切换到另一个播放器时激活的脚本。 我想添加一个功能,当切换非活动玩家时,黑白特击一个精灵,而活动玩家则捕捉彩色精灵。 有人能帮忙吗,因为玩家第一个和第二个游戏对象上的精灵没有改变 代码如下:C# 触摸按钮时更改玩家的精灵,c#,unity3d,unity5,C#,Unity3d,Unity5,我试图改变一个场景中玩家的精灵。 我有一个脚本,它管理当你从一个播放器切换到另一个播放器时激活的脚本。 我想添加一个功能,当切换非活动玩家时,黑白特击一个精灵,而活动玩家则捕捉彩色精灵。 有人能帮忙吗,因为玩家第一个和第二个游戏对象上的精灵没有改变 代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; public class switchCharacter : MonoBeha
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class switchCharacter : MonoBehaviour {
public GameObject Psyco1;
public GameObject Psyco2;
public PlayerControllerPsyco1 script1;
public PlayerControllerPsyco2 script2;
public Sprite sprite1; // Psyco1 color
public Sprite sprite2; // Psyco2 decolorized
public SpriteRenderer spriteRendererPsyco1;
public SpriteRenderer spriteRendererPsyco2;
void Start (){
script1 = Psyco1.GetComponent<PlayerControllerPsyco1>();
script2 = Psyco2.GetComponent<PlayerControllerPsyco2>();
script1.enabled = true;
script2.enabled = false;
spriteRendererPsyco1 = GetComponent<SpriteRenderer>();
spriteRendererPsyco2 = GetComponent<SpriteRenderer>();
if (spriteRendererPsyco1.sprite == null) // if the sprite on spriteRenderer is null then
spriteRendererPsyco1.sprite = sprite1; // set the sprite to Psyco1 Color
}
void Update (){
if (Input.GetButtonDown("switch1")){
script1.enabled = !script1.enabled;
script2.enabled = !script2.enabled;
//spriteRendererPsyco1.sprite = sprite2;
DesaturizePsyco (); // call method to change Psyco sprite
}
}
public void changeCharacterBtn() {
if (script1.enabled = !script1.enabled) // if the spriteRenderer sprite = sprite1 then change to sprite2
{
GameObject.Find ("PlayerFirst").GetComponent<SpriteRenderer> ().sprite = sprite2;
}
//script1.enabled = !script1.enabled;
if (script2.enabled = !script2.enabled;) // if the spriteRenderer sprite = sprite1 then change to sprite2
{
GameObject.Find ("PlayerSecond").GetComponent<SpriteRenderer> ().sprite = sprite1;
}
//script2.enabled = !script2.enabled;
DesaturizePsyco ();
}
void DesaturizePsyco ()
{
if (spriteRendererPsyco1.sprite == sprite1) // if the spriteRenderer sprite = sprite1 then change to sprite2
{
GameObject.Find ("PlayerFirst").GetComponent<SpriteRenderer> ().sprite = sprite2;
}
else
{
spriteRendererPsyco1.sprite = sprite1; // otherwise change it back to sprite1
}
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类角色:单一行为{
公共游戏对象Psyco1;
公共游戏对象Psyco2;
公共播放控制器SYCO1脚本1;
公共播放控制器SYCO2 script2;
公共精灵精灵1;//Psyco1颜色
公共雪碧雪碧2;//Psyco2脱色
公共喷洒者喷洒者SYCO1;
公共喷雾剂喷雾剂2;
无效开始(){
script1=Psyco1.GetComponent();
script2=Psyco2.GetComponent();
script1.enabled=true;
script2.enabled=false;
SpriteEnderPsyco1=GetComponent();
spritenderpsyco2=GetComponent();
if(spritenderpsyco1.sprite==null)//如果spritenderer上的精灵为null,则
spriterenderpsyco1.sprite=sprite1;//将精灵设置为Psyco1颜色
}
无效更新(){
if(Input.GetButtonDown(“开关1”)){
script1.enabled=!script1.enabled;
script2.enabled=!script2.enabled;
//spriterenderpsyco1.sprite=sprite2;
DesaturizePsyco();//调用方法更改Psyco sprite
}
}
public void changeCharacterBtn(){
if(script1.enabled=!script1.enabled)//如果spriteRenderer sprite=sprite1,则更改为sprite2
{
GameObject.Find(“PlayerFirst”).GetComponent().sprite=sprite2;
}
//script1.enabled=!script1.enabled;
if(script2.enabled=!script2.enabled;)//如果spriteender sprite=sprite1,则更改为sprite2
{
GameObject.Find(“PlayerSecond”).GetComponent().sprite=sprite1;
}
//script2.enabled=!script2.enabled;
DesaturizePsyco();
}
void DesaturizePsyco()
{
if(spritenderpsyco1.sprite==sprite1)//如果spritendersprite=sprite1,则更改为sprite2
{
GameObject.Find(“PlayerFirst”).GetComponent().sprite=sprite2;
}
其他的
{
spritendererpsyco1.sprite=sprite1;//否则将其更改回sprite1
}
}
}
首先尝试总是发布一个最小的精简脚本:这里的changeCharacterBtn()
方法没有用(我已经建议对您的帖子进行编辑)。在if(script2.enabled=!script2.enabled;)
中也有一个输入错误。而且我猜你的代码在播放时会抛出错误:你检查控制台了吗
关于您的脚本,以下是我看到的错误:
而不是spritenderpsyco1=GetComponent()
spritenderpsyco1=Psyco1.GetComponent()代码>(与Psyco2相同)
、script1
、script2
和spritenderpsyco1
应设置为私有,因为您在spritenderpsyco2
中引用了它们(无需在Inspector上显示)Start()
public class switchCharacter : MonoBehaviour
{
public GameObject Psyco1;
public GameObject Psyco2;
private PlayerControllerPsyco1 script1;
private PlayerControllerPsyco1 script2;
public Sprite sprite1; // Psyco1 color
public Sprite sprite2; // Psyco2 decolorized
private SpriteRenderer spriteRendererPsyco1;
private SpriteRenderer spriteRendererPsyco2;
void Start()
{
script1 = Psyco1.GetComponent<PlayerControllerPsyco1>();
script2 = Psyco2.GetComponent<PlayerControllerPsyco1>();
script1.enabled = true;
script2.enabled = false;
spriteRendererPsyco1 = Psyco1.GetComponent<SpriteRenderer>();
spriteRendererPsyco2 = Psyco2.GetComponent<SpriteRenderer>();
if(spriteRendererPsyco1.sprite == null) // if the sprite on spriteRenderer is null then
spriteRendererPsyco1.sprite = sprite1; // set the sprite to Psyco1 Color
}
void Update()
{
if(Input.GetButtonDown("switch1"))
{
script1.enabled = !script1.enabled;
script2.enabled = !script2.enabled;
//spriteRendererPsyco1.sprite = sprite2;
DesaturizePsyco(); // call method to change Psyco sprite
}
}
void DesaturizePsyco()
{
if(spriteRendererPsyco1.sprite == sprite1) // if the spriteRenderer sprite = sprite1 then change to sprite2
{
GameObject.Find("PlayerFirst").GetComponent<SpriteRenderer>().sprite = sprite2;
}
else
{
spriteRendererPsyco1.sprite = sprite1; // otherwise change it back to sprite1
}
}
}
公共类切换字符:单行为
{
公共游戏对象Psyco1;
公共游戏对象Psyco2;
私人播放控制器SYCO1脚本1;
私人播放控制器SYCO1脚本2;
公共精灵精灵1;//Psyco1颜色
公共雪碧雪碧2;//Psyco2脱色
私人喷灌商SYCO1;
私人喷灌商SYCO2;
void Start()
{
script1=Psyco1.GetComponent();
script2=Psyco2.GetComponent();
script1.enabled=true;
script2.enabled=false;
spritendererpsyco1=Psyco1.GetComponent();
spritenderpsyco2=Psyco2.GetComponent();
if(spritenderpsyco1.sprite==null)//如果spritenderer上的精灵为null,则
spriterenderpsyco1.sprite=sprite1;//将精灵设置为Psyco1颜色
}
无效更新()
{
if(Input.GetButtonDown(“开关1”))
{
script1.enabled=!script1.enabled;
script2.enabled=!script2.enabled;
//spriterenderpsyco1.sprite=sprite2;
DesaturizePsyco();//调用方法更改Psyco sprite
}
}
void DesaturizePsyco()
{
if(spritenderpsyco1.sprite==sprite1)//如果spritendersprite=sprite1,则更改为sprite2
{
GameObject.Find(“PlayerFirst”).GetComponent().sprite=sprite2;
}
其他的
{
spritendererpsyco1.sprite=sprite1;//否则将其更改回sprite1
}
}
}
作为旁注,以下是关于一般编程建议的几点内容:
- 考虑使用大写字母作为类名的开头(这是C#中的一般约定)
- 使用Spple比较来确定哪个玩家当前正在进行的可能不是最稳健的方式(可能考虑使用<代码> Boo.<代码>变量)代替
- 始终尽可能保持代码干净(不要使用双空格,使用大写字母或不使用大写字母保持相同的命名约定:
,但Psyco1
,…)script1
希望这有帮助,这没有改变脚本的状态,问题仍然存在。我在发布脚本时尝试了两个游戏对象,每个游戏对象都有一个SpriteRender组件(其中一个叫做PlayerFirst)。它工作得很好。您确定所有字段都已分配到Inspector中吗?屏幕上是否显示任何错误