如果你使用过它,这与happyfuntimes plugin有关。
我正在尝试制作一款游戏并停留在显示得分的位置以及用户在手机上播放时在大屏幕上显示的名称。(我已经尝试在移动屏幕上显示名称和得分了在样品中看到不需要那样)。如果您使用了happyfuntimes插件,请建议如何做到这一点。
我可以看到HFTgamepad输入具有我想要访问的公共GameObject播放器名称,我是否必须制作数组?
public string playerName;
我想把这些名字放在数组上。
答案 0 :(得分:0)
以统一的方式显示任何东西都是正常的统一问题,对于happyfuntimes并不特别。游戏显示高分榜,项目列表,库存清单等......玩家列表没有什么不同
Use the GUI system display text。
According to the docs如果你想动态生成UI,你应该制作预制件
所以基本上你会在场景中创建一个UI层次结构。当玩家被添加到游戏Instantiate
你的名字得分预制件时,搜索UI层次结构gameObject(在初始时执行),然后设置刚刚实例化的预制件的父级,使其位于UI层次结构中。
查找代表名称和分数的UI.Text
组件,并设置其text
属性。
There's various auto layout components to help layout your scores
当玩家断开Destroy
您在上面实例化的预制件时。
或......
相反,您可以使用旧的立即模式GUI。你制作一个GameObject,给它一个具有OnGUI功能的组件。在某处保留一份球员名单。在连接时将玩家添加到列表中,并在他们断开连接时将其从列表中删除。在你的OnGUI函数循环播放器列表中并调用GUI.Label
函数或类似函数来绘制每个名称和分数
这是一个被黑客攻击的例子。
假设你有一个PlayerScript
脚本组件,每个玩家都有一个公共访问者PlayerName
来获取玩家的名字,那么你可以制作一个GameObject并在其上放置这样的脚本。
using UnityEngine;
using System.Collections.Generic;
public class ExamplePlayerListGUI : MonoBehaviour
{
static ExamplePlayerListGUI s_instance;
List<PlayerScript> m_players = new List<PlayerScript>();
static public ExamplePlayerListGUI GetInstance()
{
return s_instance;
}
void Awake()
{
if (s_instance != null)
{
Debug.LogError("there should only be one ExamplePlayerListGUI");
}
s_instance = this;
}
public void AddPlayer(PlayerScript bs)
{
m_players.Add(bs);
}
public void RemovePlayer(PlayerScript bs)
{
m_players.Remove(bs);
}
public void OnGUI()
{
Rect r = new Rect(0, 0, 100, m_players.Count * 20);
GUI.Box(r, "");
r.height = 20;
foreach(var player in m_players)
{
GUI.Label(r, player.PlayerName);
r.y += 20;
}
}
}
然后 PlayerScript
可以在其ExamplePlayerListGUI.GetInstance().AddPlayer
函数中调用Start
,并在ExamplePlayerListGUI.GetInstance().RemovePlayer
函数中调用OnDestroy
public PlayerScript : MonoBehaviour
{
private string m_playerName;
...
public string PlayerName
{
get
{
return m_playerName;
}
}
void Start()
{
...
ExamplePlayerListGUI playerListGUI = ExamplePlayerListGUI.GetInstance();
// Check if it exists so we can use it with or without the list
if (playerListGUI != null)
{
playerListGUI.AddPlayer(this);
}
}
void OnDestroy()
{
...
ExamplePlayerListGUI playerListGUI = ExamplePlayerListGUI.GetInstance();
if (playerListGUI != null)
{
playerListGUI.RemovePlayer(this);
}
}
}