Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 触摸按钮时更改玩家的精灵_C#_Unity3d_Unity5 - Fatal编程技术网

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
    应设置为私有,因为您在
    Start()
    中引用了它们(无需在Inspector上显示)
下面是您的脚本的更正版本:

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中吗?屏幕上是否显示任何错误