//主菜单UI类
public class MainMenuUI : MonoBehaviour
{[SerializeField]
private List<Button> btns;
[SerializeField]
private List<Mesh> headMeshList;
private int headIndex; //头的索引
[SerializeField]
private SkinnedMeshRenderer headRenderer;
[SerializeField]
private List<Mesh> handeshList;
[SerializeField]
private List<Mesh> footMeshList;
private GameObject player;
private SkinnedMeshRenderer[] renderers;
private void Awake()
{
player = GameObject.FindGameObjectWithTag("Player");
renderers = player.GetComponentsInChildren<SkinnedMeshRenderer>();
foreach (Button item in btns)
{
//注册点击事件。
UIEventListener.Get(item.gameObject).onMouseClick += MainMenuUI_onMouseClick;
}
}
private void MainMenuUI_onMouseClick(GameObject go, BaseEventData eventData)
{
switch (go.name)
{
case "playBtn":
///跳转到游戏场景。
SceneManager.LoadScene("gameScene");
break;
case "blueBtn":
changeColor(Color.blue);
break;
case "cyanBtn":
changeColor(Color.cyan);
break;
case "greenBtn":
changeColor(Color.green);
break;
case "purpleBtn":
changeColor(new Color(124f / 255, 35f / 255, 124f / 255,1));
break;
case "redBtn":
changeColor(Color.red);
break;
case "headRight":
changeHead(1);
break;
case "headLeft":
changeHead(0);
break;
default:
break;
}
}
/// <summary>
/// 换头的方法
/// </summary>
/// <param name="v">0 LEFT 1 RIGHT</param>
private void changeHead(int leftOrRight)
{
if(leftOrRight==0)//左
{
headIndex--;
if(headIndex<0)
{
headIndex = headMeshList.Count - 1;
}
}
else
{
headIndex++;
if (headIndex > headMeshList.Count - 1)
{
headIndex = 0;
}
}
Mesh mesh = headMeshList[headIndex];
headRenderer.sharedMesh = mesh;
G.selectedHeadMesh = mesh;
}
private void changeColor(Color color)
{
foreach (SkinnedMeshRenderer item in renderers)
{
item.material.color = color;
}
G.selectedColor = color;
}
}
***********************************************************************************************
public delegate void MyDel(GameObject go, BaseEventData eventData);
/// <summary>
/// 给UGUI里的UI注册事件的工具类。
/// </summary>
public class UIEventListener : EventTrigger
{
public event MyDel onMouseClick; //点击事件
public event MyDel onMouseDown; //按下事件
///.....可以写自己的各种事件
public static UIEventListener Get(GameObject obj)
{
UIEventListener listener = obj.GetComponent<UIEventListener>();
if (listener == null)
{
listener = obj.AddComponent<UIEventListener>();
}
return listener;
}
public override void OnPointerClick(PointerEventData eventData)
{
if (onMouseClick != null)
{
onMouseClick(this.gameObject, eventData);
}
}
/// <summary>
/// UGUI触发OnPointerDown ,然后调用我们自己的事件,把触发事件的游戏对象传出去。
///
///
/// 按下事件。
/// </summary>
/// <param name="eventData"></param>
public override void OnPointerDown(PointerEventData eventData)
{
if (onMouseDown != null)
{
onMouseDown(this.gameObject, eventData);
}
}
}
***********************************************************************************************
public class G
{
public static Mesh selectedHeadMesh;
public static Mesh selectedHandMesh;
public static Mesh selectedFootMesh;
public static Color selectedColor = new Color(134/255f,183/255F,52/255F,1);
public static float AttackRange = 2.0f;
}
*************************************************************************************************
public class PlayerDress : MonoBehaviour
{
private SkinnedMeshRenderer[] renderers;
void Start()
{
renderers = this.GetComponentsInChildren<SkinnedMeshRenderer>();
init();
}
private void init()
{
foreach (SkinnedMeshRenderer item in renderers)
{
item.material.color = G.selectedColor;
if (item.name == "AHead")
{
if (G.selectedHeadMesh != null)
item.sharedMesh = G.selectedHeadMesh;
}
else if (item.name == "DHand")
{
if (G.selectedHandMesh != null)
item.sharedMesh = G.selectedHandMesh;
}
else if (item.name == "EFoot")
{
if (G.selectedFootMesh != null)
item.sharedMesh = G.selectedFootMesh;
}
}
}
}