Unity 角色控制器重复使用Ragdoll布娃娃系统,动画控制和布娃娃状态切换

Unity 角色控制器重复使用Ragdoll布娃娃系统,动画控制和布娃娃状态切换大家好,今天开发游戏的时候做了Ragdoll相关的功能,于是写写心得。如果要在单一物体重复使用Ragdoll布娃娃系统,那我们需要对物体设置两个状态,一个是正常状态,受动画系统控制,一个是布娃娃状态,受布娃娃节点控制。(Unity开发环境2018.4LTS)预览效果:分为几个部分:首先是初始化,我们要遍历角色身体上的所有ragdoll并存储。publicLis…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

大家好,今天开发游戏的时候做了Ragdoll相关的功能,于是写写心得。

如果要在单一物体重复使用Ragdoll布娃娃系统,那我们需要对物体设置两个状态,一个是正常状态,受动画系统控制,一个是布娃娃状态,受布娃娃节点控制。(Unity开发环境2018.4 LTS)

预览效果:

Unity 角色控制器重复使用Ragdoll布娃娃系统,动画控制和布娃娃状态切换

分为几个部分:

首先是初始化,我们要遍历角色身体上的所有ragdoll并存储。

    public List<Rigidbody> RagdollRigidbodys = new List<Rigidbody>();
    public List<Collider> RagdollColliders = new List<Collider>();

    void InitRagdoll()
    {
        Rigidbody[] Rigidbodys = GetComponentsInChildren<Rigidbody>();
        for (int i = 0; i < Rigidbodys.Length; i++)
        {
            if (Rigidbodys[i] == GetComponent<Rigidbody>())
            {
                //排除正常状态的Rigidbody
                continue;
            }
            //添加Rigidbody和Collider到List
            RagdollRigidbodys.Add(Rigidbodys[i]);
            Rigidbodys[i].isKinematic = true;
            Collider RagdollCollider = Rigidbodys[i].gameObject.GetComponent<Collider>();
            RagdollCollider.isTrigger = true;
            RagdollColliders.Add(RagdollCollider);
        }
    }

Jetbrains全家桶1年46,售后保障稳定

当角色死亡或击倒时,执行启用布娃娃系统

    void EnableRagdoll()
    {
        //开启布娃娃状态的所有Rigidbody和Collider
        for (int i = 0; i < RagdollRigidbodys.Count; i++)
        {
            RagdollRigidbodys[i].isKinematic = false;
            RagdollColliders[i].isTrigger = false;
        }
        //关闭正常状态的Collider
        GetComponent<Collider>().enabled = false;
        //下一帧关闭正常状态的动画系统
        StartCoroutine(SetAnimatorEnable(false));
    }

当角色复活或站起来时,关闭布娃娃系统

    void DisableRagdoll()
    {
        //关闭布娃娃状态的所有Rigidbody和Collider
        for (int i = 0; i < RagdollRigidbodys.Count; i++)
        {
            RagdollRigidbodys[i].isKinematic = true;
            RagdollColliders[i].isTrigger = true;
        }
        //开启正常状态的Collider
        GetComponent<Collider>().enabled = true;
        //下一帧开启正常状态的动画系统
        StartCoroutine(SetAnimatorEnable(true));
    }

延迟一帧执行开关动画状态

    IEnumerator SetAnimatorEnable(bool Enable)
    {
        yield return new WaitForEndOfFrame();
        Anim.enabled = Enable;
    }

注:Anim是Animator

By 杨天睿TeraYang

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:http://www.javaforall.cn/234594.html原文链接:http://www.javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 虚拟机桥接模式不能上网

    虚拟机桥接模式不能上网首先我的主机的有线连接是正常的,如下: 但是我的虚拟机的网络连接模式为桥接模式,但是却上不了网,如下:  我们来确认下,我的虚拟机的网络模式,如下: 设置全部都是对的,但是为什么就是不能上网呢?后来我发现,原来是虚拟网络编辑器的设置有问题,如下: 我们点击“虚拟网络编辑器”,如下: 由上图,我们可以知道,我的“桥…

  • Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)

    Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)勿以恶小而为之,勿以善小而不为————————–刘备劝诸君,多行善事积福报,莫作恶主要内容有:1,拦截器的配置2权限拦截器

  • 怎样重置火狐浏览器

    怎样重置火狐浏览器

    2021年10月17日
  • php中利用header设置content-type和常见文件类型的content-type

    php中利用header设置content-type和常见文件类型的content-typephp中利用header设置content-type和常见文件类型的content-type在PHP中可以通过header函数来发送头信息,还可以设置文件的content-type,下面整理了一些常见文件类型对于的content-type值。部分header头参考:http://www.lai18.com/content/433566.html//aut

  • 会议室预定功能_高校会议室预订系统功能简介

    会议室预定功能_高校会议室预订系统功能简介一、功能介绍这是一个基于前端页面js代码的动态效果和后端对数据库数据更新的操作,主要实现的是会议室的预定功能,当员工进入预定页面后可以看到某天的某个会议室的某个时段是否被预定,当没被预定的情况下,就

  • 打印纸张尺寸换算_纸张尺寸对照表

    打印纸张尺寸换算_纸张尺寸对照表常用纸张的尺寸大小对照表-纸张规格对照表纸张的大小国际标准化组织的ISO216国际标准指明了大多数国家使用的标准纸张的尺寸。此标准源自德国,在1922年通过,定义了A、B、C三组纸张尺寸,C组纸张尺寸主要用于信封。另外,有些国家也有自己的标准,如美国,日本。这里主要是指办公用纸。下面是一些标准纸张的具体尺寸。单位:mmISO216AA0A1A2A3A4A5A…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号