【框架设计】3D坦克大战
游戏设计好,思考使用什么资源后,需要思考开发的具体功能。以下是个人总结的几个比较重要的思考点。
游戏镜头
由于设计是单机双人的游戏,镜头跟随效果不能是平时简单的跟随单物体移动,而是要在两个物体的重心。并且,两个物体在独立移动时,两者的距离会发生较大的变化,在同样的程序窗口上显示画面,两者距离变近时,相机应当变近,两者距离变远后,相机也应该跟着变远。
public Transform p1; //玩家1的坐标public Transform p2; //玩家2的坐标private Vector3 offset; //用于计算坐标位置补偿值private Camera ca;float distance = 0;float size = 0;// Start is called before the first frame updatevoid Start(){offset = transform.position - (p1.position + p2.position) / 2; //计算相机初始位置与两个玩家中心点的偏移量ca = this.GetComponent<Camera>(); //初始化相机}// Update is called once per framevoid Update() {if (p1 == null || p2 == null){return; //当有一方坦克销毁时,不再进行相机运算}transform.position = (p1.position + p2.position) / 2 + offset; //相机保持偏移,位于两个玩家正中心//下面代码用于计算相机缩放比,0.62f是经过我自己摆放相机位置得出的一个看起来比较舒服的比例distance = Vector3.Distance(p1.position, p2.position);size = distance * 0.62f;ca.orthographicSize = size;}
预制体的使用
双人对战,场景中会有两辆坦克,为了简化开发过程,可以首先把一个坦克模型建立好,为其增添好如刚体插件、脚本等内容,作为一个预制体。再通过预制体实例化出两个不同的实体坦克,分别对其进行编辑。
通过预制体创建的两个实例
键盘操作映射
双人对战,场景中就会有两辆坦克,就要对应两套不同的键盘操作。
为两个玩家设置两套不同的虚拟轴
子弹飞行
子弹射出坦克后,本身就成为一个实体,该实体拥有独立的碰撞检测,并且在碰撞后产生爆炸效果,如果碰撞的是坦克,则造成伤害。
public GameObject shellExpPrefab; //子弹预制体
public AudioClip shellExpAudio; //子弹爆炸音效public void OnTriggerEnter(Collider other) //当子弹遭遇碰撞时触发该代码
{AudioSource.PlayClipAtPoint(shellExpAudio, transform.position); //产生爆炸音效GameObject.Destroy(this.gameObject); //销毁子弹自身GameObject.Instantiate(shellExpPrefab, transform.position, transform.rotation); //播放爆炸动画if(other.tag == "Tank") //如果与坦克发生碰撞,将碰撞信息传递给坦克,告诉坦克触发受伤代码{other.SendMessage("injury");}
}
设计框架图
游戏结束UI界面
UI布局如下,并将其初始显示状态设置为不显示
using UnityEngine.SceneManagement; //使用最新的SceneManagement的函数需要用这个库//再玩一次按钮功能代码
public void ReStartGame()
{SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}//退出游戏按钮功能代码
public void ExitGame()
{Application.Quit();
}
【框架设计】3D坦克大战相关推荐
- c语言课程设计坦克大战,funcodec++课程设计_坦克大战
<funcodec++课程设计_坦克大战>由会员分享,可在线阅读,更多相关<funcodec++课程设计_坦克大战(24页珍藏版)>请在人人文库网上搜索. 1.课程设计一 坦克 ...
- ava联网3D坦克大战(网络编程)2020
.游戏效果 Java网络编程联机3D坦克大战 在这里插入图片描述 在这里插入图片描述 二.游戏涉及知识 服务器端运用了 IO.线程.网络.面向对象.异常 的内容, 客户端使用 unity3d引擎进行开 ...
- Unity学习回忆--3D坦克大战
2023年LPL春季赛季后赛正在火热进行中,你们心中的总冠军是哪支队伍呢?作为热爱游戏的程序猿,一起来聊聊你那些有意义的游戏开发经历吧! 前言 还记得大一的时候第一次接触编程,为了手写一个hello, ...
- 3D坦克大战游戏源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...
- js版 3D坦克大战 V0.5
欢迎体验js版的 3D坦克大战 V0.5 测试地址:http://121.199.29.66:88/. 目前只支持新版本的的chrome浏览器,有时同时进入的玩家较多,暂没有分房间,导致偶尔会较卡,请 ...
- unity学习3D坦克大战(六)
Unity 3D坦克大战案列学习(五) 实现相机视野的跟随 using UnityEngine; using System.Collections; /// <summary> /// 控 ...
- unity学习3D坦克大战(一)
Unity 3D坦克大战案列学习(一) 实现坦克移动和转向 using UnityEngine; using System.Collections; public class TankMovement ...
- unity学习3D坦克大战(四)
Unity 3D坦克大战案列学习(四) 实现控制特效存在的时间 using UnityEngine; using System.Collections; /// <summary> /// ...
- unity学习3D坦克大战(五)
Unity 3D坦克大战案列学习(五) 实现坦克的生命值和伤害机制 using UnityEngine; using System.Collections; using UnityEngine.UI; ...
- java 坦克大战_java课程设计之坦克大战
本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...
最新文章
- python 发布到linux_Linux(CentOS)下的Python3部署流程
- Power BI 可视化交互/视觉对象交互
- 1.10 instanceof关键字
- 关于longlong与位运算
- codeforces:812(div2):总结
- JBox2D手机游戏引擎介绍(附jbox2d官网网址)
- 安卓应用安全指南 5.2.2 权限和保护级别 规则书
- 排毒食物 红糖可补血美体排毒
- oracle 用户被锁定解决方法
- Atitit tomcat在linux服务器的启动与其他
- 【竞赛篇-国创(大创)结题】国创(大创)立项后的基本流程、需要用什么结题、如何快速结题
- uniapp canvas 合成头像
- 自考启示,关于不紧急重要到紧急重要的改变
- java计算机毕业设计企业员工档案管理源码+系统+数据库+lw文档+mybatis+运行部署
- 基于html评定奖学金页面代码,学校助学奖学金申请表页面模板
- 腾讯程序员月薪7万,小编感觉自己像码畜...
- Springboot_vue摄影作品图片展示交流平台
- 3D可视化色彩设计大揭秘
- 实战PyQt5: 143-QChart图表之堆积柱状图
- Dubbo入门教程,谈谈为什么要用Dubbo?
热门文章
- linux 定时任务 非root,linux下的计划任务——只执行一次的定时任务,
- [摘]广义企业级PDM系统下的PPM(工艺规划管理)
- 线性代数入门指南:线性方程组
- 路由器回执路由配置_路由器接路由器设置详细图文教程
- python求偏导_python中几种自动微分库解析
- 318. 最大单词长度乘积【我亦无他唯手熟尔】
- 2019中南大学计算机考研分数线,中南大学2019年硕士研究生招生复试基本分数线...
- 注意PHP的下一个千年虫:Y2K38
- CMMI3-CMMI5评估认证需要遵循七大原则
- 组合按键的软件设计(c语言)