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_敌军坦克生成,坦克移动(可以拓展发射子弹,敌军消失获取分数或者添加动画,声音功能)的更多相关文章

  1. Demon_Tank (坦克移动发射子弹)

    using UnityEngine; using System.Collections; public class Tank : MonoBehaviour { //子弹预设体 public Game ...

  2. Fire Balls 05——坦克和子弹的制作以及炮台发射子弹

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  3. HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置

    在 HBuilder 云打包功能中,生在 .apk 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...

  4. unity demo之坦克攻击

    先展示一下成果吧,节后第一天上班简直困爆了,所以一定要动下脑子搞点事情. 分析: 1.涉及到的游戏对象有:坦克,摄像机,场景素材(包含灯光),子弹 2.坦克具有的功能:移动,旋转,发射子弹,记录生命值 ...

  5. Java 坦克小游戏心得

    原本是闲得慌无聊才去尝试做这个项目的,因为小时候玩小霸王的游戏机,那个时候经常玩这个游戏吧,特别是喜欢那种自定义地图的模式,觉得自由度非常不错.总之关于这个游戏,想说的一大堆.鉴于能有个空闲的时间,打 ...

  6. [AaronYang风格]微软Unity2.X系统学习笔记,记录

    读者约定: Unity我直接简写U了 Unity Dependency Injection(DI) 欢迎学习Unity,通过学完下面的几个流程的引导,你应该就可以很顺利的应用Unity到你的项目中去了 ...

  7. 决定如何开发你的WordPress主题框架

    在本系列教程的第一部分,我介绍了不同类型的主题框架并解释了它们是如何工作的. 在你开始建立你的主题框架之前,你需要考虑它是如何工作的,以及它将会被用来做什么,这样你才能从一开始就找到最合适的开发途径. ...

  8. android 属性动画

    一直再追郭霖的博客和imooc上的一些新的视频,最近有讲到属性动画. 以下内容为博客学习以及imooc上视频资料的学习笔记: 在3.0之前比较常见的动画为tween动画和frame动画: tween动 ...

  9. Django知识补充

    目录 一.文件上传 二.Models补充 三.Django总结 一.文件上传 1.通过form表单或者通过From类上传 views.py from django.shortcuts import r ...

随机推荐

  1. jquery 的缺点

    接口不统一 其中.each();.map();$.each();这些方法的参数函数的参数顺序是index, value这种顺序.但是$.map();方法的参数函数的参数顺序则是value,index这 ...

  2. 【转】iOS6中的Auto Layout:通过代码添加约束

        最近做的项目用到了Auto Layout,于是经过了一番大量的google,这是我看到的讲用代码创建约束最清晰的一篇教程,于是想跟更多的人分享一下.原文也比较简单,可以直接过去看,如果我翻译的 ...

  3. unexpected nil window in _UIApplicationHandleEventFromQueueEvent...

    unexpected nil window in _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: <UI ...

  4. sublime text There are no packages 解决!

    1.问题如下图 解决如下: 1.取得sublime.wbond.net的IPv4地址.在命令提示符中输入以下命令: ping sublime.wbond.net 获得  pv 4 ip     2.C ...

  5. 32.Spring-对象依赖.md

    [toc] 1.对象依赖的分类 Spring中,给对象属性赋值的方法: 构造函数 Set方法 p命名空间 自动装配 注解 1.1构造函数 构造方法通过配置文件中constructor-arg标签实现, ...

  6. 重新开始学习javase_Exception

    “违例”(Exception)这个词表达的是一种“例外”情况,亦即正常情况之外的一种“异常”.在问题发生的时候,我们可能不知具体该如何解决,但肯定知道已不能不顾一切地继续下去.此时,必须坚决地停下来, ...

  7. 重新开始学习javase_控制程序流程

    @学习thinking in java 二.控制程序流程 负数使用 Java 运算符:运算符以一个或多个自变量为基础,可生成一个新值.自变量采用与原始方法调用不同的一种形式,但效果是相同的.根据以前写 ...

  8. 在jQuery.getData中renderCallback使用不同创建方式的结果

    JavaScript 中需要创建函数的话,有两种方法:函数声明.函数表达式,各自写法如下:// 方法一:函数声明function foo() {}// 方法二:函数表达式var foo = funct ...

  9. 网易DBA私享会分享会笔记2

    mysql索引与查询优化什么是索引?索引其实是一个目录.通过各种数据结构实现,是(值=>行位置)的映射 索引的作用:1.提高访问速度2.实现主键.唯一键逻辑 索引使用场景数据量特别大的时候,进行 ...

  10. Windows下Apache部署Django过程记录

    Win7/Apache/Python2.7/Django1.9部署Web   环境: Windows7 Apache httpd-2.4.16-win64-VC14 Python2.7.11 Djan ...