3D-game-unity作业四(大主宰片段)

3D-game-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){
		//碰撞结束,两物体离开
	}
}

编程实践:我选择作业2《大主宰》

因为我是抖S,就找难的做

游戏玩法

闯关游戏,通关就行,总共有三个地图,也就是序章,主题,终章。这只是个小demo,并没有太长的流程。

所谓“麻雀虽小,五脏俱全”,如果加以时日,可以做大,做美

成果展示

这只是一张截图:
在这里插入图片描述

通关视频

项目亮点

幻影道路

游戏中有一个跳跳乐关卡,里面的物体快只有离近了才能看见,而且踩上去很快就会消失,这是反应的比拼,如果不能反映过来下一个点的位置,就会死掉。

那么物体透明度的调节如下:

Color c;
c=this.GetComponent<Renderer>().material.color;
c.a= X //透明度函数,0-1从透明到不透明,自定义
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 setting中,双击first,进入名叫“first”的scene中,点击运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity3D-XRInput是一个简单易懂的XR输入系统,专为Unity3D开发者设计。XRInput提供了一种集成虚拟现实和增强现实硬件设备的解决方案,帮助开发者更方便地处理虚拟现实设备的输入操作。 XRInput具有以下特点: 1. 简单易用:XRInput提供了一套简化的API接口,开发者可以轻松地获取XR设备的输入信息。无论是手柄、头戴式显示器或其他XR硬件设备,都可以通过XRInput统一管理。 2. 多平台兼容:XRInput支持大部分主流的VR和AR平台,包括Oculus Rift、HTC Vive、Windows Mixed Reality等。开发者可以无需关注具体设备的差异,只需使用XRInput即可适配多个平台。 3. 扩展性强:XRInput提供了可扩展的功能,开发者可以根据自己的需求进行定制。例如,可以添加自定义的手势识别算法,或者扩展新的输入设备。 4. 与Unity集成:XRInput与Unity3D紧密集成,无需额外的配置和插件。开发者可以直接在Unity编辑器中使用XRInput进行虚拟现实应用程序的开发。 5. 支持常见输入操作:XRInput支持常见的输入操作,如位置追踪、手势识别、触摸输入等。开发者可以根据需要处理这些输入操作,以实现更丰富的交互体验。 总之,Unity3D-XRInput是一个简单易懂的XR输入系统,为Unity开发者提供了更便捷的虚拟现实设备输入管理,帮助开发者节省时间和精力,快速开发出高质量的XR应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值