【问题标题】:Add animator to instantiated prefab?将动画师添加到实例化的预制件中?
【发布时间】:2022-01-08 18:30:09
【问题描述】:

我是新人,所以请耐心等待... 在 Blender 中创建了一个模型,包括元绑定和动画。

用空闲动画制作了一个简单的动画师:

我们有一个玩家生成器 (DinoSpawnLocation) 和脚本 (DinoSpawner) 来生成玩家 (DinoPlayer),并且动画师作为组件添加:

这里是 DinoSpawner 脚本,它应该实例化一个预制件,并将动画师添加为组件:

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

public class DinoSpawner : MonoBehaviour
{

    public GameObject DinoSpawn;

    // Start is called before the first frame update
    void Start()
    {
        Spawn();
    }

    void Spawn()
    {
        Quaternion YPosition = Quaternion.Euler(0, -60, 0);
        transform.rotation = YPosition;
        GameObject clone = Instantiate(DinoSpawn, transform.position, transform.rotation);
        Animator animator = DinoSpawn.GetComponent<Animator>();
        animator.runtimeAnimatorController = Resources.Load("Assets/Animations/Dino Controller 1.controller") as RuntimeAnimatorController;
    }


}

问题就在这里,生成了一个克隆,并添加了动画器组件,但它没有链接动画器控制器(以黄色突出显示):

我在 Resource.Load() 方法中仔细检查了路径,但由于某种原因它不会自动添加它,并且我在控制台中没有收到任何错误。

我觉得这应该是一个简单的解决方法,但在这个问题上停留了太久,如果有人可以提供帮助,将不胜感激:)

【问题讨论】:

  • 你对克隆没有做任何事情。

标签: c# unity3d game-development


【解决方案1】:

听起来animator.runtimeAnimatorController = Resources.Load("Assets/Animations/Dino Controller 1.controller") as RuntimeAnimatorController; 返回null

这是有道理的,因为 Resources.Load 应该用于放置在名为 Resources 的文件夹中的资产,然后也期望与此 Resources 文件夹的路径相对 ..所以我非常怀疑您是否已将资产放在文件夹中,例如

Assets/Resources/Assets/Animations/...

总的来说Don't use Resources!

只需在您的预制件中正确分配控制器资产并删除Instantiate 之后的行。

【讨论】:

  • 谢谢,您的回答帮助我解决了问题。意识到我的同事一开始并没有为对象创建预制件,因此我们无法在实例化克隆之前分配控制器资产。非常感谢,我们被这个问题困扰了一整天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
相关资源
最近更新 更多