要求:只能选中其中的一个炮台,且选中的炮台被监听到。
1、GameManger通过Create empty创建,用来放管理游戏的脚本。
2、TurretSwitch通过Create empty创建,在里面添加Toggle Group组件。
3、IsOn代表是否被选中
4、Group属性就是TurretSwitch,将多个炮台ui的Group属性同一后就分在了一个单选组里。
5、On Value Change(Boolean)能把监听到的IsOn作为Boolean属性传递给下面配置的方法中。
6、GameManager就是1中创建的GameManger
7、GameManager配置好后,选择那个下拉菜单就能选择GameManager的脚本中的创建的方法。
8、下面是GameManager中BuildManager脚本的内容,其中的OnLaserSelected方法对应监听LaserToggle单选ui,其它两个炮台的单选也一样,只是名字的区别而已。
BuildManager .cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BuildManager : MonoBehaviour
{
public TurretData laserTurretData;
public TurretData missileTurretData;
public TurretData standardTurretData;
//表示当前选择的炮台,要建造的炮台
public TurretData selectedTurretData;
//监听玩家选择的方法
public void OnLaserSelected(bool isOn)
{
Debug.Log(isOn);
//当该togger被选中,会把它的isOn当作参数传进来
if (isOn)
{
selectedTurretData = laserTurretData;
}
}
public void OnMissileSelected(bool isOn)
{
if (isOn)
{
selectedTurretData = missileTurretData;
}
}
public void OnStandardSelected(bool isOn)
{
if (isOn)
{
selectedTurretData = standardTurretData;
}
}
}
数据源
TurretData.cs
其中[System.Serializable]代表可以被序列化
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* 炮台数据类
*/
[System.Serializable]
public class TurretData
{
public GameObject turretPrefab; //炮台预制体
public int cost; //炮台价格
public GameObject turretUpgradedPrefab; //升级的炮台预制体
public int costUpgraded; //升级所需要的价格
public TurretType type; //炮台种类
}
/**
* 炮台种类
*/
public enum TurretType
{
LaserTurret,
MissileTurret,
StandardTurret
}