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 ...
随机推荐
- node.js的ejs模版引擎
ejs版本是0.8.8,生成的views目录下面只有index.ejs and error.ejs,没有layout.ejs. D:\lianchuangfile\nodeDevelop\microb ...
- JS遍历对象或者数组
一.纯js实现 <script> var obj = {"player_id":"GS001","event_id":" ...
- asp.net中过滤器的两种写法
1.写在一个单独的类库中在web.config中进行配置 <httpModules> <add name="" type="类的全名称,程序集的名称&q ...
- javascript 获取用户光标,插入文本
图1 如图1所示,点击[函数名称],将函数名称添加到表达式内容框中,点击参数名称,将参数名称index1作为方法的参数添加到表达式内容中的表达式中. 该功能实现主要是采用了javascript获取鼠标 ...
- Linux下安装php加速组件XCache
这里选择的是稳定版本的1.2.2版本,2.0版本的不稳定.wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gzt ...
- 继承UIView的子控件添加点击事件
UITapGestureRecognizer*tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:selfaction:@select ...
- c++面试(二)
1.宏参数的连接 #define CONS(a,b) (int)(a##e##b) CONS(2,3) =>2e3 =2000 2.const int b=10; int c=20; const ...
- 装饰者模式(Decorator)
首先来看一个例子: 比如,饮料可以分为很多种类,而这里我取一个咖啡,那么这个咖啡呢,有多种形式的, 比如有加糖了的咖啡,有加奶的咖啡,也有加热了的咖啡,也有加了冰块的咖啡. 而各个顾客的选择却是不同的 ...
- 测试最新的log4cplus1.1.2版
#include "stdafx.h" #include <sstream> class AB{ public: void do_test() { ...
- YesFInder - Web File Manager 网页文件管理系统
开发原由: 原来想找一下实现可视化图片上传程序,先找了ckfinder,发现居然是收费的,而且用起来也不顺手,于是想能不能自己写一个.想到这就立即动手,花2天时间完成初步功能,然后再花了3天完善.目前 ...