【发布时间】:2018-12-13 19:01:46
【问题描述】:
嘿,每个人都可以使用一些建议。在运行我的程序时,我正在加载一个预制件并将其附加到角色对象的骨骼上。
这个角色被称为“总统先生”,它有一个名为“genSuit_AttachHandRight”的附着点。通过另一个脚本,我调用此函数来加载一个名为“basicBriefcase”的预制件,将其附加到此附加点,并尝试将其相对于附加点的位置设置为 (0, 0, 0)。:
public void Equip(string mode)
{
// on startup load basic equipment
if ( mode == "Initialize" )
{
// right hand equipment
string modelRightAttachPoint = championProperties.modelRightAttachPoint;
string defaultRightHandType = championProperties.defaultRightHandType;
string defaultRightHandObject = championProperties.defaultRightHandObject;
if ( defaultRightHandType == "custom")
{
string championName = this.name;
GameObject equipment = Instantiate(Resources.Load("Equipment/" + championName + "/" + defaultRightHandObject, typeof(GameObject))) as GameObject;
equipment.name = defaultRightHandObject; // gets rid of the (Clone)
equipment.transform.parent = GameObject.Find(modelRightAttachPoint).transform;
equipment.transform.position = Vector3.zero;
}
}
}
预制件正在层次结构中加载,并且在我按下播放时似乎已附加到附加点,但在游戏视图中无处可见。当我尝试通过运行它进行调试时:
public void Update()
{
print(GameObject.Find("basicBriefcase").transform.position);
}
价值飞扬四方。第一次更新时输出的第一行是 (0, 0, 0),但之后的位置通过更新每个周期都在变化。它附加的角色是动画的,但它只是坐在原位,我认为相对于附加点的位置应该在我设置的位置保持不变。如果我删除该行
equipment.transform.parent = GameObject.Find(modelRightAttachPoint).transform;
然后位置停留在 (0, 0, 0),但是因为我没有附加到适当的父级(附加点),所以位置显然是错误的。我在这里错过了什么吗?感谢您的帮助。
编辑
我发现我应该使用
equipment.transform.localPosition = Vector3.zero;
而不是 .position 但现在我遇到了一个全新的问题。之前设备可以正常连接到父级,现在当我尝试设置父级时它就消失了。
如果我执行这个语句
GameObject equipment = Instantiate(Resources.Load(startPath + defaultRightHandObject, typeof(GameObject))) as GameObject;
对象出现在没有父级的层次结构中。但如果我尝试这样做:
Transform trans = GameObject.Find("MrPresidentAttachRightHand").transform;
equipment.transform.SetParent(trans, true);
对象就消失了。它无处可寻,它没有附加到它应该附加到的父级。我试过使用 .parent 和 .SetParent。我已经尝试重新加载它应该附加到的预制件。如果我尝试将父级设置为 Camera.main.transform 之类的东西,它可以工作。如果我将它设置为我试图将其附加到的预制件中的最高父级,它就可以工作。但是,如果我尝试将其附加到附加点,它就会消失。我做错了什么?
【问题讨论】: