欢迎来到淼淼之森的博客小站。  交流请加我微信好友: studyjava。  也欢迎关注同名公众号:Java学习之道

[转]unity实战之大主宰

  |   0 评论   |   0 浏览

下载 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 协议

本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。
• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!

个人微信公众号 ↓↓↓                 

微信搜一搜爱上游戏开发