Unity实现物件挂载到不同父节点
首先需要一个物件对象
public class KitchenObject : MonoBehaviour
{
public KitchenObjectHolder Holder { get; set; }
public void ResetHolder()
{
if (Holder == null)
return;
Holder.KitchenObject = null;
Holder= null;
}
}
然后是物件持有者对象
public class KitchenObjectHolder :MonoBehaviour
{
[SerializeField]
private Transform kitchenObjectParent;
public KitchenObject KitchenObject { get; set; }
public Transform GetKitchenObjectParentTransform()
{
return kitchenObjectParent;
}
public void TrySwapKitchenObject(KitchenObjectHolder another)
{
MoveKitchenObject(this, another);
}
private static void MoveKitchenObject(KitchenObjectHolder holder1, KitchenObjectHolder holder2)
{
if ((holder1.KitchenObject!=null) && (holder2.KitchenObject!=null))
return;
if ((holder1.KitchenObject==null ) && (holder2.KitchenObject==null))
return;
if(holder1.KitchenObject != null)
{
holder2.HoldKitchenObject(holder1.KitchenObject);
}
else if(holder2.KitchenObject != null)
{
holder1.HoldKitchenObject(holder2.KitchenObject);
}
}
public bool HoldKitchenObject(KitchenObject kitchenObject)
{
if (this.KitchenObject != null)
return false;
kitchenObject.ResetHolder();
kitchenObject.Holder = this;
this.KitchenObject = kitchenObject;
kitchenObject.transform.parent = GetKitchenObjectParentTransform();
kitchenObject.transform.localPosition = Vector3.zero;
return true;
}
}
代码的核心逻辑就是将物件的transform的parent设置为持有者对象上的一个transform。
然后制作prefab。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!