当我尝试安装资产时,我从统一资产商店下载了一个资产,我遇到了很多错误,其中之一是“错误 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 寻找解决方案,但与我的问题无关。
错误已解决@Yugerten 已经通过给我一个已经有解决方案的论坛的链接来帮助我解决它。这是论坛https://forum.unity.com/threads/library-unityengine-animations-rigging-doesnt-exist.1233196/