选择英雄,暴君,青巫,风灵,代码控制界面显示

这里写图片描述

这里写图片描述

这里写图片描述
实现的功能是,能根据你选的男女,不同的类型,会出现不同的人物模型,同时左上角的签名和下面的名称也会改变,原本想点击骰子可以随机产生名字,不过还没有实现

(男-女,暴君-青巫-风灵,选一个上一个就会变暗)这个功能用到两个脚本,不是我自己写的,老大写好的,我直接拿来用的
核心代码:

using UnityEngine;
using System.Collections;
public class UIOption : MonoBehaviour {
    [SerializeField]
    private UISprite selected;
//    [SerializeField]
//    private UISprite unSelected;
    void OnClick()
    {
        selected.alpha = 1;
    }
    void Start()
    {
        ResetOption();
        if(this.name =="male "){
            this.GetComponent<UISprite>().alpha = 1;
        }
    }
    void ResetOption()
    {
        selected.alpha = 0;
        //unSelected.alpha = 1;
    }
}

不过吧我觉得第二个参数有没有都行,所以就删了,不影响功能

using UnityEngine;
using System.Collections;
public class UIRoleStyleOptionWindowCtr : UIWindowCtrlBase {
    private UIOption[] optionArray;
    protected override void OnStart()
    {
        base.OnStart();
        optionArray = transform.GetComponentsInChildren<UIOption>();
        for (int i = 0; i < optionArray.Length;i++ )
        {
            UIEventListener.Get(optionArray[i].gameObject).onClick += OnOptionClick;
        }
    }
    void OnOptionClick(GameObject option)
    {
        for (int i = 0; i < optionArray.Length; i++)
        {
            if (option.GetComponent<UIOption>() != optionArray[i]) {
                optionArray[i].gameObject.SendMessage("ResetOption");
            }
        }
    }
}

以男女为例,我实际上是四张图片,两张亮的,两张暗的,暗的在上面
这里写图片描述这里写图片描述
暗的图片要点击所以加上box碰撞器,button脚本,还有上面的Option脚本,参数是那个亮的图片,亮的图片上面不用挂任何东西,
这里写图片描述
暗的图片上一级就是选择的Container上挂另一个脚本,UIRoleStyleOptionWindowCtr,这样按理来说就可以实现了,运行后,点男的亮,点女的,女亮,男暗,只能选一个,

但是我经常会出现不稳定的状况,步骤都对,效果就是不对,我也是疯了,一遍一遍的做,直到它正常了,天知道,我做完运行成功后,激动得哭了。。。
这里写图片描述
其实我希望达到的效果是性别男时,出现的是三个男头像,因为这次都是用代码正规的做的,我觉得用SetActive还是不大正规,应该还有别的更好的方法,这一点等以后我来补充,

第二部分,人物的出现,我是把人物模型放到了高出,刚好看不到的位置,选择这个模式,就用代码改变人物的坐标,这个的升级版是人物出现的时候执行一个跳下的动作,不过还没有做,我也没找到想相关的动作

using UnityEngine;
using System.Collections;
public class button : MonoBehaviour {
    private Sex sex = Sex.Boy;//默认选择性别男
    private Name name = Name.mojun;//默认选择人物是暴君
    private ChooseHero hero = ChooseHero.Warrior;//默认出现的人物模型是男暴君
    public GameObject[] héros;//保存人物模型的
    public GameObject[] hero name;//保存的是英雄的名字,用于下面输入框的显示
    private int beindex = 1;//上一个选择的人物模型代号
    public int index = 0;//当前选择的人物模型
    private int beindexname = 1;//上一个选择的人物的名字
    public int indexname = 0;//当前的名字
    private GameObject boy;//男性的头像
    private GameObject girl;//女性的头像
    public UILabel label;//下面那个显示的人物的名字
    void Start () {
        gril = GameObject.Find ("female_touxiang");
        boy = GameObject.Find ("man_touxiang");
        BindClick();
        Showhero ();
        gril.SetActive (false);
        boy.SetActive (false);

    }
    void Update () {
    }
    //绑定点击回调函数
    void BindClick(){
        UIOption[] btnArr2 = transform.GetComponentsInChildren<UIOption>();//限制在本窗口 
        //因为这些按钮我都有UIOption脚本,所以通过这个来找到所有的按钮
        for(int i = 0;i<btnArr2.Length;i++){
            UIEventListener.Get(btnArr2[i].gameObject).onClick += Click;//添加事件,这里有一个注意点,因为前面的登录界面,用了一次这个,所以这里再用就得把这两处的=换成+=,不然没效果,我觉得是覆盖了
        }
    }
    //点击的回调函数
    void Click(GameObject btnObj){
        Debug.Log (btnObj.name);
        switch (btnObj.name) {
        case "male ":
            sex = Sex.Boy;
            gril.SetActive(false);//笨方法来控制头像的消失和出现
            boy.SetActive(true);
            break;
        case "female":
            sex = Sex.Gril;
            boy.SetActive(false);
            gril.SetActive(true);
            break;
        case "baojun":
            name = Name.mojun;
            break;
        case "fengling":
            name = Name.fengling;
            break;
        case "qingwu":
            name = Name.qingwu;
            break;

        default:
            break;
        }
        Showhero ();
    }
    public void Showhero(){
        if(sex ==Sex.Boy&&name ==Name.mojun){
            index = 0;//
            indexname = 0;//
            label.text = "Archer";
        }
        if(sex ==Sex.Boy&&name ==Name.fengling){
            index = 1;
            indexname =1;
            label.text = "Mage";
        }
        if(sex ==Sex.Boy&&name ==Name.qingwu){
            index = 2;
            indexname = 2;
            label.text = "Warrior";
        }
        if(sex ==Sex.Gril&&name ==Name.mojun){
            index = 3;
            indexname =0;
            label.text= "Archer";
        }
        if(sex ==Sex.Gril&&name ==Name.fengling){
            index = 4;
            indexname =1;
            label.text= "Mage";
        }
        if(sex ==Sex.Gril&&name ==Name.qingwu){
            index = 5;
            indexname =2;
            label.text= "Warrior";
        }
        if(index ==beindex){
            return;//表示再返回新的一轮的时候,例如默认男暴君,重新选择男暴君的时候
        }
        if(indexname==beindexname){
            return;//同理,
        }
        heros [index].transform.localPosition = new Vector3 (2,-675,1);//上面看不到的位置
        heros [beindex].transform.localPosition =new Vector3 (2,-235,1);//跳下来的位置

        beindex = index;//从下面再到上面消失不见

        heroname [indexname].transform.localPosition = new Vector3 (-211,121,0);
        heroname [beindexname].transform.localPosition =new Vector3 (-211,321,0);

        beindexname = indexname;

//这个位置跳跃我出过一次错误,一开始写的是transform.position,但是运行后发现,人物下来的时候总会偏移,所以改成了transform.localPosition,这样就好了
    }

}

针对这个代码显示界面,因为前面有一个登录注册的框架了,所以直接改就行了,不过还是要自己写几个脚本,为了方便,我把所有NGUI上的都做成了一个预设体,我怕我分的太细,我会乱,实际上已经乱了,我是在分不清东西南北之后才弄成一个的,一开始我跟贤惠小媳妇一样,一个一个分的可细了,结果发现到后面没发现了,因为稍微有一点不一样我就需要自己重写脚本,快赶上重新做一个框架了,
这里写图片描述
这是在原来的基础上新增的几个,
自此,这选择界面就算告一段落了,我还要写主界面,所以等我有时间了回来再完善,

事实上,我今天写主界面的功夫,回头再打开它,人物选择上面就有一点不对了,一天不召见,就敢跟我尥蹶子,我也是无奈了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值