预制体修改可以放入场景中修改再应用

1.transform.Find()的用法

transform.Find 只能找到所在物体的子物体

脚本挂在car游戏物体上

Debug.Log(transform.Find(“test”));

结果是null空值。
想要查找子辈的子辈怎么办,需要指定全路径

Debug.Log(transform.Find(“GameObject (3)/test”));

即可找到。

2.初始化子弹,并控制子弹移动

创建一个空物体GameObject改为FirePosition,并放在Tank下,作为初始化子弹发射的位置,

Instantiate(物体,位置,方向)

public class TankAttack : MonoBehaviour
{public GameObject shell;//声明子弹的引用public KeyCode fireKey=KeyCode.Space;//声明KeyCode按键,默认空格键为子弹发射键,另一个玩家可以在外部修改发射按键private Transform firePosition;//声明初始化子弹的位置引用,通过上图的FirePosition物体赋值void Start(){firePosition = transform.Find("FirePosition");//transform.Find查找当前物体的子物体}if(Input.GetKeyDown(fireKey)){GameObject  go=Instantiate(shell, firePosition.position, firePosition.rotation);//实例化子弹,确定位置、旋转go.GetComponent<Rigidbody>().velocity = go.transform.forward * shellSpeed;//刚体移动}
}

3.触发器碰撞检测,销毁物体

实例化子弹爆炸效果,销毁子弹
子弹触发器脚本

 /*脚本在子弹上*/
public class Shell : MonoBehaviour
{public GameObject ShellExplosion;//定义子弹爆炸效果引用private void OnTriggerEnter(Collider other)//检测函数{//子弹一碰到其他任何物体就产生爆炸效果,并销毁子弹Instantiate(ShellExplosion,transform.position,transform.rotation);//初始化子弹爆炸效果Destroy(gameObject);//销毁子弹if (collider.tag =="Tank")//子弹碰到坦克{collider.SendMessage("TankDamage");//执行TankDamage方法}}
}
/*脚本在子弹爆炸效果上*/
public class ShellExplosionDestory : MonoBehaviour
{public float _time;//爆炸效果持续时间,外部赋值void Start(){Destroy(gameObject, _time);//爆炸效果持续时间一过,销毁爆炸效果}
}
/*脚本在Tank上*/
public class TankAttack : MonoBehaviour
{private void TankDamage(){if (hp <= 0) return;hp -= 10;//坦克减少血量10(设置100血量)hpSlider.value = (float)hp / 100;//改变血条if (hp<=0){Instantiate(TankExplosion,transform .position + Vector3.up , transform.rotation);//实例化爆炸效果Destroy(gameObject);//销毁坦克游戏物体}}
}

子弹碰到任何物体,都会产生子弹爆炸效果并销毁子弹,实例化子弹爆炸效果后会销毁(子弹爆炸效果物体上挂有销毁脚本)。如果子弹碰到Tank,执行TankDamage();

圆形血条制作

1.在画布上添加slider

2.删除Handle Slide Area
3.更改Source Image

4.Background,Fill上下左右拉伸


Image Type选择Filled,Canvas的Render Mode(渲染模式)设为Word Space

修改Value值可以修改血条

public Slider hpSlider;//声明Slider 组件引用
hpSlider.value = (float)hp / 100;//改变血条

4.如何控制两个玩家

/*脚本挂在Tank上*/
public class TankMove : MonoBehaviour
{public int playerNumber=1;//定义玩家1,2void FixedUpdate(){float v = Input.GetAxisRaw("VerticalPlayer"+ playerNumber);//在Input面板设置两个Player的控制键rig.velocity = transform.forward * v* speed;//刚体的运动速度float h= Input.GetAxisRaw("HorizontalPlayer"+playerNumber);rig.angularVelocity  = transform.up * h * rotationSpeed ;//刚体的旋转速度}
}

设置两个玩家,Ctrl+D复制两个Vertical与两个Horizontal进行修改设置


5.相机跟随两个物体

/*脚本挂在相机上*/
using UnityEngine;
public class FollowTarget : MonoBehaviour
{public Transform player1;//直接声明Transform组件,拖拽游戏物体赋值,Unity自动查询游戏物体上的Transform组件public Transform player2;private Vector3 offset;void Start(){offset = transform.position - (player1.position + player2.position) / 2;//获取相机最初的偏移量}void Update(){if (player1 == null || player2 == null) return;//一方坦克摧毁则停止跟随float size= Vector3.Distance(player1.position, player2.position) * 0.73f;//测算a,b之间的距离transform.position=offset  + (player1.position + player2.position) / 2;//跟新相机位置if (size >= 10){GetComponent<Camera>().orthographicSize = Vector3.Distance(player1.position, player2.position) * 0.73f;} }
}

Vector3.Distance(player1.position, player2.position) * 0.73f;——返回a,b之间的距离
GetComponent().orthographicSize——正交相机Size值

3DTank大战总结相关推荐

  1. 【屌丝之作】3D遥控坦克大战

    昨天参加了hack day的一个比赛,赛制大致是:24小时,自由组队2~4人,任意发挥.运气比较好,拿了第三名和最佳创意奖. 建议先看看这个demo,bug是有的,chrome下玩玩,测试测试就行,O ...

  2. java飞机大战爆炸效果_Java飞机大战游戏设计与实现

    1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...

  3. Java项目:潜艇大战项目(java+swing)

    源码获取:博客首页 "资源" 里下载! 功能简介: Java swing实现的一款小游戏潜艇大战的项目源码 游戏界面: @SuppressWarnings({ "unus ...

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

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

  5. JavaScript引擎大战:Google提出StrongMode和SoundScript议案,增强V8性能

    JavaScript 引擎性能大战硝烟迷漫,Chrome V8 引擎团队宣布了一个新的计划,在这个计划里他们介绍了两个新的虚拟机概念:强化模式(StrongMode)和强化脚本(StrongScrip ...

  6. 阿里发布AliGenie2.0系统,“百箱大战”用上视觉武器

    天猫精灵X1的升级版X2没有预期出现,而人机交互系统AliGenie升级到最新的2.0版本,功能强大. 3月22日,阿里巴巴人工智能实验室总经理浅雪(陈丽娟)发布AliGenie2.0系统,它最大的改 ...

  7. 中国电子学会青少年编程能力等级测试图形化四级编程题:太空大战

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 我们将有关编程题目的教学视频已经发布到抖 ...

  8. 用Python实现坦克大战游戏 | 干货贴

    作者 | 李秋键 出品 | AI科技大本营(rgznai100) <坦克大战>是1985年日本南梦宫Namco游戏公司在任天堂FC平台上,推出的一款多方位平面射击游戏.游戏以坦克战斗及保卫 ...

  9. 那个大战AlphaGo的柯洁,将免试入读清华大学工商管理专业

    日前,柯洁将免试入读清华大学的消息经媒体曝光了出来. <2019 年优秀运动员免试入学推荐名单>3 月 10 日开始公示,围棋世界冠军柯洁的名字出现在名单上,其中表明他将就读清华大学工商管 ...

最新文章

  1. fofa 搜索结果提取技术分析
  2. 浅析网站地图设置对网站的作用有哪些?
  3. 职场新人成功修炼五诀 迅速在职场占一席之地
  4. exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp
  5. 【OpenCV】图像几何变换:旋转,缩放,斜切
  6. php里的抽象类和接口
  7. 秋招开始,求职别慌!C 认证了解一下!
  8. 反诈题库---合计100道(解析版最新)
  9. java 已知两点坐标,与第三点距离,计算第三点的坐标。
  10. 校园学生管理系统设想
  11. 夫妻宫十星所暗示的未来另一半
  12. jvm精通之柳暗花明
  13. 为什么域名还会被DNS污染?域名被污染清洗方法!
  14. Gameloft的移动游戏王者之路
  15. linux下USB设备编号固定
  16. android studio夜间模式,android studio怎样实现夜间模式
  17. 关于监控摄像头小程序直播使用流程及主要应用
  18. react native学习笔记29——动画篇 Animated高级动画
  19. Numpy删除指定行
  20. 如何学IO流IO流的含义

热门文章

  1. 三星SM411性能参数!
  2. daemon函数理解及参数使用——daemon后进程退出的原因
  3. Android开发交流群
  4. 4.1 使用常见的各种字体属性 [原创Excel教程]
  5. WLAN AP安全策略中WPA认证与WPA2认证的差异
  6. java channel midi_为Java程序中添加播放MIDI音乐功能
  7. udf,udaf,udtf区别与联系
  8. HTML资源未找到,加载资源失败:服务器响应状态为404(未找到)
  9. 搭建直播平台源码用到的云技术到底是什么
  10. Python 打地鼠小游戏