因为要得找工作了,不得不写些文章让HR更多的了解到我,同时能帮到别的同学也是好的。因为接触Unity时间不是特别久,所以这里先帖出早期开发的C#游戏,然后再帖Unity游戏。

另外提醒,我的所有作品都是自己开发的,绝无抄袭(程序代码和编程思想绝没超抄过别人的),最多也就是高仿别人的游戏(贪吃蛇算吗?俄罗斯方块算吗?炸弹超人算吗?五子棋算吗?)。

转载请标明出处!!Power by 辣椒皮儿塞牙了╮

C#终于写完了,这几天拼着老命在写,好几万字呢啊,手都软了。没办法,想去上海学Unity技术,拼一拼值了。

大概说下我的Unity状况,大三下一个偶然的机会才接触到Unity,然后就毅然决然的放弃了本身已经走上正轨的.Net路线(我都已经做过好几个项目的,赚了好几千大洋!!),转向Unity,悲剧的是我身边没有一个人懂这个技术,甚至连游戏方向的都没有,只能自己摸索。从.Net跨到Unity,有着太多的不适应,随便一个小问题就能把人逼疯,磕磕绊绊,进步缓慢,真的很希望能有一个人,一个公司带我一下,那怕工资少点我也愿意。现在嘛,基础的使用都会了,写个FPS游戏还是不成问题的;RPG游戏,人物走跑跳放技能,技能粒子特效,技能伤害判定这些都可以。这两天在学习NGUI,常用控件事件响应可以做出来。

游戏说明:

1.这是我第一次接触Unity后第10天的一个小作品,虽然现在看来简单的没脸拿出来晒,但毕竟是曾经里程碑、历史性的一刻

2.整个地形都是官方自带的资源包里的内容,画画地形图,种种树,涂涂草一个场景就好了。开启了Fog,没敢开阴影,开了好卡。

3.坦克是我下载的一个FBX模型,外边加了一个Cube检测碰撞。控制我做的比较特别,W/S前后走,A/D左右转,Input.GetAxis("Mouse X")或左右键是炮塔的水平旋转,Input.GetAxis ("Mouse Y")或上下键是炮管垂直旋转,用了鼠标来瞄准就比较精准了,Fire1开火,打出去一个被拉长的球体的预设。。炮弹撞击会有火焰和声音效果

4.敌人AI,用Random写的,思想有点类似我的“消灭星星(炸弹超人)”那篇文章里讲小黄星的思路。保存一下前进方向,大多数情况下都是按照这个方向移动,偶尔突然改变一下一下方向或者lookat一下玩家的坦克,距离达到一定值后会瞄准玩家并开火。当时才接触Unity,AI写的简单了点,现在写的话就可以写复杂点,尽量真实的模拟,或者增加趣味性

5.坦克初始有100颗炮弹和100的生命值,被攻击后减少生命值,见到0时坦克不能在被控制(就是死那了。。)

6.一个很麻烦的地方就是,如果坦克爬坡后,它的方向肯定是斜向上的,这时继续按“前”,那么坦克会飞起来,完全脱离了现实情况。所以要检测什么时候离开地面了,当时立马想到用CharacterController的碰撞器,但这样干肯定不行啊,爬坡时坦克压根没倾斜。。这也是当时一直没解决的问题。现在是知道了,可以用于地面的碰撞器,OnCollisionEnter和OnCollisionExit来判断,但要注意一下这样写还必须给坦克一个速度是属性,不然当坦克刚离开地面,立马停止感觉更怪。最最好的解决办法是用写赛车类游戏的那一套组建和思路来写坦克的控制

程序还是很简单的,代码就不拿出来丢人现眼了,欢迎交流。

算了,还是拿出来接受大家的洗礼吧。。

我方坦克控制:

using UnityEngine;
using System.Collections;public enum State{Ctrl=0,Won,Lost};public class TankCtrl : MonoBehaviour {public static TankCtrl TC;//炮弹public Rigidbody projectile;public float CannonballSpeed = 100;public Transform CannonballPos;//坦克移动public float TankMoveSpeed=30;public float TankRotateSpeed=60;//炮塔public GameObject Turret;public float TurretRotateSpeed=20;//炮管public GameObject Gun;public float GunRotateSpeed=30;public int cntCannonball=100;public int Life=100;public State TankStste=State.Ctrl;bool grounded=false;void Start () {TC = this;TankStste = State.Ctrl;Time.timeScale = 1.0f;//开始游戏}void Update () {if (TankStste != State.Ctrl||grounded) {return;}//前进后退if (Input.GetKey (KeyCode.W)) {this.transform.Translate (Vector3.forward * Time.deltaTime * TankMoveSpeed);}else if (Input.GetKey (KeyCode.S)) {this.transform.Translate (Vector3.forward * Time.deltaTime * -TankMoveSpeed);}//左右旋转if (Input.GetKey (KeyCode.A)) {this.transform.Rotate (Vector3.up * Time.deltaTime * -TankRotateSpeed);}else if (Input.GetKey (KeyCode.D)) {this.transform.Rotate (Vector3.up * Time.deltaTime * TankRotateSpeed);}//炮塔水平旋转Turret.transform.Rotate(0, Input.GetAxis("Mouse X")*Time.deltaTime * TurretRotateSpeed, 0);      if(Input.GetKey(KeyCode.LeftArrow)){Turret.transform.Rotate(Vector3.up*Time.deltaTime*-TurretRotateSpeed*2);}else if(Input.GetKey(KeyCode.RightArrow)){Turret.transform.Rotate(Vector3.up*Time.deltaTime*TurretRotateSpeed*2);}//炮管垂直旋转Gun.transform.Rotate(-Input.GetAxis ("Mouse Y") * GunRotateSpeed * Time.deltaTime,0, 0);       if(Input.GetKey(KeyCode.UpArrow)){Gun.transform.Rotate(Vector3.left *Time.deltaTime*GunRotateSpeed);}else if(Input.GetKey(KeyCode.DownArrow)){Gun.transform.Rotate(Vector3.left*Time.deltaTime*-GunRotateSpeed);}//开火if( Input.GetButtonDown( "Fire1" )||Input.GetKeyDown(KeyCode.Space ) ){if (cntCannonball>0) {cntCannonball--;Rigidbody clone = (Rigidbody)Instantiate(projectile,CannonballPos.position, CannonballPos.rotation);clone.velocity = CannonballPos.TransformDirection (Vector3.forward * CannonballSpeed);Physics.IgnoreCollision( clone.collider, CannonballPos.root.collider );}}}public void Attacked(){Life -= Random.Range (10, 20);if (Life<=0) {Life=0;TankStste=State.Lost;}}void OnCollisionEnter( Collision collision)    //void OnCollisionEnter(Collider other){//if (other.tag == "Terrain") {if (collision.gameObject.tag=="Terrain") {//grounded = true;} else {//grounded=false;}}
}

敌方坦克AI:

using UnityEngine;
using System.Collections;public class AutoCtrl : MonoBehaviour {public static AutoCtrl AC;public Transform FirePoint;public Rigidbody Bullet;public float MoveSpeed = 10;public float RotateSpeed = 60;float rnd=0;private GameObject hero;public int cntCannonball=100;public int Life=100;public State TankStste=State.Ctrl;void Start () {AC = this;TankStste = State.Ctrl;Time.timeScale = 1.0f;//开始游戏hero = GameObject.Find("MyTank");transform.LookAt (hero.transform);}void Update () {if (TankStste!=State.Ctrl) {return;}if (rnd<1) {transform.Translate(Vector3.forward*Time.deltaTime*MoveSpeed);}else if (rnd<2) {transform.Translate(Vector3.forward*Time.deltaTime*-MoveSpeed);}else if (rnd<4) {transform.Rotate(Vector3.left*Time.deltaTime*MoveSpeed);}else if (rnd<6) {transform.Rotate(Vector3.left*Time.deltaTime*-RotateSpeed);}else if (rnd<15) {if (cntCannonball>0) {cntCannonball--;Rigidbody clone = (Rigidbody)Instantiate(Bullet,FirePoint.position, FirePoint.rotation);clone.velocity = transform.TransformDirection (Vector3.forward * 100);RndInstructions();}}else if (rnd<20) {transform.LookAt (hero.transform);if (Random.Range (0, 2)==0) {              rnd=0;// run to me}else{rnd=14;//fire to me}}if (Random.Range (0, 100)==0) {RndInstructions();}}void RndInstructions(){rnd = Random.Range (0, 20);}public void Attacked(){Life -= Random.Range (10, 20);if (Life<=0) {Life=0;TankStste=State.Lost;}}}

Unity3D坦克大战相关推荐

  1. Unity3d 坦克大战开发日志1

    跟着B站上教程开发坦克大战已经有一段时间了,4天了.在此写下关于学习Unity3d引擎时遇到的问题. 1.在制作坦克大战双人对战时,如何进行分屏. 参考博文 如何分屏 总的来说就是,先建立两台Came ...

  2. Unity3d坦克大战开发日志3(Day5,Day6)

    这两天被 "如何根据recorder里保存的坦克信息,去GameScene里实例化坦克" 这个问题卡了好久,做出来以后发现以外的简单. 问题1 NullReferenceExcep ...

  3. unity3D 坦克大战

    1.新建工程,导入资源,新建Scenes文件夹,保存该场景进该文件夹 2.删除场景中的默认灯光 2.1 再把Prefab里的LevelArt预设场景拖到Hierarchy中 2.2选择window-& ...

  4. unity3D坦克大战完整笔记

  5. Unity项目 - 坦克大战3D TankBattle

    目录 游戏原型 项目演示 绘图资源 代码实现 技术探讨 参考来源 游戏原型 游戏玩法:在有界的战场上,玩家将驾驶坦克,代表绿色阵营,与你的队友一起击溃红蓝阵营的敌人,在这场三方大战中夺得胜利! 操作指 ...

  6. 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统

    对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...

  7. Unity3d之坦克大战(二)

    Unity3d之坦克大战(二) 这只是一个非常非常初级的教程.在 Unity3d之真机测试(上)我们创建了一个初级的坦克,今天继续坦克大战的游戏.下面开始吧: 1. 首先我们要创建一个炮弹.打开3DS ...

  8. 【跟我一起学Unity3D】做一个2D的90坦克大战之地图编辑器

    从10月20号到现在,Unity3D也学了10天了,对于Unity3D也有了一个大致的了解,有必要做一个小游戏来检测一下自己的学习成果了.经过两天的努力,终于总算是做出来了一个可以玩的坦克大战了.首先 ...

  9. Unity3D入门-坦克大战

    Unity3D入门-坦克大战 文章目录 Unity3D入门-坦克大战 1.基础 2.功能介绍 3.部分代码 4.展示 5.打包发布 6.未处理问题 1.基础 概念1:预制体PreFab 将一个Game ...

  10. Unity3d实现双人网络坦克大战

    效果预览 https://pan.baidu.com/s/1w3RccGs7FueDopwZTaPrpA#list/path=%2F 资源准备 所需要的资源和上周的AI自动寻路一样: 使用NavMes ...

最新文章

  1. NVIDIA 自动驾驶软件平台
  2. 使用mpvue开发小程序教程(二)
  3. 爬虫训练之--获取错误并将其保存进本地文件
  4. 【转】WSS3.0开发--你还在为写CAML痛苦吗?
  5. 【Tiny4412】Tiny4412烧写uboot脚本分析
  6. Hsiaoyang:Google搜索结果页面分析
  7. python递归调用详解_Python递归调用自己的函数
  8. 4月24日云栖精选夜读 | 阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?...
  9. hdoj 1257(暴力)
  10. python控制mt4自动交易软件排名_股票自动交易软件排名
  11. java面试突击第一季 github,Github上星标77.6K+Java面试突击版笔记在咸鱼被疯传,太香了...
  12. 图论 有向无环图 拓扑排序 是什么
  13. Java高手速成│编写你第一个数据库程序
  14. Y460安装桌面导航
  15. php接入支付宝app支付接口,php支付宝App支付生成预支付订单(统一下单接口)
  16. CCF系列题解--2018年3月第三题 URL映射
  17. #2016京东实习生笔试之生日礼物
  18. java hasnext_java – hasNext() – 什么时候阻止,为什么?
  19. 使用 fmod windows 下实现音频变声 -- 萝莉 大叔 等 特效
  20. HTTP上传文件的总结

热门文章

  1. matlab输入syms有错,matlab的问题:当我输入 syms x;f=x*x 按回车后就出错,这是怎么回事啊?请大家帮帮...
  2. 杂记:Atmel sama5d3 DMA Controller (DMAC)
  3. 记一次前端实习生面试
  4. 学校计算机科室管理制度,学校科室管理制度资料.doc
  5. vue 多个filters_Vue filters过滤器的使用方法
  6. 《炬丰科技-半导体工艺》晶片键合技术和薄膜传输技术
  7. IOS中impactor报81错误解决方法
  8. MYSQL排序加分页报错Out of sort memory, consider increasing server sort buffer size
  9. 靶点c语言,降脂治疗靶点:LDL-C是最好的吗?(上)
  10. 罗斯蒙特214CRTSMB1S3M0420SLM2AR1C1B1TBM2温度传感器