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

分析:
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之坦克攻击的更多相关文章
- 《杜增强讲Unity之Tanks坦克大战》10-相机控制
10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内. image 在Hierarchy点击右键 image 点击 Create Empty,生成空对象,改名 ...
- 《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制
11 游戏流程控制 使用协程来控制游戏流程 11.1 添加MessageText 首先添加一个Text来显示文字 image 设置GameMgr image 11.2 游戏整体流程 下面Gam ...
- 《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
9 发射子弹时蓄力 实现效果如下 image 按下开火键(坦克1为空格键)重置力为最小力,一直按着的时候蓄力,抬起的时候发射.如果按着的时候蓄力到最大,则自动发射,此时在抬起则不会重复发射. 首先 ...
- 《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转
4 坦克移动和旋转 本节课的目标是实现同时wsad和上下左右控制两个坦克分别移动和旋转 4.1 本节代码预览 image 将上节课场景s2另存为s3. 4.2 添加车轮扬沙效果 从Prefabs里 ...
- 《杜增强讲Unity之Tanks坦克大战》1-准备工作
0.案例介绍 0.1开始界面 点击Play Now 进入游戏界面 左边的坦克使用ws控制前后移动,ad键左右旋转,空格键开火 右边的坦克使用方向键上下控制前后移动,方向键左右键实现左右旋转 ...
- 《杜增强讲Unity之Tanks坦克大战》2-场景设置
2 场景设置 2.1 本节效果预览 2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹 Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源, ...
- 《杜增强讲Unity之Tanks坦克大战》3-添加坦克
3 添加坦克 3.1 本节效果预览 3.2 另存新场景 首先打开上次的场景s1,另存为s2,放到同一个文件夹下面. 3.3 添加坦克模型 在Model文件夹下面找到Tank模型 将Tank ...
- 《杜增强讲Unity之Tanks坦克大战》5-子弹
5 子弹 本节的任务是创建子弹的Prefab image 首先从Model/Shell找到子弹的模型,拖入Hierarchy中,添加刚体组件,所有属性默认值. 添加Capsule Collider ...
- 《杜增强讲Unity之Tanks坦克大战》6-发射子弹
6 发射子弹 本节完成发射子弹的功能,最终代码如下: image 首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九 ...
随机推荐
- deepin 常用设置
1 不开特效和动画,开启透明无黑边 #!/bin/bash #开启 metacity 窗管合成,取代正在运行的窗管 deepin-metacity --composite --replace #关闭 ...
- 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)
前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...
- React 页面间传值的个人总结
react 组件之间传值的方案有很多,下面是我个人经验的总结 props 来传递值 传值方式: 通过props 获取值 通过props 提供的func去修改值 优点: 不需要任何第三方的组件,纯rea ...
- Windos系统git提交
一.$ git status //查看当前项目下所有文的状态,如果第一次,你会发现都红颜色的,因为它还没有交给git/github管理. 二.$ git add . //(.)点表示当前目录下 ...
- GET方式提交中文编码问题以及三种解决方式
GET方式提交在WEB中是非常常用的方式,有时候我们在使用GET方式提交请求不得不提交中文,但是TOMCAT等容器对于GET方式的编码问题总是让人折腾. 先说说流程吧: 我们的内容使用GET方式发送, ...
- js二级事件模型的处理细节
一.纠正网络上的一个误传--“IE不支持事件捕获” 可以在浏览器中运行上面demo,在各主流浏览器中,鼠标移上都可以分别触发捕获与冒泡事件的监听函数,所以IE也是支持事件捕获的,连IE6都支持,只是在 ...
- greenplum在执行vacuum和insert产生死锁问题定位及解决方案
首先声明:未经本人同意,请勿转载,谢谢! 本人使用自己编译的开源版本的greenplum数据库用于学习,版本为PostgreSQL 8.3.23 (Greenplum Database 4.3.99. ...
- Java IO(3)非阻塞式输入输出(NIO)
在上篇<Java IO(2)阻塞式输入输出(BIO)>的末尾谈到了什么是阻塞式输入输出,通过Socket编程对其有了大致了解.现在再重新回顾梳理一下,对于只有一个“客户端”和一个“服务器端 ...
- Linux下select的用法--实现一个简单的回射服务器程序
1.先看man手册 SYNOPSIS /* According to POSIX.1-2001 */ #include <sys/select.h> / ...
- Ubuntu 编译安装 OpenCV 3.1
目标系统:Ubuntu 16.04-64bit OpenCV 版本:opencv-3.1.0 安装步骤 安装 cmake.sudo apt-get isntall cmake cmake-qt-gui ...