为什么我在 unity 中不断收到此错误“类型或命名空间‘Rigging’在‘unityEngine.Animations’的命名空间中不存在

问题描述 投票:0回答:1

当我尝试安装资产时,我从统一资产商店下载了一个资产,我遇到了很多错误,其中之一是“错误 CS0234 名称空间“UnityEngine.Animations”中不存在类型或名称空间名称“Rigging”(是您缺少程序集参考吗?)”

这是资产中的MotoAnimContoller.cs文件

`

using System.Collections;
using UnityEngine;
using UnityEngine.Animations.Rigging;    // Riggin showing Error
namespace SMPScripts
{
    public class MotoAnimController : MonoBehaviour
    {
        MotoController motoController;
        Animator anim;
        string clipInfoCurrent, clipInfoLast;
        [HideInInspector]
        public float speed;
        [HideInInspector]
        public bool isAirborne;

        public GameObject hipIK, chestIK, leftFootIK, leftFootIdleIK, headIK;
        MotoStatus motoStatus;
        Rig rig;   //---> Error
        bool onOffBike;
        [Header("Character Switching")]
        [Space]
        public GameObject characterGeometry;
        public GameObject externalCharacter;
        float waitTime;
        void Start()
        {
            motoController = FindObjectOfType<MotoController>();
            motoStatus = FindObjectOfType<MotoStatus>();
            rig = hipIK.transform.parent.gameObject.GetComponent<Rig>();
            if (motoStatus != null)
                onOffBike = motoStatus.onBike;
            if (characterGeometry != null)
                characterGeometry.SetActive(motoStatus.onBike);
            if (externalCharacter != null)
                externalCharacter.SetActive(!motoStatus.onBike);
            anim = GetComponent<Animator>();
            leftFootIK.GetComponent<TwoBoneIKConstraint>().weight = 0;  // TwoBoneIKConstraint showing error
        }

        void Update()
        {
            if (characterGeometry != null && externalCharacter != null)
            {
                if (Input.GetKeyDown(KeyCode.Return) && motoController.transform.InverseTransformDirection(motoController.rb.velocity).z <= 0.1f && waitTime == 0)
                {
                    waitTime = 1.5f;
                    externalCharacter.transform.position = characterGeometry.transform.root.position - transform.right * 0.5f + transform.forward * 0.1f;
                    motoStatus.onBike = !motoStatus.onBike;
                    if (motoStatus.onBike)
                    {
                        anim.Play("OnBike");
                        StartCoroutine(AdjustRigWeight(0));
                    }
                    else
                    {
                        anim.Play("OffBike");
                        StartCoroutine(AdjustRigWeight(1));
                    }
                }
            }
            waitTime -= Time.deltaTime;
            waitTime = Mathf.Clamp(waitTime, 0, 1.5f);

            speed = motoController.transform.InverseTransformDirection(motoController.rb.velocity).z;
            isAirborne = motoController.isAirborne;
            anim.SetFloat("Speed", speed);
            anim.SetBool("isAirborne", isAirborne);
            if (motoStatus != null)
            {
                if (motoStatus.dislodged == false)
                {
                    if (!motoController.isAirborne && motoStatus.onBike)
                    {
                        clipInfoCurrent = anim.GetCurrentAnimatorClipInfo(0)[0].clip.name;
                        if (clipInfoCurrent == "IdleToStart" && clipInfoLast == "Idle")
                            StartCoroutine(LeftFootIK(0));
                        if (clipInfoCurrent == "Idle" && clipInfoLast == "IdleToStart")
                            StartCoroutine(LeftFootIK(1));
                        if (clipInfoCurrent == "Idle" && clipInfoLast == "Reverse")
                            StartCoroutine(LeftFootIdleIK(0));
                        if (clipInfoCurrent == "Reverse" && clipInfoLast == "Idle")
                            StartCoroutine(LeftFootIdleIK(1));

                        clipInfoLast = clipInfoCurrent;
                    }
                }
                else
                {
                    characterGeometry.SetActive(false);
                    if(Input.GetKeyDown(KeyCode.R))
                    {
                        characterGeometry.SetActive(true);
                        motoStatus.dislodged = false;
                    }
                }
            }
            else
            {
                if (!motoController.isAirborne)
                {
                    clipInfoCurrent = anim.GetCurrentAnimatorClipInfo(0)[0].clip.name;
                    if (clipInfoCurrent == "IdleToStart" && clipInfoLast == "Idle")
                        StartCoroutine(LeftFootIK(0));
                    if (clipInfoCurrent == "Idle" && clipInfoLast == "IdleToStart")
                        StartCoroutine(LeftFootIK(1));
                    if (clipInfoCurrent == "Idle" && clipInfoLast == "Reverse")
                        StartCoroutine(LeftFootIdleIK(0));
                    if (clipInfoCurrent == "Reverse" && clipInfoLast == "Idle")
                        StartCoroutine(LeftFootIdleIK(1));

                    clipInfoLast = clipInfoCurrent;
                }
            }
        }

        IEnumerator LeftFootIK(int offset)
        {
            float t1 = 0f;
            while (t1 <= 1f)
            {
                t1 += Time.deltaTime*3;
                leftFootIK.GetComponent<TwoBoneIKConstraint>().weight = Mathf.Lerp(-0.05f, 1.05f, Mathf.Abs(offset - t1));  //showing error
                leftFootIdleIK.GetComponent<TwoBoneIKConstraint>().weight = 1 - leftFootIK.GetComponent<TwoBoneIKConstraint>().weight;  //showing error
                yield return null;
            }

        }
        IEnumerator LeftFootIdleIK(int offset)
        {
            float t1 = 0f;
            while (t1 <= 1f)
            {
                t1 += Time.deltaTime*3;
                leftFootIdleIK.GetComponent<TwoBoneIKConstraint>().weight = Mathf.Lerp(-0.05f, 1.05f, Mathf.Abs(offset - t1));  // showing error
                yield return null;
            }

        }
        IEnumerator AdjustRigWeight(int offset)
        {
            StartCoroutine(LeftFootIK(1));
            if (offset == 0)
            {
                characterGeometry.SetActive(true);
                externalCharacter.SetActive(false);
            }
            float t1 = 0f;
            while (t1 <= 1f)
            {
                t1 += Time.deltaTime*3;
                rig.weight = Mathf.Lerp(-0.05f, 1.05f, Mathf.Abs(offset - t1));
                yield return null;
            }
            if (offset == 1)
            {
                yield return new WaitForSeconds(0.2f);
                characterGeometry.SetActive(false);
                externalCharacter.SetActive(true);
                // Matching position and rotation to the best possible transform to get a seamless transition
                externalCharacter.transform.position = characterGeometry.transform.root.position - transform.right * 0.5f + transform.forward * 0.1f;
                externalCharacter.transform.rotation = Quaternion.Euler(externalCharacter.transform.rotation.eulerAngles.x, characterGeometry.transform.root.rotation.eulerAngles.y + 80, externalCharacter.transform.rotation.eulerAngles.z);
            }

        }
    }
}

`

我尝试检查 Unity 论坛和 Youtube 寻找解决方案,但与我的问题无关。

unity-game-engine unity-container unityscript facebook-unity-sdk unity-webgl
1个回答
0
投票

错误已解决@Yugerten 已经通过给我一个已经有解决方案的论坛的链接来帮助我解决它。这是论坛https://forum.unity.com/threads/library-unityengine-animations-rigging-doesnt-exist.1233196/

© www.soinside.com 2019 - 2024. All rights reserved.