角色站在移动台阶上跟随移动

本贴最后更新于 2695 天前,其中的信息可能已经事过景迁

看很多游戏都有类似 角色站在一个圆形台阶上,原型台阶在地图上从 A 点移动到 B 点,然后角色站在台阶上跟着台阶一起动,而且可以在途中跳跃到其他台阶上,然后闯地图
这个功能核心是移动代码要放在 LateUpdate 里把被装载的对象位置算一个相同位移。
其实如果站在台阶上不需要控制的话,那么直接把台阶设置为角色的父级就可以了
如果站在台阶上还需要调用角色控制器控制角色移动跑跳,那么设置父级会对坐标控制以及摄像机控制有很大影响,当然也是可以算的,只是比较麻烦
这里简单的方法是在台阶的移动时 在 LateUpdate 里算出自身在上一帧经过的位移,如果台阶上有角色,那么角色也要调用角色控制器的 Move 这么多位移
这个简单方法只能实现简单的坐台阶跟台阶一起移动,并且在台阶上还可以控制角色,但是如果台阶在飞行阶段遇见其他障碍物把角色挡住,那么还要进行下一步处理。

这里说下具体实现步骤
要做这个功能前,首先要实现 角色通过角色控制器移动,台阶直接 K 帧从地图的 A 地方移动到 B 地方

台阶模型就是一个 cube,在其上有 2 个 BOXCOLLIDER,一个选 TRIGGER 一个不选,选 Trigger 的放上面一点,然后尽量在台阶的中心小一点,免得一碰到台阶台阶就开始动,那么人物还没整个走到台阶上,不要和另外个 collider 重叠
角色附加一个普通的 charactercontroller 就可以了,触发器用来触发台阶开始播放动画的,下面的 boxcollider 是为了不让角色掉下去的。

放截图吧,截图不动刷新试试

角色碰到台阶时,触发台阶的开始移动,同时记录当前台阶位置,记录碰撞到台阶上的角色
代码,TestFly 为测试脚本, 上面带了一个 Animator 形的 K 帧动画,设置了一个变量 flyCube 开启这个 K 帧动画(从 A 点到 B 点找 2 个点,然后 K 位置)
MeteorUnit 是角色控制器附加的那个对象上带的,也就是管理角色的,可以自行替换

using UnityEngine;
using System.Collections;

public class TestFly : MonoBehaviour {
public Animator ctrl;
Vector3 lastpos;
bool inWalk = false;
// Use this for initialization
void Start () {
}

// Update is called once per frame void Update () { } private void LateUpdate() { if (inWalk) { Vector3 vdiff = transform.position - lastpos; if (objAttach != null) objAttach.GetComponent<CharacterController>().Move(vdiff); lastpos = transform.position; } } GameObject objAttach; public void OnTriggerEnter(Collider other) { if (other.gameObject.GetComponent<MeteorUnit>() != null && !inWalk) { //other.gameObject.transform.SetParent(transform); ctrl.SetBool("flyCube", true); lastpos = transform.position; inWalk = true; } //不论是不是在动画中,只要碰到了触发器,就算坐上了台阶 if (other.gameObject.GetComponent<MeteorUnit>() != null) objAttach = other.gameObject; } public void OnTriggerExit(Collider other) { objAttach = null; } public void OnFlyEnd() { ctrl.Stop(); inWalk = false; }

}

  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 134 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 1 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • sts
    2 引用 • 2 回帖 • 224 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 382 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 819 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 568 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 297 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 662 关注
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 396 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 32 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖 • 4 关注
  • OpenCV
    15 引用 • 36 回帖
  • gRpc
    11 引用 • 9 回帖 • 88 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖 • 2 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 631 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 515 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 3 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 394 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 1 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    180 引用 • 821 回帖