unity prefab中怎么控制生成的prefab位置

unity中怎么控制生成的prefab位置?
我有一个角色,角色上有粒子效果,可能有俩个或者三个粒子效果,角色能发出道具,我现在使用Instantiate生成的时候,不知道如何控制这些特效的prefab和道具的prebab的位置,我现在的做法是角色身上挂了很多的gamobject,然后生成的新的道具或者特效放到这个gameobject下,大家有什么好的做法
克隆的时候可以指定位置,代码控制
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
不用解释了吧
空Object上,挂GameController脚本,所有新生成物体成为他的子物体就行了。脚本设置localPosition。
已有帐号?
无法登录?
社交帐号登录unity中如何实现选择性的生成prefab?
假如其他设备会给我传一个int prefabID用来记录我将要生成的预设体的ID , string prefabName为该ID对应的预设体的名称(为了简单实现,我就直接prefabName=prefabID.ToString();),GameObject prefabPerson为那个将要被实例化的预设体。我要如何实现把不同prefabID对应的不同预设体赋值给 prefabPerson?&br&举个例子:我的工程中有两个预设体,一个叫“1”,另一个叫“2”。这时候其他地方会传给我prefabID,我希望prefabID为1的时候,实例化预设体“1”;prefabID为2的时候,实例化预设体“2”。&br&请问这个功能该如何实现?&br&————————————————————————————————&br&我之前测试的时候想了个略坑的办法,就是定义public GameObject prefab1与prefab2,然后直接把预设体“1”和“2”拖到脚本上赋值。又定义了GameObject prefabPerson为要实例化的预设体。string prefabName=prefabID.ToString(); &br&结果,首先,发现我没法通过对prefabID的判断,让prefabPerson动态的等于prefab1或者prefab2(不能用If判断prefabID,再给prefabPerson赋值,这样当可以选的预设体多的时候就要一个个If过去,敲代码的时候就很坑了)其次,虽然最后只实例化了prefabPerson,但是prefab1和prefab2还是会持续占用内存。当可以选的预设体多的时候又开始坑了,一方面是该脚本占的内存增大,另一方面是该脚本多次出现(不是一个脚本里的函数被多次的调用,而是这个脚本本身在场景中的好几个物体上都挂着)会导致没有实例化的prefab等成倍的占据内存不释放。&br&——————————————————————————————&br&此路不通后我又退了一步,直接prefabPerson=GameObject.Find(prefabName);(其中要被实例化的预设体我已经拖到场景里了,SetActive(false))然后Network.Instantiate(prefabPerson,transform.position,transform.rotation,0) as GameObject
然并卵,最后还是没有克隆出来。。。&br&我觉得问题出在GameObject.Find(prefabName)
于是,我做了个测试,在已经克隆好预设体的情况下,断点调试:&br&string prefabName=prefabID.ToString()+&(Clone)&;&br&prefab2=GameObject.Find(prefabName);// prefabName是对的,但是prefab2为空&br&/(ㄒoㄒ)/~~我就不明白为什么这里为空了。。。&br&谁知道我哪里错的告诉我一下呗,谢谢了~
假如其他设备会给我传一个int prefabID用来记录我将要生成的预设体的ID , string prefabName为该ID对应的预设体的名称(为了简单实现,我就直接prefabName=prefabID.ToString();),GameObject prefabPerson为那个将要被实例化的预设体。我要如何实现把不同prefabID对应的不同预设体赋值给 prefabPerson?举个例子:我的工程中有两个预设体,一个叫“1”,另一个叫“2”。这时候其他地方会传给我prefabID,我希望prefabID为1的时候,实例化预设体“1”;prefabID为2的时候,实例化预设体“2”。请问这个功能该如何实现?————————————————————————————————我之前测试的时候想了个略坑的办法,就是定义public GameObject prefab1与prefab2,然后直接把预设体“1”和“2”拖到脚本上赋值。又定义了GameObject prefabPerson为要实例化的预设体。string prefabName=prefabID.ToString(); 结果,首先,发现我没法通过对prefabID的判断,让prefabPerson动态的等于prefab1或者prefab2(不能用If判断prefabID,再给prefabPerson赋值,这样当可以选的预设体多的时候就要一个个If过去,敲代码的时候就很坑了)其次,虽然最后只实例化了prefabPerson,但是prefab1和prefab2还是会持续占用内存。当可以选的预设体多的时候又开始坑了,一方面是该脚本占的内存增大,另一方面是该脚本多次出现(不是一个脚本里的函数被多次的调用,而是这个脚本本身在场景中的好几个物体上都挂着)会导致没有实例化的prefab等成倍的占据内存不释放。——————————————————————————————此路不通后我又退了一步,直接prefabPerson=GameObject.Find(prefabName);(其中要被实例化的预设体我已经拖到场景里了,SetActive(false))然后Network.Instantiate(prefabPerson,tran…
gameobject的active为false,换一个方法查找gameobject,用xxx.getcomponentInchild&Transform&(true)
蟹妖,用以下语句去load你想要的PrefabGameObject myPrefab = Resources.Load("My Prefab Path") as GameO
Resources.Load() 不行吗?
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 unity 创建prefab 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信