【问题标题】:UI Text ProblemsUI 文本问题
【发布时间】:2015-03-14 19:47:53
【问题描述】:

我或多或少是 Unity 的新手,我正在为 4.6 中的新 UI 内容而苦苦挣扎。基本上我想做的是每次玩家通过按下 w/a/s/d 进行移动动作时,我希望经过的回合数增加 1,并反映在 UI 中。这就是我现在拥有的角色移动控制器脚本:

public float speed;
public static int Turns;

void Update() 
{
    if (Input.GetKey(KeyCode.W)&& rigidbody2D.velocity.y == 0.0f && rigidbody2D.velocity.x == 0.0f ) 
    {
        rigidbody2D.AddForce(Vector2.up * speed); 
        Turns = Turns + 1;
    }

    if (Input.GetKey(KeyCode.A)&& rigidbody2D.velocity.y == 0.0f && rigidbody2D.velocity.x == 0.0 ) 
    {
        rigidbody2D.AddForce(-Vector2.right * speed);
        Turns = Turns + 1;
    }

    if (Input.GetKey(KeyCode.S)&& rigidbody2D.velocity.y == 0.0f && rigidbody2D.velocity.x == 0.0) 
    {
        rigidbody2D.AddForce(-Vector2.up * speed);
        Turns = Turns + 1;
    }

    if (Input.GetKey(KeyCode.D)&& rigidbody2D.velocity.y == 0.0f && rigidbody2D.velocity.x == 0.0) 
    {
        rigidbody2D.AddForce(Vector2.right * speed);
        Turns = Turns + 1;
    }
}

这是我试图用来将文本更改为转数的脚本,但尽管没有突出显示错误等,Unity 不会认为它是附加到 UI 文本的有效脚本对象:

public class TurnManager : MonoBehaviour
{
    public Text text;

    void Awake()
    {
        text = GetComponent <Text> ();
    }

    void Update()
    {
        text.text = PlayerController.Turns.ToString();
    }
}

这是我从教程中收集到的,但我觉得它真的错了,哈哈。谁能帮我弄清楚我应该有什么来完成这项工作?

【问题讨论】:

    标签: c# user-interface unity3d


    【解决方案1】:

    您的代码是正确的,您只需要进行一些更改。我假设您发布的第一个脚本是 PlayerController。如果您已将一个刚体2D 附加到您的层次结构中的游戏对象,请小心,如果您不将重力比例设置为 0,您的rigidbody2D.velocity.y 将永远不会为零,因为该对象将开始下落(除非它在对撞机上)。

    但是TurnManager 你必须从 UI 设置 Text 属性。请看下图:

    您需要在 TurnManager 脚本上设置 Text UI 对象。 TurnManager 的代码将是:

    using UnityEngine;
    using UnityEngine.UI;
    
    public class TurnManager : MonoBehaviour 
    {
        public Text text;
    
        void Update()
        {
            text.text = PlayerController.Turns.ToString();
        }
    }
    

    完成此更改后,您将正确读取 PlayerController 脚​​本中的转数。

    希望对你有帮助。

    【讨论】:

    • 非常感谢您抽出宝贵时间查看并回答我!我在附加我的 TurnManager 时遇到了麻烦 - Unity 认为它不是一个有效的脚本,不会让我将它分配给任何东西......不确定问题是什么,因为它似乎编译得很好。
    • 要将任何脚本附加到游戏对象,脚本必须继承自 Monobehavior。确保将文件保存在 Monodevelop 中,您应该可以将对象附加到层次结构中的任何游戏对象
    【解决方案2】:

    类名和文件名一样吗?否则 Unity 只会说脚本不存在或其他东西。如果您从编辑器创建脚本,然后从 mono develop 或 Visual Studio 更改类名称,则会发生这种情况。最好的解决方案是删除脚本并在编辑器中使用正确的名称重新生成。

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      相关资源
      最近更新 更多