游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6743|回复: 0

Unity实战 RTS3D即时战略游戏开发(一)

[复制链接]

8360

主题

9283

帖子

2万

积分

论坛元老

Rank: 8Rank: 8

积分
29945
发表于 2017-6-5 15:13:37 | 显示全部楼层 |阅读模式
文/Zander

  今天来分享一个关于用Unity创建3D即时战略游戏的开发,在这个游戏中,你能创建属于自己的即时战略游戏,包括完整的:爆炸、敌人AI、单位、建筑地形、导航AI、战斗、资源还有更多,如果你想不费劲的就做一个,或者你知道捷径做个像样的,那么本次开发就能让你很轻松的创建、启动并运行属于你自己的RTS游戏。

  游戏中的功能大概介绍一下:

  1、玩家控制、以及界面实时显示

  2、操控相机移动

  3、单位信息UI显示

  4、鼠标输入控制

  5、Ai控制(自动寻路、单位追踪、自动生产单位、自动攻击)

  6:战争生产和消耗

  7、一些简单的特效

  游戏完成后大概是是这个样子,如图:

1 (2).jpg

  游戏资源大家可以在这下载:链接: https://pan.baidu.com/s/1slpiDuX 密码: r2yw

  首先、我们要在下载好的工程包中找到Scenes文件夹并打开RTSMap场景。

  然后 、我们来创建玩家和敌人的出生点位置,如图所示,在Map中创建两个空物体,分别取名为Player1Start,Player2Start,为了方便我们看到已定义好的Player1Start和Player2Start,我们从检视面板的左上角选择ICON,分别选择一个颜色Icon

2.jpg

  场景弄好了,现在我们来管理我们的场景,首先在Assets下创建一个文件夹Scripts,然后再Scripts下再创建一个叫RtsManager的脚本,它存储并管理着整个游戏中的大部分有用的功能,其他部分需要访问或者查找,我们把它设计成一个单例模式:
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class RtsManager : MonoBehaviour {  
  5.   
  6.     public static RtsManager Current = null;  
  7.   
  8.     // Use this for initialization  
  9.     void Start () {  
  10.         Current = this;  
  11.     }  
  12.       
  13.     // Update is called once per frame  
  14.     void Update () {  
  15.       
  16.     }  
  17. }  
复制代码

  然后返回Unity中,在Hierarchy中创建一个空对象并命名Manager,之所以叫Manager是因为上面要挂载一些管理脚本。RTSManager就是其中之一,现在就来添加脚本,把写好的RTSManager脚本直接拖拽到Hierarchy中的Manager上即可。如图:
3.jpg

  下面我们来创建一个Player类来持有一些玩家所需的数据,在Scripts新建一个Definitions文件夹,在其底下新建一个PlayerSetupDefinition脚本,这个脚本不需要继承于MonoBehavior,但是为了让这个类易读并能在检视面板上可见,所以我们需要把它序列化。在这个脚本中,我们需要定义玩家的姓名,起始的位置、要添加一些颜色或标识等来区分它们、然后还需要一个初始单位列表,接下来还要知道它需不需要Ai控制、玩家积分,然后保存。
  1. using UnityEngine;  
  2. using System.Collections.Generic;  
  3.   
  4. [System.Serializable]  
  5. public class PlayerSetupDefinition  {  
  6.   
  7.     public string Name;  //玩家名字  
  8.   
  9.     public Transform Location;  //起始位置  
  10.   
  11.     public Color AccentColor;   //玩家标识颜色  
  12.   
  13.     public List<GameObject> StartingUnits = new List<GameObject>();  
  14.   
  15.     public bool IsAi;   //是不是AI控制  
  16.   
  17.     public float Credits;  //积分  
  18. }
复制代码

  然后切换到RTSManager中,来定义这个脚本进行管理:

  1. using UnityEngine;  
  2. using System.Collections.Generic;  
  3.   
  4.   
  5. public class RtsManager : MonoBehaviour {  
  6.   
  7.     public static RtsManager Current = null;  
  8.   
  9.     public List<PlayerSetupDefinition> Players = new List<PlayerSetupDefinition>();  
  10.   
  11.     // Use this for initialization  
  12.     void Start () {  
  13.         Current = this;  
  14.     }  
  15.       
  16.     // Update is called once per frame  
  17.     void Update () {  
  18.       
  19.     }  
  20. }  
复制代码


  定义完后,来到Unity中,能看到Players的初始值为0,我们把它改为2,然后把Player1和Player 2的属性设置一下如图:

20161201135713696.jpg

  先说到这来,本次游戏资源的链接:链接: https://pan.baidu.com/s/1gfqPc6R 密码: 9xkm

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 23:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表