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 首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九 ...
随机推荐
- Caddy服务器搭建和实现文件共享
1:Caddy介绍 作为新兴 Web 服务器,Caddy 提供了很多简单易用的功能而没有历史的包袱,其默认支持并且能帮你自动配置 HTTP/2.HTTPS,对于 IPV6.WebSockets 都有很 ...
- Failed to load the JNI shared lib...
启动eclipse报错:Failed to load the JNI shared lib... 解决办法如下:保证JDK与eclipse相匹配 在同一台计算机中,如果JDK是32位的,那么eclip ...
- gitlab一键安装+配置(备份+LADP认证)
gitlab一键安装+配置(备份+LADP认证) #gitlab一键安装 #centos6 mini, GitLab社区版 #参考官方最新文档 https://www.gitlab.com.cn/in ...
- 这些 Drawable 的小技巧,你都了解吗?
一.前言 在 Android 的开发过程中,Drawable 经常会被用到,一般会用 Drawable 为 View 设置一个显示的效果.而在 Android 下,也提供了很多 Drawable 的默 ...
- P1373 小a和uim之大逃离
转自:http://www.cnblogs.com/CtsNevermore/p/6028138.html 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一 ...
- ACM个人零散知识点整理
ACM个人零散知识点整理 杂项: 1.输入输出外挂 //读入优化 int 整数 inline int read(){ int x=0,f=1; char ch=getchar(); while(ch& ...
- poj 3431 Expedition 优先队列
poj 3431 Expedition 优先队列 题目链接: http://poj.org/problem?id=2431 思路: 优先队列.对于一段能够达到的距离,优先选择其中能够加油最多的站点,这 ...
- iOS 处理socket粘包问题
1.什么是粘包? 粘包通常出现在TCP的协议里面,对于UDP来说是不会出现粘包状况的,之所以出现这种状况的原因,涉及到一种名为Nagle的算法. Nagle算法通过减少必须发送的封包的数量,提高网络应 ...
- YiShop_商城网站设计应该注意什么
商城网站的建设,不是一件简单的事情,当然,也不要把商城网站的建设想得那么的复杂,在建设商城网站的时候 ,只要考虑到以下这些因素,定能把商城网站建设工作做好.那么商城网站建设要考虑哪些因素:(1)风格 ...
- maven项目部署对Oracle jar包的处理
1.正常情况下,我们是访问不到ojdbc.jar的,需要建立一个本地仓. 2.先找到自己的Oracle中ojdbc.jar将其放入到 C:\Users\Administrator 这个目录下,然 ...