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. 合理计划 dictionary cache 大小

    [数据字典缓冲区(Data Dictionary Cache)  ] 用于存放Oracle系统管理自身所需要的所有信息,包括登录的用户名.用户对象.权限等. 查看 data dictionary ca ...

  2. MySQL 创建数据库

    MySQL 创建数据库 使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以 ...

  3. ASP.NET 开发学习视频教程大全(共800集)

      ASP.NET是微软.NET平台的支柱之一,被广泛应用在WEB等互联网开发领域,因此它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上.这里整理了最全的ASP.NET开发学习 ...

  4. 二套小清新(APP界面)

                   

  5. javascript 常用array类型方法

    concat:基于当前数组中的所有项创建一个新数据,会创建当前数组一个副本,然后将接受到的参数放到数组末尾,最后返回新数组.如果没有参数,则复制当前数组并返回副本. slice:基于当前数组中一个或多 ...

  6. WireShark过滤语法

    1.过 滤IP,如来源IP或者目标IP等于某个IP 例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168. ...

  7. (转)ligerUI 使用教程之Tip介绍与使用

    概述:   ligertip是ligerUI系列插件中的tooltip类插件,作用是弹一个浮动层,起提示作用   阅读本文要求具备jQuery的基本知识,不然文中的javascript代码不易理解 截 ...

  8. 每日一算法【one】

    //有一个数组  {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677} 查找数组中是否有指定的某一个数. /** *------- ...

  9. 延迟加载并渐现内容的jquery插件lazyFade

    http://www.jqcool.net/demo/201412/jquery-lazyfade/

  10. PHP自定义错误处理

    自定义错误报告的处理方式,可以完全绕过标准的PHP错误处理函数,这样就可以按照自己定义的格式打印错误报告,或改变错误报告打印的位置(标准PHP的错误报告是哪里发生错误就在发生位置处显示).以下几种情况 ...