需要将位置z设置为0

时间:2015-08-02 13:19:26

标签: c# unity3d position

我正在制作一个成就系统,以便在解锁时保存我的所有成就并显示哪些成就不是。当我尝试实例化预制件时,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);
    }
}

2 个答案:

答案 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
);