Unity3D游戏开发之画中画小地图
- 格式:docx
- 大小:1.83 MB
- 文档页数:10
在我们开发游戏或者虚拟现实中,一般都会用到小地图,如果要我们去写小地图,应该会花费一点时间的吧,如何加快我们的开发速度呢,其实在unity 3d中就有一个“小”插件,是专门用开开发小地图用的,这个插件就是KGFMapSystem。
(KGF里面不只是有一个这样的插件,它里面有很多插件,有兴趣的朋友可以研究一番)。
首先我们倒入这个插件包,打开kolmich/KGFMapSystem/demo/scenes/quickstart_demo . 我们就能看见这个了这篇文章来自狗刨学习网你看,我们现在能看见一个红色的标志的警号提示了,意思就是叫我们新建一个层(layer),取名为mapsystem(必须得是这个名字才能有用).选中我们摄像头,去掉我们刚才建的mapsystem这个layer.如图:现在我们来运行一下,你看在右上角就能看见我们梦寐以求的小地图了是不是??从以上步骤来看,用这个插件是不是很容易的就开发了自己的小地图呢?.有的人就会说,这个是它这个场景自带好吧,如果我们在实际的项目中来发呢。
现在我来教大家如何在自己的项目中开发自己的小地图。
我们打开quickstart_try_yourself这个场景,运行后发现是不是什么都没有呢,这个就像我们自己原始的项目。
我们找到kolmich/KGFMapSystem/prefabs里面中的KGFMapSystem这个预设,直接拖进我们的工程,如图:我们看看右下角的那个提示(我用蓝色线圈圈住的的)。
我相信大家都能读懂他是什么意思吧。
我们找到我们的人物,再直接附上给Its Target.如图:我们再在kolmich/KGFMapSystem/prefabs/mapicons_samples中找到KGFMapIcon_player 这个预设,拖进我们人物中。
(让它成为我们的子物体,其实这个就相当于在地图中表示自己的那个标记)可别忘记了我们在刚开始建一个layer的那些步骤哦,运行如图:我们看见自己的小地图了吧,中间的那个黄色箭头就是我们自己。
继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向。
更多精彩关注【狗刨学习网】效果图右上角就是小地图,上面有个红色小箭头就是代表主角人物所在场景中的位置,箭头的方向就代表人物所面向的方向。
实现步骤1.俯视图的制作首先,我们将Scene场景调成俯视的角度然后在创建一个Plane,然后点击该对象,在Inspector属性窗口将MeshRenderer取消,并且在场景中会发现有绿色的网格,然后记录网格所在的位置,并且取消MeshCollider,用截图工具截取这网格所在的位置,截出一张一模一样大小的图片,这就是我们小地图的来源。
截取好了之后记得将MeshCollider 勾选上,后面会在代码中需要计算人物所在的位置,也就正是通过这网格文件来计算的。
2.代码的编写1.<font face="新宋体" size="2">using UnityEngine;ing System.Collections;3.4.public class map : MonoBehaviour {5.6. public Texture map1;//小地形图7. public Texture jueseTexture;//标识角色的图片8. float juesePosX = 0;9. float juesePosY = 0;10. public GameObject player;//角色11. public GameObject plane;//地形12. float planeWidth;//地形的宽13. float planeHeight;//地形的高14.15. float angle = 0; //人物旋转的角度16.17. void Start()18. {19. //获取地形的宽高20. planeWidth = plane.GetComponent().mesh.bounds.size.x *plane.transform.localScale.x;21. planeHeight = plane.GetComponent().mesh.bounds.size.z *plane.transform.localScale.z;22. print("width+heith:"+planeWidth + ", " + planeHeight);23. print("bounds:" + plane.GetComponent().mesh.bounds);24. }25. void OnGUI()26. {27. GUI.DrawTexture(new Rect(Screen.width-map1.width, 0, map1.width,map1.height), map1);28.29. GUIUtility.RotateAroundPivot(angle, new Vector2((Screen.width -map1.width)+juesePosX + 5, juesePosY + 5));30.31. GUI.DrawTexture(new Rect((Screen.width - map1.width)+juesePosX,juesePosY, 10, 10), jueseTexture);32. }33.34.35. void Update()36. {37. print("people:" + player.transform.position.x + "," +player.transform.position.y);38. print(1);39. //根据palyer在plane的比例关系,映射到对应地图位置。
相关快捷键:Shif+Q,Shift+Y选择活动的地形工具逗号(,)和点号(.) 循环选择笔刷。
Shift+逗号(<),Shift+点(>)循环选择活动的树/纹理/细节对象。
不怎么好按。
按住Shift+笔刷的情况下可以擦除绘制在地形上的信息。
1地形创建如图方式创建地图。
前面3个分别控制地形的长宽高Terrain Width : 地形的宽度;Terrain Length : 地形的长度;Terrain Height : 地形的最大高度;HeightMap Resolution :高度图分辨率;(高度图可以用ps直接绘制,导入之后会形成3d 地形)Detail Resolution :控制草地和细节模型的地图分辨率,考虑性能这个值越低越好;Control Texture Resolution: 用于绘制到地形上混合不同纹理的溅斑贴图的分辨率;Base Texture Resolution:距离远了之后会用一张新的混合贴图代替溅斑贴图,这里代表这张替代贴图的分辨率。
3. Base Terrain 基本地形Pixel Error 像素容差:在显示地形网格时允许的错误数量。
这个其实是一个LOD配置。
当距离拉远之后,地形的复杂度会降低。
这个值控制复杂度变化远近的;Base Map Dist. 基本地图距离:需要显示高分辨率地图贴图的最大距离;Cast Shadows:控制是否投影;Material: 允许分配自定义的材质,这个材质呢必须是一个可以渲染地形的着色器。
比如说:Nature/Terrain/Diffuse (this shader is used if no material is assigned) or Nature/Terrain/Bumped Specular。
(这里在地形基本贴图没有设置的情况下将会使用这里的材质)Draw :是否绘制地形上的树木和草等细节;Detail Distance :细节的显示距离(当镜头距离细节物体多少米时开始显示细节物体);DetailDensity :细节的密度;一般定0.5;TreeDistance :树木显示距离(当镜头距离树木多少米时开始显示树木);BillBoardStart :树木开始使用广告牌的距离。
Unity3D游戏制作操作方法及界面详解Unity3D是一款功能强大且广泛使用的游戏开发引擎,为开发者提供了丰富的操作方法和良好的界面设计。
本文将详细介绍Unity3D游戏制作的操作方法以及界面布局,帮助初学者快速上手和了解该引擎的使用。
一、项目创建与导航在打开Unity3D软件后,首先需要创建一个新项目。
点击菜单栏上的"File",然后选择"New Project"。
在弹出的窗口中,填写项目名称、存储位置等信息,点击"Create"按钮即可创建新项目。
创建完成后,Unity3D的界面会出现在你的面前。
界面主要由场景窗口、项目窗口、检视窗口和层次窗口组成。
场景窗口用于显示游戏的实时场景,项目窗口用于显示项目目录和资源文件,检视窗口显示当前选中对象的属性,层次窗口用于显示游戏对象的层次结构。
二、操作方法1. 场景操作:在场景窗口中,可以通过鼠标和键盘进行多种场景操作。
如使用鼠标右键进行视角旋转和移动,使用鼠标滚轮进行缩放,按住鼠标右键加上W、S、A、D键进行场景平移等。
通过这些操作,可以快速浏览和定位到不同的场景位置。
2. 对象创建与编辑:在项目窗口中,可以创建游戏所需的对象和资源。
右键点击项目窗口中的某个文件夹,选择"Create",然后选择相应的对象或资源进行创建。
创建完成后,可以在场景窗口中对创建的对象进行编辑,如移动、旋转、缩放等操作。
3. 组件添加与调整:在检视窗口中,可以为选中的游戏对象添加组件并调整其属性。
例如,选中一个物体,然后在检视窗口中点击"Add Component"按钮,就可以添加脚本、材质等组件。
同时,检视窗口还可以对组件的各种属性进行调整,以实现特定的功能需求。
4. 脚本编写与调试:Unity3D支持C#脚本编写,用于实现游戏逻辑和功能。
在项目窗口中的某个文件夹中创建脚本文件,并在检视窗口中选择需要添加脚本的游戏对象。
扫雷小游戏(C开发环境使用Unity引擎开发)扫雷(Minesweeper)是一款经典的单人益智游戏,旨在通过揭开区域中的方块,避免踩中地雷并推断出地雷的位置。
本文将介绍扫雷小游戏的开发过程,使用C开发环境和Unity引擎进行实现。
第一步:项目准备在开始开发之前,需要准备好所需的开发工具和资源。
首先,下载并安装C开发环境和Unity引擎。
确保你已经熟悉这些工具的基本使用方法,并熟悉C语言编程。
第二步:项目设置在Unity中创建一个新项目,并设置好项目的名称和保存路径。
接下来,创建一个新的场景,并将场景设置为游戏的主场景。
同时,将摄像机设置为适当的视角来显示游戏界面。
第三步:创建地图扫雷游戏的核心是一个方块地图,其中包含一些地雷和数字。
在Unity中,可以创建一个正方形的网格来代表地图。
可以使用脚本来随机放置地雷,并计算每个方块周围的地雷数量。
第四步:游戏逻辑编写C语言脚本来实现游戏的逻辑。
首先,需要处理玩家点击方块的事件。
如果玩家点击到地雷方块,游戏失败,显示失败界面。
否则,根据点击到的方块周围的地雷数量显示对应的数字。
若玩家点击到数字为0的方块,则自动揭开周围的方块。
当所有非地雷方块都被揭开时,游戏成功,显示成功界面。
第五步:用户界面设计并创建游戏的用户界面。
包括游戏开始界面、失败界面、成功界面以及游戏进行中的界面。
在界面上显示剩余地雷数量和游戏计时器。
第六步:音效和动画通过添加音效和动画来增强游戏的交互性和趣味性。
例如,当玩家点击到地雷时,播放爆炸声音和特效动画。
第七步:游戏测试和调试在完成游戏开发后,进行测试和调试,确保游戏的各项功能都能正常运行。
根据测试结果修复代码中的bug和错误,以确保游戏的稳定性和流畅性。
第八步:发布游戏当游戏开发和测试都完成后,可以将游戏发布到目标平台上,供玩家下载和游玩。
在发布过程中,确保提供适当的游戏介绍和说明,以便玩家了解游戏规则和操作方法。
通过以上步骤,可以使用C开发环境和Unity引擎成功开发一个扫雷小游戏。
创建一个3D地形在上一章中介绍了简单的游戏平面,当然unity3D中提供了非常强大的地形编辑器,凹凸,贴图,碰撞,功能它都可以做,给力吧。
快快构建我们的3D游戏地形~哇咔咔~~~点击Terrain –> Create Terrain 创建一个游戏地形,我们命名为MyTerrain。
调整一下摄像头的角度,正对着我们创建的游戏地形,补充一下unity3d场景编辑器的移动的控制。
模型的旋转:Option + 鼠标左建模型的平移:Option + 鼠标中键模型的缩放:Option + 鼠标右键在下图中可以清晰的看见创建的游戏地形,与摄像头映射的方向与显示的内容。
出自狗刨学习网地形一旦创建完毕后,Unity3D会默认地形的大小,宽度,厚度,图像分辨率,纹理分辨率,等等,这些任意修改的。
点击Terrain –> set Resolution打开设置地形参数菜单,如下图所示。
如上图所示从上到下分别代表的含义是Terrain Width: 地形的宽度Terrain Height: 地形的高度Terrain Length:地形的长度HeightMap Resolution:地形高度图的分辨率.Detail Resolution:细节分辨率,控制草和细节网格地图的分辨率。
数值越高标示效果越好,想对也越消耗可能会卡。
根据情况适当的调节。
Control Texture Resolution:控制不同纹理的分辨率。
Base Texture Resolution:控制相对纹理分辨率,这里指一定范围内的。
设置完毕点击set Resolution按钮,有兴趣的朋友可以动态的修改一下参数,看看你的地形发生了什么这样子我们的地形表面就创建完毕,下面给地形上添加一些五彩缤纷的元素吧。
五彩缤纷的元素Hierarchy中点击T errain,Unity编辑器右侧栏中出现地形编辑窗口。
下图中红框内是比较重要的一些信下分别为。
1 .Position Rotation Scale地形的位置旋转缩放,任何模型物体点击后右侧都会出现这个窗口,标志着3D空间中的位置,修改参数模型也会跟着在三维空间中改变。
学游戏就上我学院Unity NGUI制作小地图的方法原本只是想用unity自带的GUI功能实现魔兽世界的小地图效果。
原来的思路如下:1. 根据玩家坐标,计算出应显示的地图缩略图部分(128×128);2. 用GUI遮罩将非白色的部分剔除(这样可以实现任意形状的小地图);3. 将地图框叠加到第二步中的纹理上;4. 将玩家指示物放置在地图中心,并根据当前玩家的Transform.Rotation计算出指示物的旋转角度;在做到一半的时候发现GUI Texture只能使用Texture,无法使用Material,这也就意味着不能使用Shader做遮罩的剔除效果。
在网上搜索了好久,发现有好多老外也在问相关的问题,但是就是没有很合适的解决方案。
经过再三考虑之后,咬咬牙决定舍弃系统自带的GUI功能,使用第三方GUI插件。
其实之前也有了解过相关的插件,比如NGUI、EZGUI和IGUI之类的,只不过感觉如果太依赖第三方插件则会导致“知其然而不知其所以然”,所以也一直没去学习使用。
工欲善其事必先利其器,既然已经决定要使用第三方插件了,那么选择一个趁手的当然是首要问题。
通过比较最终选择了NGUI,NGUI的全称是Next –Gen UI(次世代界面),它提供了快速创建常用的2D控件的功能,如按钮、文本框、滚动条等,继承Unity所见即所得的优良传统,并实现了Draw Call的合并,以优化性能。
目前最新版本NGUI是2.6.3,传送门在此。
下载解压之后会得到一个NGUI203d.unitypackage 的文件,双击就可以像导入自带资源包一样把NGUI导入到当前项目中。
如果文件关联失效了,也可以通过主菜单的”Assets→Import Package→Custom Package…“手动导入。
最终在Unity的工程面板中就可以得到一个NGUI目录,里边包括了所有的资源,还有一些范例场景(在Examples/Scenes下面)。
Unity制作⼩地图和⽅向导航⼀、unity⽅向导航制作设计要求是⽅向导航随着⿏标旋转转换⽅向,效果图如下:具体的实现⽅法主要有两个步骤,分别为UI设计和脚本编写。
我的设计思路是这个控件分为两层,第⼀层为东西南北指⽰层,第⼆层为图标指⽰层,这⾥我的图标采⽤圆形图标,⽅向指⽰这⾥采⽤控制图标旋转的⽅式实现,层级关系如下:⾸先创建⽗节点1,然后在⽗节点下创建⼦节点2,3;最后调整好位置。
第⼆步脚本编写,脚本如下:using UnityEngine;using System.Collections;using UnityEngine.UI;public class shijiao : MonoBehaviour{public GameObject Gcanvas;public GameObject UIzhinanpicture;public GameObject Terren;public GameObject SMAP;//public GameObject bnt=GameObject.Find("Button");//⽅向灵敏度public float sensitivityX = 10F;public float sensitivityY = 10F;//上下最⼤视⾓(Y视⾓)public float minimumY = -60F;public float maximumY = 60F;float rotationY = 0F;static public bool ifcanvas;void Update(){if(Input.GetMouseButton (0)){//按住⿏标左键才能调节⾓度,根据⿏标移动的快慢(增量), 获得相机左右旋转的⾓度(处理X)float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;//根据⿏标移动的快慢(增量), 获得相机上下旋转的⾓度(处理Y)rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;//⾓度限制. rotationY⼩于min,返回min. ⼤于max,返回max. 否则返回valuerotationY = Mathf.Clamp (rotationY, minimumY, maximumY);//总体设置⼀下相机⾓度transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);UIzhinanpicture.transform.localEulerAngles = new Vector3(0,0,- rotationX);}}}⼆、unity⼩地图的制作关于⼩地图的制作,⽹上各种帖⼦铺天盖地,然⽽仔细看却发现⼤部分都⼀样,互相抄袭,很多都是没⽤的。
Unity3D地图编辑器
1、地图编辑器:⽤途
1 提供美术加载对应场景后,进⾏特效、建筑、动画等对象的摆放设计。
2 提供策划进⾏对应场景的区域编辑、NPC和怪物、传送点等编辑。
1、地图编辑器主要是可以给美术做⼀些场景效果还有地形地图,然后给策划去配置地图,⽐较地形的怪物、NPC摆放,特效摆放,最后导出游戏需要⽤的数据⽂件。
1、区域编辑:可以刷整个地图的区域,分为障碍区,安全区,跳点,⽔域,动态区,游泳区
实现原理:1、根据3D地形⼤⼩,创建⼀张像素⼀样⼤⼩的贴图Texture2D,然后⼀个像素相当于是⼀个格⼦,每个格⼦都有⼀个坐标,这个逻辑坐标后⾯是⽤来寻路的。
贴图的操作是通过SetPixel和 GetPixels32来获取和设置贴图每个格⼦的像素值,然后通过修改这张贴图的值,可以达到刷不同的区域和下⼀次读取这张图⽚来打开上次操作后的状态。
2、贴图的信息通过MeshRenderer的material.mainTexture设置,来显⽰到屏幕,然后贴图的图⽚改变时,材质球就会改变,显⽰在屏幕的信息也会对应改变。
3、当贴图和地形已经⼀个格⼦对应⼀个像素时,要再对应的画对应的⽹格线出来。
在Unity⾥画线有三种⽅法,Gizmos.DrawLine、LineRenderer和Debug.DrawLine都会⽐较卡顿,这⼏个是在Update⾥⾯⼀直刷新的,因为地图像素是有1万个格⼦,画那么多的线就会导致很卡。
最后采⽤了OpenGL来画线。
GL.PushMatrix();
重点:1、unity单位是1:100,所以显⽰是要进⾏换算。
2、相机要改成正交模式,这样就可以从上⽅平⾯看下去,直接把贴图按1⽐1的效果对应地形显⽰。
unity3d绘画⼿册-------地形各个参数解释关于Unity3D是什么。
我就不多做解释了。
由于⼯作原因,该系列原创教程不定期更新。
每⽉必然有更新。
谢谢各位。
Unity地形::新建地形:<ignore_js_op>如图在菜单中新建⼀个地形。
就会在<ignore_js_op>中看到Terrain对象。
如果要修改地形参数,可以在Terrain菜单下的SetResolution中设置。
<ignore_js_op>6597408416238626275.jpg如上图所⽰。
地形的参数设置:TerrainWidth:全局地形总宽度。
其单位为Unity统⼀单位-⽶。
TerrainHeight:全局地形允许的最⼤⾼度,单位为Unity统⼀单位。
TerrainLength:全局地形总长度,单位为Unity统⼀单位。
Heightmap Resolution:全局地形⽣成的⾼度图的分辨率。
Detail Resolution:全局地形所⽣成的细节贴图的分辨率,所以数字越⼩性能越好。
但是质量也要考虑。
ControlTestureResoulution:全局把地形贴图绘制到地形上时所使⽤的贴图分辨率。
BaseTextureResoution:全局⽤于远处地形贴图的分辨率。
unity定制地形:如果有美术⼈员制作好的⾼度图。
那么可以直接导⼊,但是unity仅⽀持.RAW格式。
图像⼤⼩要求是2的幂。
导⼊⽅法:Terrain-〉Import Heightmap-Raw。
选中需要的资源后。
会弹出如下属性设置框:<ignore_js_op>6597408416238626276.jpgDepth:由⽂件格式来设置,8位或者16位。
Width:⾼度图的宽度,根据图像本⾝⼤⼩获得。
Height:⾼度图的⾼。
ByteOrder:根据⽂件格式来设置。
Mac或者Wndows。
使⽤这个⽂件编码时所⽤的顺序。
Unity3d中使用摄像机制作实时显示小地图,以之前的tank为例。
开始制作之前场景中物体如图。
开始制作,步骤1:新建一个camera及一个plane。
对齐位置,将camera改名为camera_UI。
旋转plane,使之在camera_UI中显示为竖直状态。
效果如下图:其中,camera_UI及plane设置如图。
position位置,在tank前方并在视野范围内能看到即可。
步骤2:为场景中物体添加Layer,以保证后面步骤中的camera正确显示。
分别为terrain及UI。
分别选中terrain及UI,调整inspector窗口的Layer,设置terrain的Layer为terrain,plane的Layer为UI。
此时场景中有两个camera,game窗口中的显示会出现混乱。
那么此时需要调整camera的Culling Mask。
步骤3:调整camera的Culling Mask。
将tank下面的camera的Culling Mask属性更改,此时为选中everything状态,点击UI选项,使其不选中UI。
设置camera_UI的Culling Mask只选中UI,同时,将camera_UI的Clear Flags改为Don‘t Clear。
文章出处【狗刨学习网】此时,即可正确显示出地形、坦克及plane。
plane将用作实时显示地图。
步骤4:再新建一个camera,改名为camera_map,此camera将用作显示地图的camera。
选中camera_map,在inspector中找到Target Texture,此时为空。
在project界面新建一个Render Texture,出现一个New Render Texture。
将New Render Texture赋给camera_map的Target Texture,此时camera_map所照摄到的范围即New Render Texture的显示。
如何使用Unity编辑器制作场景地形第一章:Unity编辑器介绍Unity编辑器是一款功能强大的场景编辑器,用于创建和修改游戏场景中的地形。
它提供了丰富的工具和功能,以帮助开发者更轻松地创建逼真和多样化的地形。
第二章:Unity编辑器的基本操作2.1 场景视图和层级视图Unity编辑器的主要界面由场景视图和层级视图组成。
场景视图显示当前编辑的场景,而层级视图显示场景中的层次结构。
可以通过单击层级视图中的游戏对象,在场景视图中选择和编辑地形。
2.2 工具栏Unity编辑器的工具栏提供了各种工具和命令,用于创建和编辑地形。
其中包括移动、旋转和缩放等基本操作工具,还有绘制笔刷、平滑和导航等特定地形编辑工具。
2.3 场景视图和编辑模式在Unity编辑器中,场景视图可以处于多种编辑模式之一,例如地形编辑、物体放置、光照烘焙等。
在地形编辑模式下,可以使用不同的工具和命令来绘制、编辑和修改地形。
第三章:创建地形3.1 创建新的地形可以通过在菜单栏选择GameObject->3D Object->Terrain来创建新的地形。
在弹出的对话框中可以设置地形的尺寸和高度范围等参数。
3.2 导入地形高图可以将外部高度图导入到Unity中,以创建精确的地形。
只需在Inspector面板中选择Heightmap,然后点击Import Raw,选择高度图文件并设置相关参数即可。
3.3 预设地形Unity编辑器还提供了一些预设地形,可以快速创建各种自然和人工地貌。
可以通过菜单栏选择GameObject->3D Object->Terrain Tools->Create New Splatmap Terrain来访问这些预设。
第四章:编辑地形4.1 调整地形的尺寸和高度在地形编辑模式下,可以通过选择Terrain->Settings来调整地形的尺寸和高度范围。
在场景视图中,可以使用工具栏中的调整工具来修改地形的高度、平滑度和细节等。
上一次用Unity摄像机方式实现了地图的制作,现在介绍另一种实现地图的方式: 自己通过代码实现小地图NCP图标的显示和隐藏制作地图的步骤:1. 根据游戏人物的3D坐标转换成2D平【狗刨学习网】面坐标,根据距离显示和隐藏游戏的坐标2. 怪物实时判断与玩家的距离,小于到移动范围,就在小地图上创建Icon的显示注意事项:1. 人物移动前进和后退是(x,z)轴, 我们从游戏界面看到的图标是(x,y)轴代码:小地图类:using UnityEngine;using System.Collections;///<summary>///小地图///</summary>public class MinMap : MonoBehaviour {public static MinMap _instance;public GameObject iconPrefab; //小图标预设,根据不同的名字显示不同的图标void Awake(){_instance = this;}///<summary>///在小地图添加图标///</summary>///<param name="iconName"></param>///<returns></returns>public GameObject AddIcon(string iconName){GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);go.GetComponent<UISprite>().spriteName = iconName;return go;}}Icon类: (在小地图上添加图标,交给怪物和NCP自身)using UnityEngine;using System.Collections;public class MinMapItems : MonoBehaviour {public string iconName;private GameObject minimapIconGO;private Transform minmapTrans;private Transform playerTrans;public float magnitudeX = 8;public float magnitudeZ = 7.5f;void Start(){minimapIconGO = MinMap._instance.AddIcon(iconName);//将怪物图标初始化到小地图显示minmapTrans = minimapIconGO.transform;//怪物的小图标playerTrans = GameObject.FindGameObjectWithTag("Player").transform;//获取主角transfrom}void FixedUpdate(){Vector3 offset = transform.position - playerTrans.position;minmapTrans.localPosition = new Vector3(offset.x,offset.z,0) * 8;//localPosition和position的区别//怪物超过一定范围,显示和隐藏地图图标if(Mathf.Abs(offset.x) >= magnitudeX || Mathf.Abs(offset.z) >= magni tudeZ){minimapIconGO.SetActive(false);}else{minimapIconGO.SetActive(true);}//Debug.Log(offset.z);}void OnDestroy(){Destroy(this.minimapIconGO);}}源。
unity3d小游戏制作教程Unity3D是一款非常流行的游戏开发引擎,拥有强大的功能和易于使用的界面,使开发者能够轻松地制作出各种类型的游戏。
本文将介绍如何使用Unity3D来制作一个简单的小游戏。
首先,打开Unity3D并创建一个新的项目。
在项目中,你会看到一个场景视图,在这里你可以设计你的游戏场景。
你还可以看到一个层次视图,用于管理游戏场景中的对象。
接下来,我们需要创建一些游戏对象。
游戏对象是游戏中的实体,可以是角色、道具、场景、特效等。
你可以通过在层次视图中右键单击并选择“创建”来创建一个新的游戏对象。
例如,你可以创建一个球体,它将成为游戏中的主角。
然后,我们需要添加一些组件来控制游戏对象的行为。
组件是附加在游戏对象上的脚本,可以控制对象的移动、碰撞、触发事件等。
你可以通过在层次视图中选择游戏对象,然后在检查器视图中单击“添加组件”按钮来添加组件。
例如,你可以添加一个Rigidbody组件,使球体能够受到物理引擎的影响并且具备重力。
接下来,我们可以为游戏场景添加一些元素,使它变得更具吸引力。
你可以从Unity3D的资源商店中下载一些免费的资源,例如树木、建筑、草地等,然后把它们拖放到场景视图中。
你还可以调整它们的大小、方向和位置,以使它们更适应你的游戏场景。
接着,我们可以添加一些脚本来控制游戏逻辑。
脚本是用来控制游戏对象和场景之间的交互的代码。
你可以在Unity3D中使用C#编写脚本,然后将它们附加到游戏对象上。
例如,你可以编写一个控制球体移动的脚本,使玩家能够通过键盘或鼠标控制球体的移动。
最后,我们可以构建和运行游戏,以查看我们的努力是否有了结果。
在Unity3D中,你可以单击“文件”菜单中的“构建和运行”选项来构建和运行你的游戏。
构建完成后,你将可以在游戏视图中看到你的游戏的实际表现。
你还可以调整游戏的设置,例如窗口大小、分辨率等。
通过以上步骤,你可以制作出一个简单的小游戏。
当然,Unity3D还有很多其他功能和工具,可以让你制作更复杂、更有趣的游戏。
原创文章如需转载请注明:转载自风宇冲Unity3D教程学院Shader第四讲:制作一个美丽的地球Vertex and Fragment Shader例子二,制作一个自动旋转的3D地球。
下载美丽的地球工程原理是2张贴图,一张地球图,一张云层分布图(1)通过uv.x即纹理坐标的横轴与时间相乘,产生球在移动的效果(2)通过地球和云的颜色值叠加形成层叠的效果。
注意:贴图的'Wrap Mode'属性一定要设置成Repeat关于Wrap Mode当Wrap Mode为Clamp:意思是纹理xy轴的值即uv都被限制在[0,1]的范围内,以横轴u为例如下图,左右两侧不相连。
当Wrap Mode为Repeat:大意是你可以这么想象,一张地球图是一块瓷砖,当Wrap Mode 为Repeat后,整个纹理铺满了N行x N列的瓷砖,这个N可以理解为无限大。
以u为例,如下图。
好处是本来在clamp模式中,贴图的两侧即u为0和u为1的地方是连不上的。
现在图的左右两侧连上了。
纵向v也是一样。
这个技术主要运用是当纹理为砖式纹理(Tiled Texture),即左右和上下的纹路都是相接的时候,很小的一块纹理贴图能渲染出一大片区域。
例如一大片草地等等。
附:Shader代码1.Shader "Custom/2lsy_earth" {2.Properties {3. _MainTex ("Texture", 2D) = "white" { }4. _Cloud ("_Cloud", 2D) = "white" { }5.}6.SubShader {7.Tags{"Queue" = "Transparent" "RenderType"="Transparent"}8. Pass {9.CGPROGRAM10.#pragma vertex vert11.#pragma fragment frag12.#include "UnityCG.cginc"13.float4 _Color;14.sampler2D _MainTex;15.sampler2D _Cloud;16.struct v2f {17. float4 pos : SV_POSITION;18. float2 uv : TEXCOORD0;19.} ;20.float4 _MainTex_ST;21.v2f vert (appdata_base v)22.{23. //和之前一样24. v2f o;25. o.pos = mul (UNITY_MATRIX_MVP, v.vertex);26. o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);27. return o;28.}29.half4 frag (v2f i) : COLOR30.{31. //地球的贴图uv, x即横向在动32.float u_x = i.uv.x + -0.1*_Time;33.float2 uv_earth=float2( u_x , i.uv.y);34. half4 texcolor_earth = tex2D (_MainTex, uv_earth);35.36. //云层的贴图uv的x也在动,但是动的更快一些37. float2 uv_cloud;38. u_x = i.uv.x + -0.2*_Time;39.uv_cloud=float2( u_x , i.uv.y);40.half4 tex_cloudDepth = tex2D (_Cloud, uv_cloud);41.42.//纯白x 深度值= 该点的云颜色43.half4 texcolor_cloud = float4(1,1,1,0) * (tex_cloudDepth.x);44.45.//地球云彩颜色混合46. return lerp(texcolor_earth,texcolor_cloud,0.5f);47.}48.ENDCG49.}50.}51.}搞定收工,赶快看看效果吧,是不是很棒呢?。
用Unity引擎制作迷宫逃生小游戏Unity引擎是一款功能强大、广泛应用于游戏开发的工具,它提供了丰富的功能和资源,使得开发者能够轻松创建各种类型的游戏。
本文将介绍如何利用Unity引擎制作一款迷宫逃生小游戏。
一、项目设置在开始开发前,首先需要设置游戏项目的基本信息。
打开Unity引擎,点击"New"来创建一个新的项目。
填写项目名称、存储路径等信息,并选择2D或3D模式,以适应游戏的需求。
二、场景布置在游戏中,迷宫是玩家探索和逃离的重要环节。
在Unity引擎中,可以通过创建和布置一系列的场景元素来搭建迷宫。
可以利用Unity中的基本几何体、贴图、光照等,来构建出具有迷宫特色的场景。
1. 创建迷宫地图:通过在场景中摆放多个立方体,来构建具有迷宫结构的地图。
可以使用Unity提供的图形界面,直接在场景中调整立方体的大小、位置和旋转角度,以创建出合适的迷宫地图。
2. 添加道具和陷阱:为了增加游戏的趣味性和挑战性,可以在迷宫中添加一些道具和陷阱。
例如,可以在某些位置放置宝藏、钥匙或者门,玩家需要找到它们并解谜才能通过。
同时,可以在迷宫的某些区域设置陷阱,如陷阱门、机关等,玩家需小心躲避。
3. 美化场景:为了使游戏更加美观,可以使用贴图、光照和特效等功能对场景进行美化。
可以选择合适的贴图素材对地板、墙壁等进行贴图,利用光照功能来增强游戏的视觉效果,并可以添加一些特效,如烟雾、光线等,以增加游戏的氛围。
三、角色控制在游戏中,玩家需要控制一个角色进行探索和逃跑。
使用Unity引擎,可以通过添加角色控制器组件来实现角色的移动和碰撞检测。
1. 添加角色模型:导入或创建一个合适的角色模型,并将其添加到游戏场景中。
可以使用Unity提供的角色模型库,或者从网络上下载现成的模型资源。
2. 添加角色控制器:在角色模型上添加角色控制器组件。
通过控制器,玩家可以使用键盘或手柄来控制角色的移动,同时还可以检测碰撞和触发事件。
Unity3d基本界面,分别有scene,game,protect,Hierarchy等。
在create里面创建各种几何图形,比如说有立方体,球体,胶囊体,圆柱体,可以通过这些几何体上颜色,首先要创建一个材质球,通过材质球来个几何图形上颜色加纹理,效果如图:
二.首先学的如何创建地形:
如何绘制纹理:导入包Import->Package->Terrain Assets,接着是在创建地形之前首先要抬高地形,抬高地形之后在绘制山地。
再接着为地形增添树和草,必须要导入资源包Tree Creator
再接着创建风力区域:
再然后添加天空盒来渲染天气的样子,首先导入天空盒子资源包,在Project窗口中,鼠标右键选择Import Package->Sky Boxes导入内
置的天空盒子资源包,在菜单Edit->Render Setting,点击来选择天空的样式。
其中你可以选择Fog来设置雾效
设置水:必须引入水资源包,(Water Pro Only)
添加阴影:
画中画:
绘制公路:导入easyroad3D->创建easyRoad3D->操作前三个第一次使用要注册,注册的时候随便写点击按钮就行。
最后讲的如何发布,在File->Buildind Settings,然后在各种平台上发布,生成EXE的格式。
更多资源请关注狗刨学习网。
龙图教育:Unity3D游戏开发之小地图的实现今天我们来讲一下在Unity3D中如何实现小地图。
首先,我们来一起看看最终实现的效果:要实现小地图效果,需要实现对于小地图和角色的绘制,所以这里需要用到OnGUI()方法,我们一起来看代码:代码如下:ing UnityEngine;ing System.Collections;3.public class CameraScript : MonoBehaviour {4. //定义小地图贴图5. public Texture MapTexture;6. //定义角色标志贴图7. public Texture PlayerTexture;8. //定义第三人称角色控制器9. private GameObject m3rdPersonControl;10. public GameObject BulletPos;11. public GameObject Bullet;12. //定义角色位置13. private float mPersonX;14. private float mPersonZ;15.16. //定义缩放比例17. private float mScale;18.19. void Start ()20. {21. //获取角色控制器22. m3rdPersonControl=GameObject.Find("3rd Person Controller");23. //获取角色位置24. mPersonX=m3rdPersonControl.transform.position.x;25. mPersonZ=m3rdPersonControl.transform.position.z;26. //根据小地图和屏幕计算缩放比例27. mScale=(200F/Screen.width)<(200F/Screen.height)?(200F/Screen.width):(200F/Screen.height);28. }29.30. void Update ()31. {32. //刷新角色位置33. mPersonX=m3rdPersonControl.transform.position.x;34. mPersonZ=m3rdPersonControl.transform.position.z;35. if(Input.GetMouseButtonDown(0))36. {37. Vector3 Target=Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y, 1));38. Vector3 Dir=Target-m3rdPersonControl.transform.position;39. Instantiate(Bullet,BulletPos.transform.position,Quaternion.identity);40. }41. }42.43. void OnGUI()44. {45. //在屏幕右上角绘制200x200的小地图贴图46. GUI.DrawTexture(new Rect(Screen.width-200,0,200,200),MapTexture);47. //以小地图左下角为原点的右手系,角色标示宽度和高度为2048. GUI.DrawTexture(new Rect(Screen.width-200+mPersonX*mScale+20,200-mPersonZ*mScale-20,20,20),PlayerTexture);49. }50.}在上述代码中,我们设定小地图的宽度和高度均为200,设定角色标示物的宽度和高度均为20,并规定地图向上为正北方向。
Unity3d中使用摄像机制作实时显示小地图,以之前的tank为例。
开始制作之前场景中物体如图。
开始制作,步骤1:新建一个camera及一个plane。
对齐位置,将camera改名为camera_UI。
旋转plane,使之在camera_UI中显示为竖直状态。
效果如下图:
其中,camera_UI及plane设置如图。
position位置,在tank前方并在视野范围内能看到即可。
步骤2:为场景中物体添加Layer,以保证后面步骤中的camera正确显示。
分别为terrain及UI。
分别选中terrain及UI,调整inspector窗口的Layer,设置terrain的Layer为terrain,plane的Layer为UI。
此时场景中有两个camera,game窗口中的显示会出现混乱。
那么此时需要调整camera的Culling Mask。
步骤3:调整camera的Culling Mask。
将tank下面的camera的Culling Mask属性更改,此时为选中everything状态,点击UI选项,使其不选中UI。
设置camera_UI的Culling Mask只选中UI,同时,将camera_UI的Clear Flags改为Don‘t Clear。
文章出处【狗刨学习网】
此时,即可正确显示出地形、坦克及plane。
plane将用作实时显示地图。
步骤4:再新建一个camera,改名为camera_map,此camera将用作显示地图的camera。
选中camera_map,在inspector中找到Target Texture,此时为空。
在project界面新建一个Render Texture,出现一个New Render Texture。
将New Render Texture赋给camera_map的Target Texture,此时camera_map所照摄到的范围即New Render Texture的显示。
步骤5:回到plane,为plane添加一个material,Shader类型为Self—Illumin/VertexLit(即自发光),选择Base,为Base赋上New Render Texture。
此时,game窗口中显示如图:
此时已完成的差不多了,但是发现右上角的小地图是倒的,对camera_map调节,旋转使小地图变成正的。
若在运行过程中,小地图会被树挡住,则选中Camera_UI调节inspector面板中Camera下的Clipping Planes的Near属性即可。
至此,小地图实时显示制作完成。
本文来源于狗刨学习网。