150人加入学习
(16人评价)
Unity中级案例 - 单机斗地主

制作完成于 2018-07-18 基于Unity2017.2

价格 ¥ 312.00

只使用一个左键点击的方案

类:LearnButton

<

using UnityEngine;
using UnityEngine.UI;
using System;
using UnityEngine.EventSystems;

public class LearnButton : MonoBehaviour,IPointerClickHandler,IPointerExitHandler,IPointerUpHandler,IPointerDownHandler,IPointerEnterHandler{

    /// <summary>
    /// 划过选中
    /// </summary>
    public event Action HighlightedBtn;
    /// <summary>
    /// 点击选中
    /// </summary>
    public event Action<PointerEventData> PressedBtn;

    public void OnPointerClick(PointerEventData eventData)
    {
        if (PressedBtn != null)
            PressedBtn(eventData);
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        if (HighlightedBtn != null)
            HighlightedBtn();
    }

    public void OnPointerDown(PointerEventData eventData)
    {

    }

    public void OnPointerUp(PointerEventData eventData)
    {
        
    }
}

>

类:CardUI

<

private void Btn_HighlightedBtn()
    {
        if (Input.GetMouseButton(0))
        {
            if (card.BelongTo == CharacterType.Player)
                IsSelected = !IsSelected;
        }
    }

    private void Btn_PressedBtn(PointerEventData eventData)
    {
        if (card.BelongTo == CharacterType.Player && eventData.button == PointerEventData.InputButton.Left)
            IsSelected = !IsSelected;
    }

>

[展开全文]

找炸弹的bug

<public List<Card> FindBoom(List<Card> cards, int weight)
    {
        List<Card> select = new List<Card>();
        for (int i = 0; i < cards.Count - 3; i++)
        {
            if ((int)cards[i].CardWeight == (int)cards[i + 1].CardWeight &&
                (int)cards[i].CardWeight == (int)cards[i + 2].CardWeight &&
                (int)cards[i].CardWeight == (int)cards[i + 3].CardWeight)
            {
                int totalWeight = (int)cards[i].CardWeight + (int)cards[i + 1].CardWeight + (int)cards[i + 2].CardWeight + (int)cards[i + 3].CardWeight;
                if (totalWeight > weight)
                {
                    select.Add(cards[i]);
                    select.Add(cards[i + 1]);
                    select.Add(cards[i + 2]);
                    select.Add(cards[i + 3]);
                    break;
                }
            }
        }
        return select;
    }>

加入电脑手牌中只有四张牌且是炸弹的话,那么count-4就会是0了,那么循环体就进不去了,就会找不到炸弹了,但是又的确有炸弹,所以要写成count - 3,其他的地方也有类似的错误,不知道对不对~^_^

[展开全文]

<

public List<Card> FindThreeAndTwo(List<Card> cards, int weight)
    {
        List<Card> select = new List<Card>();
        List<Card> Three = FindThree(cards, weight);
        if(Three.Count > 0)
        {
            List<Card> copyCards = cards;
            foreach (var card in Three)
            {
                copyCards.Remove(card);
            }
            List<Card> Two = FindDouble(copyCards, -1);
            if(Two.Count != 0)
            {
                select.AddRange(Three);
                select.AddRange(Two);
            }
        }
        return select;

    }

>

这里可能会出现一个极端bug,就是在找到三个却没有找到对的时候,会执行移除三个的操作,list是引用类型,所以会出现电脑吃不起却自己删除了三个一样的牌,不知道分析的对不对,所以需要用复制一个list出来,然后使用复制出来的list去移除三个的,再从复制出来的list中找对子,如果找到也无需移除原有牌,因为函数的目的只是找出能打的牌~不知道这样理解对不对,希望Ivy老师给出答复~~^_^

[展开全文]

任务22 

CardUI 脚本 SetPosition 函数

if (card.BelongTo==CharacterType.Desk||card.BelongTo==CharacterType.Player)
        {
            transform.localPosition = Vector3.right * index* 20;
            //防止还原
            if (isSelected)
            {
                transform.localPosition += Vector3.up * 10;
            }
            if (card.BelongTo==CharacterType.ComputerLeft||card.BelongTo==CharacterType.ComputerRight)
            {
                transform.localPosition = -Vector3.up * 8 * index + Vector3.left * 8 * index;
            }
        }
第二个 if 
[展开全文]

授课教师

SIKI学院老师

课程特色

下载资料(2)
视频(105)