unity3D 简易游戏制作过程(求详解,最好有配图)

unity3D 简易游戏制作过程(求详解,最好有配图),第1张

unity3D 简易游戏制作过程中,需要掌握一些工具的按键功能和 *** 作,新建一个游戏项目后,设置游戏类型,然后点击创建,进入了U3D的开发界面后,进行游戏设计,具体的方法如下:

1打开unity3D游戏引擎,会d出开始的窗口,选择新建项目;

2设置游戏的类型,U3D虽然叫做3D游戏引擎,但也可以制作出精美的2D,25D的手游,网游,单机游戏,Flash游戏等等。这里选择3D类型,游戏名称尽量不要出现汉字,点击创建;

3就进入了U3D的开发界面,界面设计还是很人性化的。这里的所有窗口都可以随意拖动,但是屏幕太小有时可能会影响游戏设计,游戏视图可以放到第二屏幕;

4创建一个游戏对象——一个方块。在 Hierarchy下方点击Create,有2D和3D的游戏对象,选择3D下的cube,创建方块,这时场景中会出现一个方块,可以点击cube,修改属性和大小位置;

5导入游戏素材,一般都是unitypackage后缀的文件,Maya制作的fbx文件也可以导入,导入方法直接将文件拖动到下方的文件夹区域,注意不要出现中文路径,否者会出错,这是因为U3D对中文不支持,很容易出现不可知错误。也可直接拖入,记得键文件夹分类。文件夹在下方右键ASSETS,create选择folder;

6地形制作是游戏中最重要的元素之一,一个精美的地图场景会给游戏带来亮点。点击hierarchy下方的create创建 Terrain,右方有各种制作地形的工具。U3D新版本没有自带素材包,需要到U3D的商店下载或者上网找;

inputgetkey(keycodez)
是接受“z”按下的消息(不管是按住还是d起)
应该使用inputgetkeyup(keycodez)
或者
inputgetkeydown(keycodez)

在现在每一个软件应用中,用户界面(UI)都是核心的特征。游戏也没有抛弃这一规则。有非常多的游戏都使用UI来显示一些信息,比如生命值,技能,地图,武器的d药,等等。Unity3D提供了许多UI组件,你都可以在你的游戏中使用它们。在这篇文章中,我会指导你在unity的菜单中如何创建一个简单的暂停菜单。这个暂停菜单将显示一个内容为『Paused』的text组件和三个按钮组件:分别是复位按钮『Resume』,重新开始按钮『Restart』,退出按钮『Quit』,并且还是显示游戏从场景加载到现在的时间。在这篇文章的最后,你应该创建出了类似下面的界面:

在unity如何创建一个简单的暂停菜单

让我们开始吧,打开unity并且创建一个空的工程,选择2D或者3D都可以。一旦项目创建了之后,保存你当前的场景并且给它命名一个你想要的名字。我命名我的场景为『Test』。现在让我们来做用户界面『UI』吧。

在层级视图『Hierarchy』右键然后选择UI->Canvas。

在unity中对于所有的UI组件都需要Canvas。本质上,canvas是你放置UI组件的容器。任意你创建的UI组件都必须是canvas的子对象。当你创建Canvas的时候,你会注意到在层级视图中也创建了一个名为『EventSystem』的对象。这个对象用来确定诸如鼠标输入的事件,这对UI组件来说也至关重要,比如按钮。

恰当地设置你的Canvas的小提示:

在层级视图中选择Canvas。

在检视视图中,找到『RenderMode』然后选择『ScreenSpace_Camera』。

从层级视图中拖拽主摄像机到检视视图中Canvas的『RenderMode』上。

关于Canvas的渲染模式『rendermodes』更详细的介绍请看这里。在本文中,我们将仅仅使用『ScreenSpace_Camera』来做一些简单的事情。这就确保我们的UI会一直显示在摄像机视图上。

现在我们想要在canvas上添加一个面板『Panel』。面板是UI组件中的一个基本组件。我之所以喜欢面板是因为你可以很容易地通过脚本打开或关闭而不影响一整个Canvas。这就允许你创建更多基于游戏状态动态改变的UI组件了。例如,你有一个多玩家的游戏,可以让一个玩家加入另一个玩家的工会,你想要一个菜单显示其他成员在工会里的名字以及他们的血量『HP』到用户界面上。但是,你还是想把所有普通的UI组件(地图,技能,血量,法力)显示在玩家的屏幕上。你可以使用一个面板组件,然后把玩家的名字和血量放到他们自己的菜单上,并且你可以基于玩家是否在工会中来切换菜单打开或是关闭。希望可以帮助到你,想要找unity插件可以到纳金论坛去找。

效果图,素材是网上随便拉的

这是运行后的Hierarchy的界面,其中最下面的Item是放在摄像机不能拍到的位置,当做预设体,每个Item都有Toggle组件,在Grid上有Toggle Group 组件,并且将Itme上的Toggle组件中Group设置为Grid,这实现了点了一个之后,其他不会高亮。Grid上有组件 Grid Layout Group,该组件实现了当创建Item,并且将父物体设置为Grid后能够自动排版
这里我们需要写三个类,一个是自己捏造的数据类,放在Item上获取各种UI的类,还有能够创建Item并且能够对Item进行管理的类

public class ItemData//这个类存放的是数据
{

public int _starNum;//星星的数量(本来是想找星星的,现在就随便将就一下)

public string _icon;//这是名字

public string _itemName;//关卡的名字

public string _itemNum;//第几关

}

item上的类,用来获取item上的UI控件

public class Item : MonoBehaviour

{    

public Image _star1;    

public Image _star2;    

public Image _star3;    

public Image _icon;    

public Text _levelNum;    

public Text _levelName;    

void initializeItem()    

{        

_star1 = transformFind("StarGroup/star1")GetComponent<Image>();       

 _star2 = transformFind("StarGroup/star2")GetComponent<Image>();        

_star3 = transformFind("StarGroup/star3")GetComponent<Image>();

 _icon = transformFind("Icon")GetComponent<Image>();        

_levelName = transformFind("Levelname/name")GetComponent<Text>();        

_levelNum = transformFind("Levelname/Lv")GetComponent<Text>();

}

void Awake()

{

initializeItem();

}

}
这是个管理Item创建的类

public class MainMgr : MonoBehaviour 

{    

GameObject item;    

Transform Parent;    //这里需要得到Gird的Transform

List<ItemData> dataGroup = new List<ItemData>();   

void Awake()    

{        

CreateData();        

item = transformFind("Item")gameObject;        //获得一开始放在摄像机外的游戏对象,当做预设体

Parent = transformFind("Grid");    //保存Gird的Transform

}    

void CreateData()    //创建自己捏造的数据

{       

 dataGroupClear();//确保这个List没有其他数据        

ItemData itemdata = new ItemData();        

itemdata_icon = "1 (5)";       

itemdata_itemName = "小树林";        

itemdata_itemNum = "第一关";        

itemdata_starNum = 3;        

dataGroupAdd(itemdata);        

ItemData itemdata1 = new ItemData();        

itemdata1_icon = "1 (7)";        

itemdata1_itemName = "沼泽";       

 itemdata1_itemNum = "第二关";        

itemdata1_starNum = 1;        

dataGroupAdd(itemdata1);        

ItemData itemdata2 = new ItemData();        

itemdata2_icon = "1 (15)";        

itemdata2_itemName = "山海关";        

itemdata2_itemNum = "第三关";       

itemdata2_starNum = 1;        

dataGroupAdd(itemdata2);        

ItemData itemdata3 = new ItemData();        

itemdata3_icon = "1 (12)";        

itemdata3_itemName = "墓地";        

itemdata3_itemNum = "第四关";        

itemdata3_starNum = 2;        

dataGroupAdd(itemdata3);       

 ItemData itemdata4 = new ItemData();        

itemdata4_icon = "1 (32)";        

itemdata4_itemName = "神殿";       

 itemdata4_itemNum = "第五关";       

 itemdata4_starNum = 3;        

dataGroupAdd(itemdata4);        

ItemData itemdata5 = new ItemData();        

itemdata5_icon = "1 (25)";        

itemdata5_itemName = "天庭";        

itemdata5_itemNum = "第六关";        

itemdata5_starNum = 2;        

dataGroupAdd(itemdata5);        

ItemData itemdata6 = new ItemData();        

itemdata6_icon = "1 (30)";        

itemdata6_itemName = "心魔";        

itemdata6_itemNum = "第七关";        

itemdata6_starNum = 3;        

dataGroupAdd(itemdata6);   

 }    

GameObject tempItem; //创建临时的游戏对象   

void CreateTempItem()    //创建Item

{        

if (dataGroup != null)       //当这个List不为空时

{            

for (int i = 0; i < dataGroupCount; i++)            //循环创建Item

{                

tempItem = Instantiate(item) as GameObject;          //创建Item并且获取到这个游戏对象     

 tempItemtransformlocalPosition = Vector3zero;                //将其位置,缩放大小,旋转角度初始化

tempItemtransformlocalRotation = new Quaternion();                

tempItemtransformlocalScale = Vector3one;                

tempItemtransformSetParent(Parent);                //设置其父物体为Grid

Item itemSprite = tempItemAddComponent();  //为每一个创建的Item添加脚本

itemSprite_levelNametext = dataGroup[i]_itemName;//获取每一个关卡的名字获取,一下类似

itemSprite_levelNumtext = dataGroup[i]_itemNum;

string path = stringFormat("Icon/{0}", dataGroup[i]_icon);//字符串拼接

itemSprite_iconsprite = ResourcesLoad(path, typeof(Sprite)) as Sprite;

ShowStar(dataGroup[i]_starNum, itemSprite);//调用这个方法获得星星的显示

}

}

}

void ShowStar(int num,Item tempitem)//这个方法是用来显示星星

{

if (num == 1)

{

tempitem_star1gameObjectSetActive(true);

tempitem_star2gameObjectSetActive(false);

tempitem_star3gameObjectSetActive(false);

}

if (num == 2)

{

tempitem_star1gameObjectSetActive(true);

tempitem_star2gameObjectSetActive(true);

tempitem_star3gameObjectSetActive(false);

}

if (num == 3)

{

tempitem_star1gameObjectSetActive(true);

tempitem_star2gameObjectSetActive(true);

tempitem_star3gameObjectSetActive(true);

}

}
void Start () {

CreateTempItem();

}

}

以上就是简单的游戏关卡的选择界面的实现,如果有错误,或者更好的方法,望指正,万分感谢!

在界面?是指什么界面,game视图吗?
如果在编辑器的话,停止播放的快捷键都是Ctrl Alt P Step(windows平台,且unity默认快捷键)。
其他的两个播放相关的
Ctrl P Play 播放
Ctrl Shift P Pause 暂停
Ctrl Alt P Step 停止


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13372809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存