一、介绍

该项目以虚拟现实技术课程中老师所教授 UnityChan 相关 人物角色动画控制为基础,引入室外场景模型并添加光照和阴影;添加交互性元素如 发射炮弹,键盘按钮移动坦克;实现第一、三人称视角切换。

开发平台为 Unity 2018.4.21f1(64-bit),操作系统为 Windows 10(64 位)。

二、操作说明

使用 Visual Studio 编译这个游戏,然后运行。

2.1 这个是游戏刚开始进入时的场景

2.2 移动人物漫游场景

WSAD 键用来控制坦克的位置,行走用户以第三人称视角在整个场景中进行移动。

2.3 移动鼠标切换视角

可以移动鼠标,来切换视角

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CHzGIqX2-1653294122999)
(https://www.writebug.com/myres/static/uploads/2022/5/21/44912dd0f2bce5f0058dcf67ebe48014.writebug)]

2.4 鼠标点击发射炮弹

点击鼠标的时候,可以发射炮弹到一个位置,观看到炸弹爆炸的效果

三、探索的技术

3.1 多摄像机切换

using UnityEngine;
public class CameraControl : MonoBehaviour
{public float m_DampTime = 0.2f;public float m_ScreenEdgeBuffer = 4f;public float m_MinSize = 6.5f;[HideInInspector] public Transform[] m_Targets;private Camera m_Camera;private float m_ZoomSpeed;private Vector3 m_MoveVelocity;private Vector3 m_DesiredPosition;private void Awake(){m_Camera = GetComponentInChildren<Camera>();}private void FixedUpdate(){Move();Zoom();}private void Move(){FindAveragePosition();transform.position = Vector3.SmoothDamp(transform.position, m_DesiredPosition, ref m_MoveVelocity, m_DampTime);}private void FindAveragePosition(){Vector3 averagePos = new Vector3();int numTargets = 0;for (int i = 0; i < m_Targets.Length; i++){if (!m_Targets[i].gameObject.activeSelf)continue;averagePos += m_Targets[i].position;numTargets++;}if (numTargets > 0)averagePos /= numTargets;averagePos.y = transform.position.y;m_DesiredPosition = averagePos;}private void Zoom(){float requiredSize = FindRequiredSize();m_Camera.orthographicSize = Mathf.SmoothDamp(m_Camera.orthographicSize, requiredSize, ref m_ZoomSpeed, m_DampTime);}private float FindRequiredSize(){Vector3 desiredLocalPos = transform.InverseTransformPoint(m_DesiredPosition);float size = 0f;for (int i = 0; i < m_Targets.Length; i++){if (!m_Targets[i].gameObject.activeSelf)continue;Vector3 targetLocalPos = transform.InverseTransformPoint(m_Targets[i].position);Vector3 desiredPosToTarget = targetLocalPos - desiredLocalPos;size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.y));size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.x) / m_Camera.aspect);}size += m_ScreenEdgeBuffer;size = Mathf.Max(size, m_MinSize);return size;}public void SetStartPositionAndSize(){FindAveragePosition();transform.position = m_DesiredPosition;m_Camera.orthographicSize = FindRequiredSize();}
}

坦克生命值切换

using UnityEngine;
using UnityEngine.UI;
public class TankHealth : MonoBehaviour
{public float m_StartingHealth = 100f;public Slider m_Slider;public Image m_FillImage;public Color m_FullHealthColor = Color.green;public Color m_ZeroHealthColor = Color.red;public GameObject m_ExplosionPrefab;private AudioSource m_ExplosionAudio;private ParticleSystem m_ExplosionParticles;private float m_CurrentHealth;private bool m_Dead;private void Awake(){m_ExplosionParticles = Instantiate(m_ExplosionPrefab).GetComponent<ParticleSystem>();m_ExplosionAudio = m_ExplosionParticles.GetComponent<AudioSource>();m_ExplosionParticles.gameObject.SetActive(false);}private void OnEnable(){m_CurrentHealth = m_StartingHealth;m_Dead = false;SetHealthUI();}public void TakeDamage(float amount){m_CurrentHealth -= amount;SetHealthUI();if (m_CurrentHealth <= 0f && !m_Dead){OnDeath();}}private void SetHealthUI(){m_Slider.value = m_CurrentHealth;m_FillImage.color = Color.Lerp(m_ZeroHealthColor, m_FullHealthColor, m_CurrentHealth / m_StartingHealth);}private void OnDeath(){m_Dead = true;m_ExplosionParticles.transform.position = transform.position;m_ExplosionParticles.gameObject.SetActive(true);m_ExplosionParticles.Play();m_ExplosionAudio.Play();gameObject.SetActive(false);}

plosionParticles.gameObject.SetActive(true);
m_ExplosionParticles.Play();
m_ExplosionAudio.Play();
gameObject.SetActive(false);
}


基于Unity开发实现的坦克游戏设计相关推荐

  1. 基于Pythonn开发的兔子小游戏设计

    导语 这又将是一个不定期更新的系列~~~ 本系列主要将使用到 python 的 pygame 模块来教大家制作一些小游戏,每期制作一个.最后都会打包成.exe 文件分享给大家~~~ So,对于只想玩小 ...

  2. 原来这些热门游戏都基于Unity开发,为何Unity集训营越来越受欢迎?

    5月,几乎是国内游戏圈最热闹的时刻之一.过去30天内,行业两大巨头--腾讯和网易先后在线上举行年度游戏发布会,带来了近百款游戏的最新消息,也引发了从业人员对Unity引擎的再次热议. 腾讯游戏,网易游 ...

  3. 基于Unity的多人协作游戏开发

    基于Unity的多人协作游戏开发–第一次迭代 小组成立与大型应用软件设计第一周课堂,小组由一共5名成员组成,由王虎林担任组长,组员分别是:陈志健 李子钊 杨捷 林博韬.下面将是我们第一次迭代的主要历程 ...

  4. 基于unity的2D横版游戏开发日志 小结

    前言 说是基于unity的2D横版游戏,实际上只是一个初学unity与C#新人的练手Demo,目前还处于半成状态.美术资源方面全部出自unity免费资源,经过自己的小修,大致拼出了一个游戏.代码方面, ...

  5. 基于JavaSwing开发吃豆子小游戏 课程设计 大作业源码

    基于JavaSwing开发吃豆子小游戏:   (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse/Eclipse/idea+Jdk 运行效果图: 基于JavaSwing开发 ...

  6. 基于JavaSwing开发潜艇大战小游戏 课程设计 大作业源码

    基于JavaSwing开发潜艇大战小游戏:  (大作业) 开发环境: Windows操作系统 开发工具: Eclipse+Jdk 运行效果图: 基于JavaSwing开发潜艇大战小游戏:  (大作业) ...

  7. 基于Unity3D的体素沙盒游戏设计与实现(上)

    基于Unity3D的体素沙盒游戏设计与实现 摘    要 随着计算机硬件和软件技术的逐步发展,世界游戏开发行业也在日益壮大,涌现出不少优秀的作品,逐渐成为各国文化创意领域一张闪亮的名片.本文以全球知名 ...

  8. 基于android平台的24点游戏设计与实现需求分析,基于Android平台的24点游戏设计与实现需求分析_毕业设计论文.doc...

    基于Android平台的24点游戏设计与实现 摘要 随着移动设备的普及以及移动设备的硬件的提升,移动设备的功能越来越完善,移动设备的系统平台也日渐火热起来.目前国内最常见的移动开发平台有Symbian ...

  9. 基于Java实现的Android拼图游戏设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85638665 基于Java实现的Android拼图游戏设计 游戏效果 一.Android ...

最新文章

  1. php ajax mysql 分页查询_基于PHP_MySql_Ajax的分页技术方案
  2. 【数据挖掘】神经网络 后向传播算法 向前传播输入 案例计算分析 ( 网络拓扑 | 输入层计算 | 隐藏层计算 | 输出层计算 )
  3. 日本农商巨头50年布局多个领域 对话国际农民丰收节贸易会
  4. 使用c#类库绘制柱状图
  5. 使用语句修改数据表结构
  6. sql CHECK ,UNIQUE 约束(mysql)
  7. 英语四六级听力考试选项技巧
  8. 初识多线程之基础知识与常用方法
  9. 洛谷 1776 宝物筛选 【多重背包+二进制拆分】
  10. HCIA~广域网技术
  11. poj3259 Wormholes floyd求负环
  12. 手机微信wifi怎么连接到服务器地址,出门在外用手机流量太贵,教你一招,用微信就能连接附近wifi...
  13. JAVA 去除重复对象方法
  14. 「SQL面试题库」 No_55 销售分析 I
  15. MSRN:Multi-scale Residual Network for Image Super-Resolution 论文理解
  16. 2018年个人所得税Excel计算公式
  17. 解除带宽限速,提升电脑网速
  18. sql操作access时出现 MSDTC错误,服务器 'SERVER' 上的 MSDTC 不可用。
  19. redis搭建三主三从架构
  20. Python-__getattr__与__getattribute__

热门文章

  1. P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap
  2. 微信小程序开发语言一般有哪些?
  3. 文本和输入:复制和粘贴
  4. java 读取excel表格_Java读取excel表格(原理+实现)
  5. 开源音乐_与这位开源音乐老师一起学习乐器
  6. 【微信H5】分享出去是链接,不是卡片的原因及解决方案
  7. Batch Renormalization
  8. zemax场曲畸变图_zemax初学入门像差分析各种图像(上)
  9. 《D o C P》学习笔记(3 - 1)Regular Expressions, other languages and interpreters - Lesson 3
  10. C语言再学习 -- 常用快捷键