栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity2D学习笔记Day15:角色下蹲+掉落死亡+切换场景

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity2D学习笔记Day15:角色下蹲+掉落死亡+切换场景

学习资源:B站 M_Studio《Unity教程2D入门》20-21

Unity Assets:Sunnyland

Day15 更正:Time.fixedDeltaTime

让角色移动和跳跃时更加流畅,如果是用FixedUpdate函数,应该相对应选择
Time.fixedDeltaTime。

1. 增加Crouch(下蹲)效果

为节省时间,这里就不添加这个实际效果。但理解一下其中的思路和方法。

在Input中没有Crouch,如何添加?
右键,复制某一项,然后修改其中的参数即可。

下蹲时碰撞体不变,怎么办?
观察游戏运行时的碰撞体,发现即使角色下蹲,碰撞体仍然保持原来的样子。也就是说角色下蹲后还是无法通过低处。

这里就是先前要用两个碰撞体的原因。
当角色下蹲后,应该让头部的box collider消失,起立后再让碰撞体出现。
注意
节点用setactive,组件用enabled。

disColl.enabled = false;

小技巧:如何在游戏运行时看见碰撞体?
点击右上角的Gizmos。
就可以看见属性面板中展开的部分,在Scene中的效果。

如图,这里展开两个碰撞体的组件。

问题:下蹲钻到一半时站起,会被卡住。
思路:如果监测到上部有ground,就不能起立。
方法:选中靠近角色头顶的一个点作为基准点,画一个圈,判断ground是否在这个圈内。
Physics2D.OverlapCircle(Vector2 point,float radius,int layerMask):
Checks if a collider falls within a circular area
point:基准点
radius:判断范围
layerMask:要判断的图层

在这里插入代码片

小技巧:判断角色头顶的位置
给角色添加一个子节点celling,将它移至角色的头顶。

代码如下:

void Crouch(){
	//当没有障碍物时
	if(!Physics2D.OverlapCircle(Celling.position,0.2f,ground))
	{
		if(Input.GetButton("Crouch"))
		{
			anim.SetBool("isCrouching",true);
			disColl.enabled = false;
		}
		else
		{
			anim.SetBool("isCrouching",false);
			disColl.enabled = true;
		}
		//控制角色下蹲
	}
}
2. 角色掉落死亡

教程里面还使用了trigger碰撞体,但我觉得用y坐标来判断即可。
当角色小于某一y坐标,触发死亡。

我用了一个public变量来设置死亡边界。

public float deadLiney = -7.0f;

游戏重置

using UnityEngine.SceneManagement;

重启当前场景。
update中:

if(transform.position.y < deadLiney)
{
     SceneManager.LoadScene(SceneManager.GetActiveScene().name);   
}

制作delay效果

延迟2s后启动。

将上述代码重新写为一个函数。

void Restart()
{
	SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

update中:

停止播放音乐

		if(transform.position.y < deadLiney)
        {
            //将所有的音频都禁用
            GetComponent().enabled = false;
            //延迟2s后重启
            Invoke("Restart", 2f);
        }
3.切换场景
  1. 使用场景名
    SceneManager.LoadScene(“name”)
  2. 使用场景编号
    SceneManager.GetActiveScene().buildIndex

添加脚本EnterHouse:

	void Update()
    {
        if(Input.GetKeyDown(KeyCode.E))
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
        }
    }

场景编号是什么?
在build setting中场景名后面的就是场景编号。
可以通过拖动来修改顺序。

将该脚本添加给Dialog,只有Dialog窗口启动时,按e才会触发场景切换。
(否则在游戏过程中如果误触了e就会触发场景切换!)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900771.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号