前几天上课看见舍友在玩斗兽棋 然后我下来想着也用unity实现一个
之后给大家分享一下
首先给大家一个我在网上找到的图片
之后大家可以用unity自带的切割图片的功能 去切割
之前我写的教程地址(给大家参考)

然后我们的思路是使用射线(从摄像头发出)检测点击的物体 当然使用特定的接口通过UGUII也可以实现
同样给出几篇我之前写过的博客给大家参考

然后呢就开始开发阶段了 我们在选择两个相邻的动物之后 我们可以给每个动物写一个单独的脚本
之后获取其中的一个值 通过对比这个值 来判断吃与被吃的关系

预览游戏

我做的这个demo和我们常见的 斗兽棋不一样 我做的这个是默认都为黑色
之后两个玩家交互的翻牌 之后一方为红一方为蓝

所以由于这个特性 我们每次图片必须打乱 从而实现游戏的可玩性(保持随机性)

开发过程

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum PlayerType
{red,blue
};
/// <summary>
/// 每个动物身上挂在的脚本(通过这个脚本来判断吃与被吃的关系)
/// </summary>
public class Animal : MonoBehaviour
{public int Hp;//hp越大 优先级越高(越厉害)public PlayerType type;//判断是什么玩家public SpriteRenderer Black;private   BoxCollider collider;public BoxCollider blackcollider;float timer = 0;private void Start(){collider = GetComponent<BoxCollider>();collider.enabled = false;}private void Update(){if (Black.enabled==false){collider.enabled = true;blackcollider.enabled = false;}}public void Eated(){if (type == PlayerType. red){Arrange.Instance.rednum--;}if (type == PlayerType.blue){Arrange.Instance.bluenum--;}//被吃掉的方法gameObject.SetActive(false);}/// <summary>/// 移动到目标位置去/// </summary>public void MoveToTargetPosi(Vector3 Targetposi){timer += Time.deltaTime;if (timer > 1){timer = 0;}transform.position = Targetposi;}
}

之后我们实现一下 点击黑色遮挡退去的效果 以及点击动物的事件和点击空白地方的事件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class DisappearLay : MonoBehaviour
{public Animal a, b;public float dic;private Vector3 targetposi;private void Update(){DisappearBlack();ClickAnimals();}/// <summary>/// 消除黑色阴影/// </summary>public void DisappearBlack(){if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (Physics.Raycast(ray, out hit, 100)){if (hit.collider.tag == "Layout"){hit.collider.gameObject.GetComponent<SpriteRenderer>().enabled = false;}}}}public void ClickAnimals(){if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (a == null && b == null) {if (Physics.Raycast(ray, out hit, 1000)){if (hit.collider.tag == "Animal"){a = hit.collider.gameObject.GetComponent<Animal>();}}}if (a != null && b != null){if (Physics.Raycast(ray, out hit, 1000)){if (hit.collider.tag == "Animal"){a = hit.collider.gameObject.GetComponent<Animal>();}}}if (a != null && b == null){if (Physics.Raycast(ray, out hit, 1000)){if (hit.collider.tag == "Animal"){b = hit.collider.gameObject.GetComponent<Animal>();}if (hit.collider.tag == "NullPosition" && a != null){a.MoveToTargetPosi(hit.collider.gameObject.transform.position);targetposi = hit.collider.gameObject.transform.position;Debug.LogError("点住空白部分");}}}}if (a != null && b != null){dic = Vector3.Distance(a.transform.position, b.transform.position);}if (a != null && b == null){//dic = Vector3.Distance(a.transform.position, b.transform.position);}if (a == b){b = null;}if (dic <= 2.1f){if (a != null && b != null && a.Hp > b.Hp && a.type != b.type && a.Hp - b.Hp != 7){b.Eated();a.MoveToTargetPosi(b.transform.position);a = null;b = null;}if (a != null && b != null && a.Hp < b.Hp && a.type != b.type && b.Hp - a.Hp != 7){a.Eated();b.MoveToTargetPosi(a.transform.position);a = null;b = null;}if (a != null && b != null && a.Hp == b.Hp && a.type != b.type){a.Eated();b.Eated();a = null;b = null;}if (a != null && b != null && a.Hp - b.Hp==7 && a.type != b.type)//大象和老鼠的处理(a是大象 b是老鼠){b.MoveToTargetPosi(a.transform.position);a.Eated();a = null;b = null;}if (a != null && b != null && b.Hp - a.Hp == 7 && a.type != b.type)//大象和老鼠的处理{a.MoveToTargetPosi(b.transform.position);b.Eated();a = null;b = null;}if (a != null && b != null && a.type == b.type){a = null;b = null;}}else{a = null;b = null;}}
}

其中我们需要创建标签 比如 每个动物都要赋值Aninal的标签
每个空白的地方都要赋值上Layout的标签

因为在开发过程中 遇到很多碰撞体乱检测的问题 所以我代码中 获取了碰撞体等组件
为了避免误触产生bug

在之后就是实现胜利的触发还有所有动物的的位置的排列组合了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Arrange : MonoBehaviour
{List<Vector3> posis = new List<Vector3>();public List<GameObject> Animals;//动物的物体//检测胜利public Text redVectory;public Text blueVectory;public int rednum = 8;public int bluenum = 8;public static Arrange Instance;private void Awake(){Instance = this;}private void Start(){for(int i=0;i<4; i++){for(int j = 0; j < 4; j++){posis.Add(new Vector3(i*2, j*2, 0));}}for(int i = 0; i < Animals.Count; i++){Vector3 temp= posis[Random.Range(0, posis.Count)];Animals[i].transform.position = temp;posis.Remove(temp);}redVectory.enabled = false;blueVectory.enabled = false;}private void Update(){if (rednum == 0 && bluenum != 0){blueVectory.enabled = true;}if (rednum != 0 && bluenum == 0){redVectory.enabled = true;}}}

其中用了单例模式 为了实时更新红方和蓝方剩余的棋子
从而给判断胜利

这篇博客就介绍这么多 如果有什么问题可以联系我
主页有我的联系方式 之后我会更新 两个玩家的操作限制

unity实现斗兽棋demo(实现相互吃 棋子的移动等效果)相关推荐

  1. unity实现斗兽棋demo(实现玩家的分化,胜利的触发)

    上篇博客介绍了简单的行走以及相互吃的效果 上篇博客的地址 这篇博客实现一下 关于红蓝色的分开的操作 以及胜利的触发 胜利的触发是一方玩家棋子都被吃光而另一方还有棋子 关于玩家的分化 我是记录每次操作 ...

  2. 【Unity连载】斗兽棋—棋类游戏开发演示(1)

    序言 "黄梅时节家家雨,青草池塘处处蛙.有约不来过夜半,闲敲棋子落灯花." "象棋终日乐悠悠,苦被严亲一旦丢.兵卒坠河皆不救,将军溺水一齐休.马行千里随波去,象入三川逐浪 ...

  3. 【Unity连载】斗兽棋-棋类游戏开发演示(2)

    第四章 游戏操作与指令 如同养育一个婴儿,父母总会一步步引领孩子成长,从蹒跚学步到来去如风:我们对游戏功能的开发,也无疑应当从走出第一步棋开始.现在,我们已经构建出了棋盘.棋子等基本的游戏逻辑对象:那 ...

  4. 用java编写斗兽棋2之规则与走法

    今天我们来写斗兽棋的规则和走法 首先介绍一下斗兽棋的一些规则: 动物的实力按照鼠.猫.狗.狼.豹.虎.狮.象从小到大排列,实力大的动物可以吃掉实力比自己小的以及和自己实力相当的动物.老鼠虽小,却能反杀 ...

  5. vue3 斗兽棋游戏

    近来掘金举办前端比赛,所以写了一个小游戏参加,而且熟悉一下vue3,写了一下游戏,思来想去就写了一个斗兽棋游戏. 欢迎去给我加油      点赞评论收藏  ,试玩地址  游戏地址 童年斗兽棋 - 码上 ...

  6. 用Rust写一个斗兽棋游戏

    原文地址:用Rust写一个斗兽棋游戏 项目地址: Github: https://github.com/netcan/AnimalChess Crate.io: https://crates.io/c ...

  7. 斗兽棋概要设计说明书

    概要设计说明书 1.引言........................................................................................ ...

  8. 小游戏之斗兽棋(uniapp)

    前言 最近学习数据结构与算法,但是平常自己要么刷题,要么看书,很是无聊.就想着游戏中一般都会运用大量的算法,所以就开始写游戏来锻炼自己算法这方面的小能力.后面还会持续做其他小游戏,并发布说说自己做的过 ...

  9. 玩吧斗兽棋的一些攻略 同级子谁胜负问题

    抗疫期间喜欢上了玩吧的斗兽棋,一把游戏几分钟就能下完,不仅要有策略,更要有运气,运气不好,再好的局面都会被逆风翻盘. 其中有一种局面,就是双方各执同样级别的棋子时,到底谁会赢,尝试分析了一下 玩吧斗兽 ...

最新文章

  1. page分页php,Page分页函数
  2. SAP MM初阶之事务代码MIGO界面里的HOLD
  3. 互联网黄金十年的黄昏——是人工智能的黎明还是裁员的长夜
  4. Linu 修改maven的setting保护文件
  5. Oracle DBLink的简单运用
  6. asp.net mvc 3 RTM 发布了!
  7. c++ tinyxml2 解析xml小坑
  8. c#图像处理-图像预览全解
  9. Klevgrand Tines for Mac(电钢琴模拟插件)
  10. @configuration注解_SpringBoot注解大全,收藏一波!!!
  11. Matlab图像处理--低通滤波器的Matlab实现及透视图
  12. python + selenium 之网银爬虫
  13. 通过SQL注入获得网站后台用户密码
  14. 自然语言处理常用单词
  15. foobar2000在线标签服务器,在Foobar2000播放器中从音乐名获取标签的技巧
  16. 51驱动AD9850/AD9851—DDS信号发生器
  17. 远程主机强迫关闭一个现有连接 安卓开发 完美解决版
  18. windows系统安全基础知识——系统进程与病毒
  19. 荣耀60 SE参数配置
  20. 人造金刚石 量子计算机,金刚石并非坚不可摧:科研小组创造首个量子计算机桥...

热门文章

  1. RabbitMQ的应答模式
  2. Nginx安装部署与配置管理
  3. LR(0),SLR(1),LR(1),LALR(1)的区别
  4. 【密评简易算分器】密评工具之一
  5. OpenHarmony 3.1 Beta版本关键特性解析——ArkUI容器类API介绍
  6. 怎样恢复删除的视频?这5个方法才是正确答案!
  7. Apache IoTDB 毕业两周年庆典|限量版纪念T恤“点击”就送~
  8. SMACv2: An Improved Benchmark for Cooperative Multi-Agent Reinforcement Learning
  9. 大学英语Ⅱ unit 3 第三题
  10. 《大数据+AI在大健康领域中最佳实践前瞻》---- 基于变分自编码器(VAE) 进行疾病预测实现