[转]unity实战之大主宰
下载 Fantasy Skybox FREE, 构建自己的游戏场景
点击菜单中的windows->assert store,打开商店窗口,搜素想要的资源,下载添加到仓库。
然后回到unity,点击windows ->package manager,就能找到自己的资源,全部import
这里是获取场景后的结果:
简单总结游戏对象的使用
游戏对象的属性
从目前来看,我们最常使用的属性是位置,尺寸等,可以通过:
Object.transform.position=new Vector(x,y,z);
对象可能不止包含基本信息,还可以包含许多component(组件),可以通过按钮
来为对象添加组件,组件有自己的属性,功能等。对于复杂的特殊组件,一般通过按钮添加,如果想添加自定义的代码,就是用:
object.AddComponent(typeof(class_name))
其结果相当于把class打包进入一个cs文件,并添加到对象里,这个类必须继承MonoBehaviour
要获取组件:
object.GetComponent<component_type>()
返回值是组件,可以在获取组件后通过组件内的函数,改变组件的一些值。
对象的加载
简单加载
最简单的加载方式,就是直接用鼠标把对象拖到左上角的窗口中,然后手动设置属性。
但是这样会耗费大量的时间去加载。(如果有许多个对象是相同的,系统会重复加载,耗时)
而且有许多对象是在游戏中途才生成的。为了游戏流畅性,在开始就要加载,但是不显示,这种简单加载做不到。
用代码加载
首先对象必须放在Assert/Resources文件夹中,这个Resources文件夹是特殊的,如果没有请自己建立,把需要用到的资源加载进去
source=Resources.Load<type>(location)
返回一个对象(只加载,不显示),这里的location是一个地址,一个以Resources文件夹为根的相对地址。
但后把资源显示在地图中
object=Instantiate(source,Vector3,Quaternion)
这样对象就会显示出来,由于之前加载了,这是会很快把对象显示出来,避免卡顿
对象移动
通过修改object.transform.position可以实现最直接的修改,此外还提供了函数,放在Update中:
Vector3.MoveTowards(Vector3 now,Vector3 target,float speed)
Vector3.Slerp(Vector3 start,Vector3 end,float 百分比)
一般这两个就很强大了。如果要移动抛物线等,可以通过物理引擎加入rigid body,也可以自己定义复杂的算法。
此外Rotate,RotateAround分别进行旋转和自转,两个函数都在transform组件中,自查
对象操作
在前面的属性中已经提到了改变组件的方法改变对象,这里还有:
点击事件
class ClickEvent :MonoBehaviour{
void OnMouseDown(){
}
}
碰撞检查
首先要给物体加入组件collider,定义碰撞体的形状,体积等
class CollisionEvent :MonoBehaviour{
void OnCollisionEnter(Collision c){
}
void OnCollisionStay(Collision c){
}
void OnCollisionExit(Collision c){
}
}
游戏玩法
闯关游戏,通关就行,总共有三个地图,也就是序章,主题,终章。这只是个小demo,并没有太长的流程。
所谓“麻雀虽小,五脏俱全”,如果加以时日,可以做大,做美
成果展示
这只是一张截图:
通关视频
幻影道路
游戏中有一个跳跳乐关卡,里面的物体快只有离近了才能看见,而且踩上去很快就会消失,这是反应的比拼,如果不能反映过来下一个点的位置,就会死掉。
那么物体透明度的调节如下:
Color c;
c=this.GetComponent<Renderer>().material.color;
c.a= X
this.GetComponent<Renderer>().material.color=c;
摩擦力?一起运动!
游戏中有很多移动的平台,如果踩在这些移动的平台上,会与平台一起运动,这非常像是现实中的摩擦力。
这是通过一起运动做到的,如果主角碰撞到某些平台,就会获得和平台当前速度一样的额外速度
易错点
主角的额外位移必须与平台放在同一个Update函数中,而不是分开。不同物体的Update不是一起执行的,如果位移函数分开,我们看到的物体会延迟一帧,具体情况是看到平台在脚下抖动(鬼畜)
BOSS总是盯着我看?
通过Quaternion提供的函数转向
boss.transform.rotation =Quaternion.Slerp(boss.transform.rotation, Quaternion.LookRotation(me.transform.position - boss.transform.position), 10 * Time.deltaTime);
被打了屏幕闪红光
闪红光的本质是一张纯红色的Texture2D贴图,通过调节它的透明度渐变。
GUI.color.a就是透明度,取值为0-1,函数自定义
例如:
c=GUI.color;
c.a=(0.4f+0.2f*depth)-(Time.time-damtime)*(0.4f+0.2f*depth);GUI.color=c;
GUI.Label(new Rect(-10,-10,2112,1188),reds);
保存点
如果多死几次就发现,即使点击重玩,游戏也不会回到最开始的地方,而是从死亡的关卡开始。仿佛游戏会自动保存一样。
实际上由于存档很简单,我们直接使用一个static变量就搞定了:
public static int load=0;
这个变量就记录着你已经到达了第几关,从而直接将主角传送过去。
每次重玩是,用SceneManager.LoadScene(“XXX”)函数,重新加载当前场景,但是只有static变量不会重新加载,就仿佛是简单的存档一样。
通关视频展示请移步:
通关视频
别忘了三连
项目代码和资源链接:
项目传送门 (资源太多了,直接发的压缩包)
使用方法:
新建项目,在新项目中删除所有Asserts中文件
解压仓库中的dazhuzai_Asserts.zip文件,里面有我的资源库,用我的Asserts覆盖你的Asserts(粘贴过去),然后刷新等待
在unity中打开Asserts/Scenes文件夹,将里面的五个文件全都加入File–>Build suetting中,双击first,进入名叫“first”的scene中,点击运行。
原文链接:https://blog.csdn.net/lihy259/article/details/109148929?utm_source=app
标题:[转]unity实战之大主宰
作者:shirln
地址:https://www.mmzsblog.cn/articles/2020/10/20/1603199970692.html
如未加特殊说明,文章均为原创,转载必须注明出处。均采用CC BY-SA 4.0 协议!
本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!
