Unity小功能 - 贴墙滑行

目录

一. 简介

二. 创建项目

1.新建地板

2.创建墙体

3.创建主角

三. 编写代码

四. 效果演示

五. 总结



一. 简介

贴墙滑行是在游戏中常见的一种角色动作表现,它能够增加游戏的真实感和趣味性,同时也为游戏玩法带来更多的可能性。

在 Unity 中实现贴墙滑行功能,主要涉及到物理检测、速度控制和动画配合等方面。

物理检测
通常使用射线检测(Raycast)来判断角色是否与墙壁接触。从角色的侧面发射射线,如果射线与特定的墙层(通过 LayerMask 定义)发生碰撞,就认为角色贴墙了。

速度控制
当检测到贴墙且角色在竖直方向上有向下的速度时,需要控制其竖直方向的速度。可以设置一个固定的下滑速度,或者根据一些条件动态调整下滑速度,比如根据角色的重量、墙壁的材质等。

动画配合
为了让贴墙滑行的表现更加自然,需要切换到相应的动画。可以通过动画控制器(Animator Controller)根据角色的状态(是否贴墙滑行)来触发合适的动画。

优化和调整
在实际开发中,可能需要对贴墙滑行的效果进行多次优化和调整。例如,调整射线检测的长度和频率,以确保检测的准确性和性能;优化速度控制的算法,避免出现不自然的卡顿或跳跃;调整动画的过渡效果,使动画之间的切换更加平滑。

应用场景
贴墙滑行功能常见于平台跳跃类、动作冒险类游戏中。比如,角色在攀爬高楼时,可以从墙壁上安全地滑下;在穿越狭窄的通道时,利用贴墙滑行来快速通过。

通过精心实现贴墙滑行功能,可以为游戏增添丰富的操作体验,提升游戏的品质和吸引力

二. 创建项目

1.新建地板

做一下拉伸

2.创建墙体

也做一下拉伸,改一下位置.

并且把标签改为 wall.方便后面做判定.

3.创建主角

加上刚体组件

三. 编写代码

首先获取刚体组件

    private Rigidbody rb;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

然后获取键盘输入,

            if (Input.GetKey(KeyCode.A))
            {
                rb.AddForce(Vector3.forward*Time.deltaTime* Speed, ForceMode.Impulse);
            }
            if (Input.GetKey(KeyCode.D))
            {
                rb.AddForce(Vector3.back * Time.deltaTime * Speed, ForceMode.Impulse);
            }
            if (Input.GetKeyDown(KeyCode.Space))
            {
                rb.AddForce(Vector3.up * Time.deltaTime * Jump, ForceMode.Impulse);
            }

在判断物体是否接触和离开

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.transform.CompareTag("wall")) {
            Physics.gravity = new Vector3(0f, -1f, 0f);  // 修改全局重力大小为 -1
        }
    }
    private void OnCollisionExit(Collision collision)
    {
        if (collision.transform.CompareTag("wall"))
        {
            Physics.gravity = new Vector3(0f, -9.81f, 0f);  // 修改全局重力大小为 -9.81
        }

    }

完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCon : MonoBehaviour
{
    public float Speed;
    public float Jump;
    private Rigidbody rb;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        if (rb != null)
        {
            if (Input.GetKey(KeyCode.A))
            {
                rb.AddForce(Vector3.forward*Time.deltaTime* Speed, ForceMode.Impulse);
            }
            if (Input.GetKey(KeyCode.D))
            {
                rb.AddForce(Vector3.back * Time.deltaTime * Speed, ForceMode.Impulse);
            }
            if (Input.GetKeyDown(KeyCode.Space))
            {
                rb.AddForce(Vector3.up * Time.deltaTime * Jump, ForceMode.Impulse);
            }
        }
    }
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.transform.CompareTag("wall")) {
            Physics.gravity = new Vector3(0f, -1f, 0f);  // 修改全局重力大小为 -1
        }
    }
    private void OnCollisionExit(Collision collision)
    {
        if (collision.transform.CompareTag("wall"))
        {
            Physics.gravity = new Vector3(0f, -9.81f, 0f);  // 修改全局重力大小为 -9.81
        }

    }
}

四. 效果演示

GIF演示

五. 总结

在 Unity 中实现 “贴墙滑行” 这一小功能,并在进入和离开墙壁时改变重力,主要包含以下关键要点:

碰撞体检测
使用射线检测或其他碰撞检测方法来判断角色与碰撞体的接触。通过定义特定的 “墙” 层(LayerMask),准确识别碰撞体是否为墙壁。

进入墙壁时改变重力
当检测到角色首次与墙壁发生接触(进入贴墙状态)时,修改重力相关的参数。例如,减小重力的影响,使角色能够更顺畅地贴墙滑行。

离开墙壁时恢复重力
持续检测角色与墙壁的接触状态。当角色离开墙壁时,将重力恢复到默认值或初始设定值,以确保角色在正常环境中的运动符合预期。

在实际开发中,还需要考虑诸如检测的准确性、性能优化、与其他游戏逻辑的兼容性等问题。

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的海滨体育馆管理系统,源码+数据库+毕业论文+视频演示 本基于Spring Boot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理,提高管理效率,使得海滨体育馆管理工作规范化、高效化。 本文重点阐述了海滨体育馆管理系统的开发过程,以实际运用为开发背景,基于Spring Boot框架,运用了Java技术和MySQL作为系统数据库进行开发,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了海滨体育馆相关信息管理的重要功能。 本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高海滨体育馆管理效率。 关键词:海滨体育馆管理,Java技术,MySQL数据库,Spring Boot框架 本基于Spring Boot的海滨体育馆管理系统主要实现了管理员功能模块和学生功能模块两大部分,这两大功能模块分别实现的功能如下: (1)管理员功能模块 管理员登录后可对系统进行全面管理操作,包括个人中心、学生管理、器材管理、器材借出管理、器材归还管理、器材分类管理、校队签到管理、进入登记管理、离开登记管理、活动预约管理、灯光保修管理、体育论坛以及系统管理。 (2)学生功能模块 学生在系统前台可查看系统信息,包括首页、器材、体育论坛以及体育资讯等,没有账号的学生可进行注册操作,注册登录后主要功能模块包括个人中心、器材管理、器材借出管理、器材归还管理、校队签到管理、进入登记管理、离开登记管理、活动预约管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一然明月(全栈)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值