3DTank大战总结
预制体修改可以放入场景中修改再应用
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大战总结相关推荐
- 【屌丝之作】3D遥控坦克大战
昨天参加了hack day的一个比赛,赛制大致是:24小时,自由组队2~4人,任意发挥.运气比较好,拿了第三名和最佳创意奖. 建议先看看这个demo,bug是有的,chrome下玩玩,测试测试就行,O ...
- java飞机大战爆炸效果_Java飞机大战游戏设计与实现
1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...
- Java项目:潜艇大战项目(java+swing)
源码获取:博客首页 "资源" 里下载! 功能简介: Java swing实现的一款小游戏潜艇大战的项目源码 游戏界面: @SuppressWarnings({ "unus ...
- 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统
对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...
- JavaScript引擎大战:Google提出StrongMode和SoundScript议案,增强V8性能
JavaScript 引擎性能大战硝烟迷漫,Chrome V8 引擎团队宣布了一个新的计划,在这个计划里他们介绍了两个新的虚拟机概念:强化模式(StrongMode)和强化脚本(StrongScrip ...
- 阿里发布AliGenie2.0系统,“百箱大战”用上视觉武器
天猫精灵X1的升级版X2没有预期出现,而人机交互系统AliGenie升级到最新的2.0版本,功能强大. 3月22日,阿里巴巴人工智能实验室总经理浅雪(陈丽娟)发布AliGenie2.0系统,它最大的改 ...
- 中国电子学会青少年编程能力等级测试图形化四级编程题:太空大战
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 我们将有关编程题目的教学视频已经发布到抖 ...
- 用Python实现坦克大战游戏 | 干货贴
作者 | 李秋键 出品 | AI科技大本营(rgznai100) <坦克大战>是1985年日本南梦宫Namco游戏公司在任天堂FC平台上,推出的一款多方位平面射击游戏.游戏以坦克战斗及保卫 ...
- 那个大战AlphaGo的柯洁,将免试入读清华大学工商管理专业
日前,柯洁将免试入读清华大学的消息经媒体曝光了出来. <2019 年优秀运动员免试入学推荐名单>3 月 10 日开始公示,围棋世界冠军柯洁的名字出现在名单上,其中表明他将就读清华大学工商管 ...
最新文章
- fofa 搜索结果提取技术分析
- 浅析网站地图设置对网站的作用有哪些?
- 职场新人成功修炼五诀 迅速在职场占一席之地
- exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- php里的抽象类和接口
- 秋招开始,求职别慌!C 认证了解一下!
- 反诈题库---合计100道(解析版最新)
- java 已知两点坐标,与第三点距离,计算第三点的坐标。
- 校园学生管理系统设想
- 夫妻宫十星所暗示的未来另一半
- jvm精通之柳暗花明
- 为什么域名还会被DNS污染?域名被污染清洗方法!
- Gameloft的移动游戏王者之路
- linux下USB设备编号固定
- android studio夜间模式,android studio怎样实现夜间模式
- 关于监控摄像头小程序直播使用流程及主要应用
- react native学习笔记29——动画篇 Animated高级动画
- Numpy删除指定行
- 如何学IO流IO流的含义