Demo_敌军坦克生成,坦克移动(可以拓展发射子弹,敌军消失获取分数或者添加动画,声音功能)

using UnityEngine;
using System.Collections; public class Tank : MonoBehaviour { //坦克面积结构体对象
public TankArea tankArea;
private float hor, ver;
//坦克行走的速度,以及掉头速度
public float moveSpeed = ;
public float turnSpeed = ; void Start()
{
hor = Input.GetAxis("Horizontal");
ver = Input.GetAxis("Vertical"); }
void Update()
{
//t坦克转身
hor = Input.GetAxis("Horizontal");
transform.eulerAngles += hor * Vector3.up * turnSpeed;
//坦克前后行进
ver = Input.GetAxis("Vertical");
transform.position += transform.right * ver * Time.deltaTime * moveSpeed; //实时同步坦克面积结构体对象
tankArea.TankInit (transform.position.x, transform.position.z);
}
}
有了坦克之后再创造敌军坦克,随机生成并且向主坦克进攻。没有创造发射子弹以及敌人消失功能

using UnityEngine;
using System.Collections;
using System.Collections.Generic; public class EnemyCreater : MonoBehaviour { //敌方坦克预设体
public GameObject enemyPrefab;
//场面上的所有坦克
private List<Tank> allTank;
//主角坦克
private Tank playerArea;
//计时器
private float timer;
//生成坦克的时间间隔
public float interval = ; void Awake()
{
allTank = new List<Tank> ();
} void Start()
{
//找到主角TankArea对象
playerArea = GameObject.FindWithTag ("Player").
GetComponent<Tank> ();
//将主角坦克添加到列表中
allTank.Add (playerArea);
} void Update()
{
//计时器计时
timer += Time.deltaTime;
//计时结束
if (timer >= interval) {
///TODO:生成坦克
EnemyInit();
//计时器清零
timer = ;
}
} /// <summary>
/// 生成坦克
/// </summary>
void EnemyInit()
{
//随机位置
float currentX;
float currentZ;
do {
//开始随机
currentX = Random.Range (-23.0f, 23.0f);
currentZ = Random.Range (-23.0f, 23.0f);
} while (!EnemyCheck(currentX,currentZ));
//可用位置
Vector3 canUsePos = new Vector3(currentX,,currentZ);
//生成
GameObject current = Instantiate (enemyPrefab,
canUsePos,
Quaternion.identity) as GameObject;
//更新当前坦克列表
allTank.Add (current.GetComponent<Tank> ());
} /// <summary>
/// 坦克位置检测
/// </summary>
/// <returns>True为可用,false为不可用.</returns>
/// <param name="x">The x .</param>
/// <param name="z">The z .</param>
bool EnemyCheck(float x,float z)
{
//遍历所有坦克
foreach (var currentT in allTank) {
//检测当前坦克位置是否与该范围冲突
bool canUse = !currentT.tankArea.PositionCheck (new Vector3 (x, , z));
//如果冲突
if (!canUse)
//返回不可用
return false;
}
//返回可用
return true;
}
} 需要引用的TankArea脚本
using UnityEngine;
using System.Collections; public struct TankArea
{
//坦克坐标
Vector2 position;
//左下坐标
public Vector2 leftDown;
//右上坐标
public Vector2 rightUp; public void TankInit(float x,float z)
{
//设置坦克位置
position = new Vector2 (x,z);
//生成左上及右下点坐标
leftDown = new Vector2 (x-,z-2.7f);
rightUp = new Vector2 (x+,z+4.2f);
} /// <summary>
/// 位置检测
/// </summary>
/// <returns>如果该位置在范围内返回True,否则返回false</returns>
/// <param name="pos">传入的坦克位置.</param>
public bool PositionCheck(Vector3 pos)
{
if (pos.x > leftDown.x
&& pos.x < rightUp.x
&& pos.z > leftDown.y
&& pos.z < rightUp.y) {
return true;
}
return false;
}
}
Demo_敌军坦克生成,坦克移动(可以拓展发射子弹,敌军消失获取分数或者添加动画,声音功能)的更多相关文章
- Demon_Tank (坦克移动发射子弹)
using UnityEngine; using System.Collections; public class Tank : MonoBehaviour { //子弹预设体 public Game ...
- Fire Balls 05——坦克和子弹的制作以及炮台发射子弹
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置
在 HBuilder 云打包功能中,生在 .apk 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...
- unity demo之坦克攻击
先展示一下成果吧,节后第一天上班简直困爆了,所以一定要动下脑子搞点事情. 分析: 1.涉及到的游戏对象有:坦克,摄像机,场景素材(包含灯光),子弹 2.坦克具有的功能:移动,旋转,发射子弹,记录生命值 ...
- Java 坦克小游戏心得
原本是闲得慌无聊才去尝试做这个项目的,因为小时候玩小霸王的游戏机,那个时候经常玩这个游戏吧,特别是喜欢那种自定义地图的模式,觉得自由度非常不错.总之关于这个游戏,想说的一大堆.鉴于能有个空闲的时间,打 ...
- [AaronYang风格]微软Unity2.X系统学习笔记,记录
读者约定: Unity我直接简写U了 Unity Dependency Injection(DI) 欢迎学习Unity,通过学完下面的几个流程的引导,你应该就可以很顺利的应用Unity到你的项目中去了 ...
- 决定如何开发你的WordPress主题框架
在本系列教程的第一部分,我介绍了不同类型的主题框架并解释了它们是如何工作的. 在你开始建立你的主题框架之前,你需要考虑它是如何工作的,以及它将会被用来做什么,这样你才能从一开始就找到最合适的开发途径. ...
- android 属性动画
一直再追郭霖的博客和imooc上的一些新的视频,最近有讲到属性动画. 以下内容为博客学习以及imooc上视频资料的学习笔记: 在3.0之前比较常见的动画为tween动画和frame动画: tween动 ...
- Django知识补充
目录 一.文件上传 二.Models补充 三.Django总结 一.文件上传 1.通过form表单或者通过From类上传 views.py from django.shortcuts import r ...
随机推荐
- C#简单一句代码,实现pictureBox的照片另存为磁盘文件不出错
开发人事档案系统时,一般都要利用pictureBox对人员的照片进行操作,包括选择保存照片.另存照片.删除照片,如下图: 将照片保存到数据库和从数据库中删除,网友写了很多实用代码,非常好用.但是要将p ...
- Objective-C内存管理与原理
尽管苹果在 iOS 5/ Mac OS X 10.7 开始导入ARC,利用 Xcode4.2 可以使用该机能.ARC就是自动引用计数,是一项为Objective - C程序在编译时提供自动内存管理的功 ...
- Qt中widget重新setParent需要注意的问题
有时候需要在widget中重新setParent,但会发现setParent有时候会出现问题,比如子窗口不在刷出来等等. 其实,有一点是需要注意的,就是Qt文档里说的,如果你当前widget重新设置了 ...
- 基于daridus认证的openvpn部署
基于daridus认证的openvpn部署 安装openvpn 1.安装openvpn依赖包 #yum -y install gcc gcc-c++ #yum -y install openssl o ...
- Linux下的Job Control(转:http://blog.chinaunix.net/uid-26495963-id-3062757.html)
一.Job的概念 Job是指在批处理的环境中,为完成某一任务而进行一系列操作的总称.在个人接触计算机的年代,批处理的环境已经不容见到了,只有一些特殊的行业和环境下还在使用这样的概念,仅在书本中接触过. ...
- html form <label>标签基础语法结构与使用案例教程(转载)
在表单布局中会遇到label标签的使用,label没有任何样式效果,有触发对应表单控件功能.比如我们点击单选按钮或多选框前文字对应选项就能被选中,这个就是对文字加了<label>标签实现. ...
- java保留两位小数的方法
01.import java.math.BigDecimal; 02.import java.text.DecimalFormat; 03.import java.text.NumberFormat; ...
- CLR via C#可空值类型
我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型 ...
- 如何利用PowerPoint2013制作阶梯流程图?
制作阶梯流程图有哪些窍门呢?下面我们一起来看看吧: ①启动PowerPoint2013,单击菜单栏--插入--形状,选择方角矩形,在图中画出来. ②画好矩形,摆放到合适的位置,如下图所示. ③然后再次 ...
- Android Service 启动和停止服务
activity_main.xml 定义两个Button控件,start_service和stop_service. <LinearLayout xmlns:android="http ...