这是我的第一个Unity项目精简版的坦克大战看着siki视频学着做的历时一天半。

游戏描述:

游戏由2个玩家控制,每个玩家可以控制坦克前进后退左转右转和攻击,每个玩家有100hp基础血量每次攻击随机造成10-20点伤害。当某个玩家血量低于0时他操控的坦克被摧毁并且游戏结束。

我的工作:

一、坦克的移动脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TankMovement : MonoBehaviour {public float speed = 5;public float angularSpeed = 7;public float number = 1;private Rigidbody rigidbody;public AudioClip idleAudio;public AudioClip drivingAudio;private AudioSource audio;// Use this for initializationvoid Start () {rigidbody = this.GetComponent<Rigidbody>();audio = this.GetComponent<AudioSource>();}// Update is called once per frameprivate void FixedUpdate() {float v = Input.GetAxis("VerticalPlayer"+number);float h = Input.GetAxis("HorizontalPlayer" + number);rigidbody.velocity = transform.forward * v * speed;rigidbody.angularVelocity = transform.up * h * angularSpeed;if (Mathf.Abs(h) > 0.1 || Mathf.Abs(v) > 0.1) {audio.clip = drivingAudio;if (audio.isPlaying == false) audio.Play();}else {audio.clip = idleAudio;if (audio.isPlaying == false)audio.Play();}}
}

二、坦克的攻击脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TankAttack : MonoBehaviour {private Transform firePosition;public GameObject shellPrefab;public KeyCode fireKey = KeyCode.Space;public float shellSpeed = 10;public AudioClip shotAudio;// Use this for initializationvoid Start () {firePosition = transform.Find("FirePosition");}// Update is called once per framevoid Update () {if (Input.GetKeyDown(fireKey)) {AudioSource.PlayClipAtPoint(shotAudio, transform.position);GameObject go = GameObject.Instantiate(shellPrefab, firePosition.position, firePosition.rotation) as GameObject;go.GetComponent<Rigidbody>().velocity = go.transform.forward * shellSpeed;}}
}

三、坦克的血量脚本

using UnityEngine;
using UnityEngine.UI;public class TankHealth : MonoBehaviour {public int hp = 100;public GameObject tankExplosin;public AudioClip tankExplosinAudio;public Slider hpSlider;private int hpTotal;// Use this for initializationvoid Start () {hpTotal = hp;}// Update is called once per framevoid Update () {}void TakeDamage() {if (hp <=0) return;hp -= Random.Range(10, 20);hpSlider.value = (float)hp / hpTotal;if (hp <= 0) {AudioSource.PlayClipAtPoint(tankExplosinAudio, transform.position);GameObject.Instantiate(tankExplosin, transform.position + Vector3.up, transform.rotation);GameObject.Destroy(this.gameObject);}}
}

四、子弹的射击脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Shell : MonoBehaviour {public GameObject shellExplosinPrefab;public AudioClip shellExplosinAudio;// Use this for initialization// Update is called once per frameprivate void OnTriggerEnter(Collider collider) {AudioSource.PlayClipAtPoint(shellExplosinAudio, transform.position);GameObject.Instantiate(shellExplosinPrefab, transform.position, transform.rotation);GameObject.Destroy(this.gameObject);if (collider.tag == "Tank") {collider.SendMessage("TakeDamage");}}
}

五、摄像机跟随脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FollowTarget : MonoBehaviour {public Transform player1;public Transform player2;private Vector3 offset;private Camera camera;// Use this for initializationvoid Start () {offset = transform.position - (player1.position + player2.position) / 2;camera = this.GetComponent<Camera>();}// Update is called once per framevoid Update () {if (player1 == null || player2 == null) return;transform.position = (player1.position + player2.position) / 2 + offset;float dis = Vector3.Distance(player1.position, player2.position);float size = dis * 1.2f;camera.orthographicSize = size;}
}

六、背景音乐的设置

总结:

看视频学习前我只是简单了解一些Unity的基本操作,所以堪称小白。视频教程短短几小时的时间话费我一天多时间去学习才做出这个简陋版的坦克大战。通过这次学习我了解了一些Unity的操作如脚本的编写,其中变量的调用,控制物体的移动,利用ui表示血量,刚体的作用,摄像头的使用等等。
最后感谢siki老师的视频教程带我走入unity的世界。

Unity入门案例-Tanks坦克大战相关推荐

  1. 《Unity入门案例-Tanks坦克大战》2-场景设置

    2  场景设置 2.1 本节效果预览 2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹 Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源,主要是与 ...

  2. 基于ComblockEngine+Unity的联机版坦克大战(一)

    文章目录 阶段目标 环境搭建 流程设计 相关说明 相关代码 上述源码地址 写在前面的一段话: 之前准备用LuaServer写一个简单moba手游,后来觉得,LuaServer毕竟是前公司内部的产品,不 ...

  3. Unity开发游戏--2D坦克大战(一)

    Unity开发游戏--2D坦克大战(一) 前言 开发环境 场景搭建 新建工程 导入素材 设置Camera 设置游戏窗口大小 保存场景 创建角色 创建图片角色 修改角色大小 生成Prefab 前言 游戏 ...

  4. 超详细 Unity 大作业之 坦克大战

    本次大作业中,我选择的主题是制作一款简单的坦克大战小游戏,实现此项目借鉴并使用了BiliBili教程及资源和学姐的博,利用Unity自带的3D导航技术实现敌人坦克的自动导航. 演示视频:Unity大作 ...

  5. Unity学习回忆--3D坦克大战

    2023年LPL春季赛季后赛正在火热进行中,你们心中的总冠军是哪支队伍呢?作为热爱游戏的程序猿,一起来聊聊你那些有意义的游戏开发经历吧! 前言 还记得大一的时候第一次接触编程,为了手写一个hello, ...

  6. Unity 2D手游——坦克大战 C#

    需要下载项目的朋友,请打开CSDN链接:Unity2D坦克大战项目工程 本项目涉及到的功能: 1.UI部分: a .游戏开始界面UI       b.主场景UI      c.游戏胜利界面UI     ...

  7. Unity 3D做2D坦克大战,控制图片切换朝向的2种方法。

    老师 | Trigger 学习者 |小白 出品 | Siki 学院 第一种更换图片切换朝向的方法: public class Player:MonoBehaviour{public float mov ...

  8. Unity 3D做2D坦克大战--敌人自动攻击AI编写

    敌人AI攻击方法的编写 老师 | Trigger 学习者 |小白 出品 | Siki 学院 public class Enemy : MonoBehaviour {//属性值public float ...

  9. Unity小游戏——3D坦克大战

    1.坦克能够在地上移动 第一步:首先获取移动或者旋转的方向   Input.GetAxis(); (1)Vertical                        对应键盘上面的上下箭头,当按下上 ...

最新文章

  1. JasperReport报表设计4
  2. mysql 基于c_linux-基于MYSQL的C程序实践
  3. 【拯救赵明】 安全方案 超简单
  4. reactjs 类的基本知识
  5. Python爬虫开发:requests库的使用--https协议的问题解决
  6. 团队作业(五)——旅游行业的手机App
  7. Jmeter(二十五)Jmeter之系统函数
  8. dubbo中的Filter顺序是如何确定的
  9. 电脑模拟器哪个好_学习电脑教程:网线wifi哪个信号好
  10. easyui日期控件datebox的onchange事件
  11. 一种手机保密桌面的想法
  12. html做table某一列的合计,Jquery、js计算table列合计
  13. Cameralink转HDMI接口转换模块
  14. Java实现图片水印
  15. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:UNO/Mega + MQ2烟雾传感器 + MQ3酒精传感器 + MQ7一氧化碳传感器 + OLED
  16. 计算机与信息学院迎新标语,学院迎新标语横幅
  17. CRUP为后面使用框架在页面上增删改查做下铺垫.
  18. 怎样批量查询顺心捷达单号信息并分析是否延误
  19. KVM - 虚机内核配置
  20. 9个免费开源的bug追踪软件

热门文章

  1. 【一】数据挖掘(DM)到底是何方神圣?
  2. hdu 1494 跑跑卡丁车~
  3. 1207--铁矿石涨幅
  4. 4种方式实现鼠标放上图片变大效果
  5. H3C系列交换机密码恢复方法
  6. vue android 4.4兼容,vue cli3 打包兼容Android 4.4
  7. 百度阅读器-支持超多文档格式的免费阅读器
  8. behavior:expression((this.hideFocus=true) (this.behavior='none'));
  9. java毕业生设计作品测评网站计算机源码+系统+mysql+调试部署+lw
  10. C# Qrcode生成二维码支持中文,带图片,带文字