我正在制作一个成就系统,以便在解锁时保存我的所有成就并显示哪些成就不是。当我尝试实例化预制件时,z位置使我的预制件看起来很小并且不合适。我需要使用c#代码将我的位置z设置为0。在我实例化预制件时,z位置值为1557.057,并且在我的面板中使预制件看起来很小。
用于在我的面板中实例化预制件的代码
using UnityEngine;
using System.Collections;
public class AchievementManager : MonoBehaviour {
public GameObject achievementPrefab;
// Use this for initialization
void Start ()
{
CreateAchievement("Streak");
CreateAchievement("Streak");
CreateAchievement("Streak");
}
public void CreateAchievement(string category)
{
GameObject achievement = (GameObject)Instantiate(achievementPrefab);
SetAchievementInfo(category, achievement);
}
public void SetAchievementInfo(string category , GameObject achievement)
{
achievement.transform.SetParent(GameObject.Find(category).transform);
achievement.transform.localScale = new Vector3(1, 1, 1);
}
}
答案 0 :(得分:0)
使用
achievement.transform.localPosition = new Vector3(0,0,0);
将位置z设为0。
答案 1 :(得分:0)
Instantiate
可以分别将位置和旋转作为第二个和第三个参数,因此您可以使用category
对象的世界位置和旋转来实例化对象,如下所示:
GameObject achievement = (GameObject)Instantiate(
achievementPrefab,
GameObject.Find(category).transform.position,
GameObject.Find(category).transform.rotation
);
此外,transform.SetParent()
可以second parameter worldPositionStays
,您可以尝试将其设置为false
achievement.transform.SetParent(GameObject.Find(category).transform, false);
最后,您可以直接设置Z(以下仅重置Z):
achievement.transform.localPosition = new Vector3(
achievement.transform.localPosition.x,
achievement.transform.localPosition.y,
0
);