首页 > 解决方案 > 精灵在创建者计算机上的构建中正确更改,但在任何其他设备上都没有

问题描述

构建应用程序会创建一个完全正常工作的 .exe 或 .app,当它完美运行时,它具有所有功能,最重要的是,可以正确更改精灵。提到的精灵变化是当用户向不同方向移动并且脚本相应地改变玩家游戏对象上的精灵时。一切都在编辑器和本地构建(.exe)中正常工作。

问题是,当构建文件夹(包括.exe)被发送到任何其他计算机时,精灵停止变化。仅显示最初用于渲染 GameObject 的主要精灵。

我试图从单个文件精灵切换到精灵图,但这也没有解决问题。

最奇怪的是,在本地机器和编辑器上的每个构建中,一切都按预期工作,但在任何其他设备(PC/Windows、Mac/Mac OS X)上都没有。

PS!我曾想过是否是精灵文件未包含在最终构建中的问题,但将所有精灵添加到单个精灵地图上应该可以解决问题。此外,一切都在本地计算机上运行。

播放器控件.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
using UnityEngine.Networking;

public class PlayerControls : NetworkBehaviour
{
    public Sprite westView;
    public Sprite eastView;
    public Sprite northView;
    public Sprite southView;

    public GameObject player;

    public float speed = 5f;

    private Tilemap tilemap;

    void Start()
    {
        tilemap = GameObject.Find("Grid/Walls").GetComponent<Tilemap>();
        player.GetComponent<EntityMove>().setSpeed(speed);
        player.GetComponent<EntityMove>().setTiles(tilemap);
        player.GetComponent<ControlSprite>().setSprites(new Sprite[] { northView, westView, eastView, southView});
    }

    void Update()
    {
        if (!isLocalPlayer)
        {
            return;
        }
        if (Input.GetKey(KeyCode.W)) { changeSprite(0); }
        else if (Input.GetKey(KeyCode.A)) { changeSprite(1); }
        else if (Input.GetKey(KeyCode.D)) { changeSprite(2); }
        else if (Input.GetKey(KeyCode.S)) { changeSprite(3); }
        player.GetComponent<EntityMove>().setTiles(tilemap);
    }

    [Client]
    private void changeSprite(int newDirection)
    {
        if (newDirection == 0) { gameObject.GetComponent<ControlSprite>().newSprite(player, northView, 0); }
        else if (newDirection == 1) { gameObject.GetComponent<ControlSprite>().newSprite(player, westView, 1); }
        else if (newDirection == 2) { gameObject.GetComponent<ControlSprite>().newSprite(player, eastView, 2); }
        else if (newDirection == 3) { gameObject.GetComponent<ControlSprite>().newSprite(player, southView, 3); }
    }
}

PS!公共精灵链接到预制资产和精灵。

控件精灵.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class ControlSprite : NetworkBehaviour
{
    private Sprite[] possibleSprites;

    [Command]
    void CmdProvideSpriteChangeToServer(GameObject entity, int newDirection)
    {
        entity.GetComponent<SpriteRenderer>().sprite = possibleSprites[newDirection];

        RpcSendSpriteChange(entity, newDirection);
    }

    [ClientRpc]
    void RpcSendSpriteChange(GameObject entity, int newDirection)
    {
        if (isLocalPlayer) return;

        entity.GetComponent<SpriteRenderer>().sprite = possibleSprites[newDirection];
    }

    public void newSprite(GameObject entity, Sprite newSprite, int newDirection)
    {
        entity.GetComponent<SpriteRenderer>().sprite = newSprite;
        CmdProvideSpriteChangeToServer(entity, newDirection);
    }

    public void setSprites(Sprite[] newSprites) { possibleSprites = newSprites; }
}

播放器预制件

标签: unity3dbuildsprite

解决方案


原来尝试玩游戏的人使用箭头键而不是 WASD 来移动,但脚本仅在按下 WASD 键时改变精灵的方向。


推荐阅读