嘿,每个人都可以使用一些建议。在运行程序时,我正在加载预制件并将其附加到角色对象的骨骼上。
该字符称为“ MrPresident”,它具有一个附加点“ 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);
}
值在各处飞来飞去。在第一个Update上,输出的第一行是(0,0,0),但之后的位置在更新过程中每个周期都会改变。它附加到的角色是动画的,但只是就位,我认为相对于附加点的位置应保持在我设置的位置不变。如果我删除了行
equipment.transform.parent = GameObject.Find(modelRightAttachPoint).transform;
然后位置保持在(0,0,0),但是因为我没有附加到Approprite父对象(附加点),所以该位置显然是错误的。我在这里想念什么吗?感谢您的帮助。
编辑
我发现我应该使用
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之类的格式,则可以正常工作。如果我将其设置为我要附加到预制件中的最高父级,则它可以工作。但是,如果我尝试将其附加到附加点,它将消失。我在做什么错了?
答案 0 :(得分:1)
请不要使用transform.parent
来设置GameObject的父代。使用transform.SetParent
函数,让您指定对象是否应相对于父对象放置。
应该是:
Transform trans = GameObject.Find(modelRightAttachPoint).transform;
equipment.transform.SetParent(trans, true);
如果仍有问题,请向其传递false:
Transform trans = GameObject.Find(modelRightAttachPoint).transform;
equipment.transform.SetParent(trans, false);