【问题标题】:Need to set position z to 0需要将位置z设置为0
【发布时间】:2015-08-03 01:53:44
【问题描述】:

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

【问题讨论】:

  • 编辑了您的问题以获得更好的代码格式。我知道您是 SO 新手,因此请考虑花一些时间在这个问题上,以便其他用户易于阅读。
  • 那么修正你的预制件中的转换?
  • 我尝试纠正我的预制件中的转换..仍然有同样的问题

标签: c# unity3d position


【解决方案1】:

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

【讨论】:

  • 感谢 Arx 的代码。它将我的 z 位置设置为 0
【解决方案2】:

使用

achievement.transform.localPosition = new Vector3(0,0,0);

将位置 z 设置为 0。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2019-12-22
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多