我想访问我的玩家角色的动画组件。这个字符是在GameObject Character position下生成的,它本身就是Game Manager的子代。
角色预制板有不同的名字,所以我无法通过确切的名字找到它们。因此,只需要一个Character position的独生子就更容易了。
Game Manager
Character position
Player Prefab我在网上搜索过,并尝试了GetChild的索引和GetComponentInChildren。他们都不管用。下面是我为此编写的脚本:
private Animator archerAnimator;
private float startSpeed;
GameObject charPos;
GameObject archer_;
// Use this for initialization
void Start () {
charPos = GameObject.Find("Game manager/Character position");
Debug.Log(charPos);
archer_ = charPos.transform.GetChild(0).gameObject;
archerAnimator = charPos.GetComponentInChildren<Animator>();
Debug.Log(archerAnimator);
}找到了charPos,但是对于archer_,我得到了错误,Transform child out of bounds。玩家弓箭手不在那里,而是在场景开始时在运行时产生的,这就是为什么它找不到它的原因吗?
如能提供一些指导,将不胜感激。
谢谢
发布于 2018-11-13 03:42:32
我觉得你找那个球员太早了。你应该颠倒你的发现逻辑。与其扫描播放机及其动画器,不如将脚本放在播放器本身上,该脚本在创建后运行,并向游戏管理器或任何需要访问的对象报告,如下所示:
void Start() { GetComponentInParent<GameManager>().OnPlayerSpawned(this); }我还将提到,一些脚本通过名称查找对象并访问其组件通常是个坏主意。这里有一个设计准则要记住:您应该尽可能不频繁地遍历统一的对象层次结构,即使您这样做了,也应该只遍历没有附加其他脚本的对象。在这种情况下,您还应该将控制动画器的逻辑放在Player脚本中。那么,你就不需要从一开始就得到动画家的参考了。
https://stackoverflow.com/questions/53270760
复制相似问题