先展示一下成果吧,节后第一天上班简直困爆了,所以一定要动下脑子搞点事情。

分析:

1.涉及到的游戏对象有:坦克,摄像机,场景素材(包含灯光),子弹

2.坦克具有的功能:移动,旋转,发射子弹,记录生命值或血量

3.摄像机具有功能:跟随目标拍摄

4.子弹具有的功能:移动,并且是在常见出来的时候就要移动,碰撞后要销毁

OK,先分析到这里,其他就边做边看吧。

1.先把素材导进来,素材.unitypackage下载地址链接: https://pan.baidu.com/s/1qXH4EXu 密码: h6gt

2.添加坦克,找到模型拖到场景里面就行了。

坦克的两个轮跑起来会有特效,找到拖到坦克下面,调整好位置,坦克的轮后面。

指定坦克开火的位置,创建一个空GameObject,改名FirePosition,初学者还是要养成好的习惯,认真对待每一个取名,规范起来比较好。将FirePosition移动到发射子弹的炮眼,微调一下旋转。

下面开始挂脚本了,第一个脚本是控制坦克的前后移动,TankMovement.cs

using UnityEngine;

public class TankMovement : MonoBehaviour {

	public float speed = 5f;

	public float angularSpeed = 30;

	private Rigidbody rigidbody;

	public int number = 2;

	// Use this for initialization
void Start () { rigidbody = GetComponent<Rigidbody> (); } // Update is called once per frame
void FixedUpdate () {
//前后移动
float v = Input.GetAxis("Verticalplay" + number );
rigidbody.velocity = transform.forward * speed * v;
//控制旋转
float h = Input.GetAxis("Horizontalplay" + number);
rigidbody.angularVelocity = transform.up * angularSpeed * h;
}
}

  通过刚体组件让坦克移动旋转,number是为了后面添加第二个坦克,

用什么键控制可以自己设定。

第二个脚本是控制坦克发射子弹,TankAttack.cs

using UnityEngine;

public class TankAttack : MonoBehaviour
{ private Transform firePosition; public GameObject shellPrefab; public KeyCode fireKey = KeyCode.Space; public float shellSpeed = 20; public AudioClip shotAudio; // Use this for initialization
void Start ()
{
firePosition = transform.Find("FirePosition");
} // Update is called once per frame
void Update () {
if (Input.GetKeyDown(fireKey))
{
//音效
AudioSource.PlayClipAtPoint(shotAudio,firePosition.position);
//生成子弹对象
GameObject go = GameObject.Instantiate(shellPrefab, firePosition.position, firePosition.rotation);
//让子弹移动
go.GetComponent<Rigidbody>().velocity = go.transform.forward * shellSpeed;
}
}
}

  音效那一行先注释掉吧,音效放后面搞。接下来做shellPrefab

找到子弹预制体,检查该有的组件是否有缺失,

挂脚本Shell.cs,控制子弹碰撞后的爆炸特效,

using UnityEngine;

public class Shell : MonoBehaviour
{ public GameObject shellExplosionPrefab; // Use this for initialization
void Start () { } // Update is called once per frame
void Update () { } void OnTriggerEnter(Collider other)
{
GameObject.Instantiate(shellExplosionPrefab, transform.position, transform.rotation);
GameObject.Destroy(gameObject); if (other.tag == "Tank")
{
other.SendMessage("TakeDamage");
} }
}

这个tag要为坦克设置“Tank”,具体方法这里懒得说了。

到这里为止游戏基本功能已经实现了,实在有点疲乏,后面以后再补充。

unity demo之坦克攻击的更多相关文章

  1. 《杜增强讲Unity之Tanks坦克大战》10-相机控制

    10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内.   image 在Hierarchy点击右键   image 点击 Create Empty,生成空对象,改名 ...

  2. 《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制

    11 游戏流程控制 使用协程来控制游戏流程 11.1 添加MessageText 首先添加一个Text来显示文字   image 设置GameMgr   image 11.2 游戏整体流程 下面Gam ...

  3. 《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力

    9 发射子弹时蓄力 实现效果如下   image 按下开火键(坦克1为空格键)重置力为最小力,一直按着的时候蓄力,抬起的时候发射.如果按着的时候蓄力到最大,则自动发射,此时在抬起则不会重复发射. 首先 ...

  4. 《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转

    4 坦克移动和旋转 本节课的目标是实现同时wsad和上下左右控制两个坦克分别移动和旋转 4.1 本节代码预览   image 将上节课场景s2另存为s3. 4.2 添加车轮扬沙效果 从Prefabs里 ...

  5. 《杜增强讲Unity之Tanks坦克大战》1-准备工作

    0.案例介绍 0.1开始界面   点击Play Now 进入游戏界面   左边的坦克使用ws控制前后移动,ad键左右旋转,空格键开火   右边的坦克使用方向键上下控制前后移动,方向键左右键实现左右旋转 ...

  6. 《杜增强讲Unity之Tanks坦克大战》2-场景设置

    2  场景设置 2.1 本节效果预览   2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹   Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源, ...

  7. 《杜增强讲Unity之Tanks坦克大战》3-添加坦克

    3 添加坦克 3.1 本节效果预览   3.2 另存新场景 首先打开上次的场景s1,另存为s2,放到同一个文件夹下面.   3.3 添加坦克模型 在Model文件夹下面找到Tank模型   将Tank ...

  8. 《杜增强讲Unity之Tanks坦克大战》5-子弹

    5 子弹 本节的任务是创建子弹的Prefab   image 首先从Model/Shell找到子弹的模型,拖入Hierarchy中,添加刚体组件,所有属性默认值. 添加Capsule Collider ...

  9. 《杜增强讲Unity之Tanks坦克大战》6-发射子弹

    6 发射子弹 本节完成发射子弹的功能,最终代码如下:   image 首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九 ...

随机推荐

  1. 对NumPy中dot()函数的理解

    今天学习到numpy基本的运算方法,遇到了一个让我比较难理解的问题.就是dot函数是如何对矩阵进行运算的. 一.dot()的使用 参考文档:https://docs.scipy.org/doc/num ...

  2. SQL面试题:有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列

    .请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. ------------------- ...

  3. Centos下抓包

    刚才遇到一个问题,微信配置时token总是失败. 于是抓一下服务器的包.看看是否是数据传输出了问题. 先安装工具 [Shell] 纯文本查看 复制代码 ? 1 yum install -y wires ...

  4. js 实现div模块的截图并下载功能(可制作长图)

    当需要实现html页面部分模块截图并具有保存图片功能时,前台直接生成截图并下载会方便的多.多的不说,直接看代码首先我们需要引入2个js文件: <script type="text/ja ...

  5. 【NOI2005】维护数列

    https://daniu.luogu.org/problem/show?pid=2042 一道伸展树维护数列的很悲伤的题目,共要维护两个标记和两个数列信息,为了维护MAX-SUM还要维护从左端开始的 ...

  6. VSCode插件及用户设置

    第一部分:插件 VSCode内置"emmet"插件,"convert to utf-8"等插件效果!十分强大!代码提示功能特别强悍! 插件地址:点击此处! 推荐 ...

  7. SALM入门笔记(1):特征点的匹配

    SLAM 主要分为两个部分:前端和后端,前端也就是视觉里程计(VO),它根据相邻图像的信息粗略的估计出相机的运动,给后端提供较好的初始值.VO的实现方法可以根据是否需要提取特征分为两类:基于特征点的方 ...

  8. iOS开发-自己定义后台显示图片(iOS7-Background Fetch的应用)

    之前在用电池医生的时候, 发现它有这样一个功能:当应用进入后台的时候, 会显示另外一张图片覆盖App Switcher显示的界面. 效果例如以下: 变成----> 而这种一个功能, 对于保护用户 ...

  9. Leetcode 高精度 Plus One

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Plus One Total Accepted: 17614 Total Submissio ...

  10. 什么是 stack?- 每天5分钟玩转 Docker 容器技术(111)

    什么是 stack ?在回答这个问题之前我们先回忆一下前面部署 WordPress 应用的过程: 首先创建 secret. 然后创建 MySQL service,这是 WordPress 依赖的服务. ...