【问题标题】:Set gameObject active Unity C#设置游戏对象激活 Unity C#
【发布时间】:2015-12-20 03:22:08
【问题描述】:

一个游戏对象在正方向上施加了力,然后在一段时间后在负方向上施加了力。

如果力施加在负方向,这意味着游戏结束,我想显示一个完全不同的游戏对象,它是名为 icetextureONfile 的游戏结束游戏对象。我的方法不起作用我收到错误“类型'UnityEngine.GameObject'不包含icetextureONfile的定义”。我很难参考

public void FixedUpdate() {

// No action happened yet
    gameObject.icetextureONfile.SetActive (false);

// Increase the kick timer 
    kickTimer += Time.fixedDeltaTime;

    // If the next kick time has came
    if (nextKick < kickTimer) {
        // Schedule the kick back corresponding to the current kick
        nextKickBacks.Enqueue (nextKick + 100f);

        // Apply the kick force
        rb.AddForce (transform.up * thrust, ForceMode.Impulse);

        // Plan the next kick
        nextKick = kickTimer + Random.Range (MinKickTime, MaxKickTime);
    }

    // If there are more kick backs to go, and the time of the closest one has came
    if (0 < nextKickBacks.Count) {
        if (nextKickBacks.Peek () < kickTimer) {
            // Apply the kick back force
            rb.AddForce (-transform.up * thrust, ForceMode.Impulse);

            // Game object was kicked down, set active game over object
            gameObject.icetextureONfile.SetActive (true);
            // Dequeue the used kick back time

nextKickBacks.Dequeue ();
        }
    }
}

【问题讨论】:

  • 你在哪里定义icetextureONfilegameObject的类型是什么?
  • 在我通常只是将脚本附加到它们之前,我从来不需要定义游戏对象,因此建立了连接。我不知道有什么不同类型的游戏对象,我认为游戏对象是最小的分母?
  • 您是否通过编辑器附加了对象?如果是这样,请尝试icetextureONfile.gameObject.SetActive(true);
  • 没有类包含它。我现在正在尝试另一种方法,我创建了一个带有新类的新脚本,将该脚本附加到 icetextureONfile 对象,这是代码: public class GameOver : MonoBehaviour { void Start () { gameObject.SetActive (false); } // 每帧调用一次更新 void Update () { if (0

标签: c# unity3d gameobject


【解决方案1】:

如果您想停用一个然后激活另一个,您可以将其添加到类中,确保它不在函数内

public GameObject iceTexture;

然后将该对象拖放到脚本中统一称为iceTexture 的位置。然后只需确保停用脚本附加到的对象并激活 iceTexture 对象。

gameObject.SetActive(false);
iceTexture.SetActive(true);

This page 可能会对您有所帮助。

【讨论】:

  • 我无法想象为什么这不会将我的对象设置为 active(false),因为它应该 public GameObject icetextureONfile;无效开始() { icetextureONfile.SetActive (false); }
  • 老实说应该。您是否将对象拖放到脚本提供的插槽中?
  • 不,我没有,我真的不知道这意味着什么,你能解释一下插槽在哪里吗?
  • 与脚本配对的游戏对象,如果选择了游戏对象,您应该在检查器面板中看到脚本下方的一个点。您可以将冰纹理从层次结构或项目窗格拖放到该插槽,或者单击它右侧的小圆圈,它也会拉出所有游戏对象的列表。
  • 哦,我明白了。是的,这一切都设置正确。我在下面发布了一个答案,以显示对我有用的语法。我在“开始”功能中包含了活动(假)这个有效的功能,我现在只是想弄清楚活动(真)功能将在哪里工作我试图在(-transform up)之后立即将其滑入当它应该按时间顺序出现但对我不起作用时。
【解决方案2】:

这个语法对我有用

GameObject.Find ("icetextureONfile").SetActive(false);

与 Unity 文档中的内容相反

gameObject.SetActive(false);

第一个对我有用,第二个没有。我不是一个伟大的程序员,所以也许这只是一个上下文问题。

编辑 众所周知,对象已经被SetActive(false)后,很难再SetActive(true)。这是因为附加的脚本也被停用了。有关为什么这是一场噩梦的详细信息,请参阅 Unity 论坛。

为了克服这个问题,我选择了一条不同的路线来完成同样的事情。

我将对象的大小设置为 0,直到我需要它为止。

GameObject.Find ("icetextureONfile").transform.localScale = new Vector3(0, 0, 0);

GameObject.Find ("icetextureONfile").transform.localScale = new Vector3(0.02f, 0.02f, 0.02f);

请注意,0.02 是我的对象的大小,可能与您的大小不完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多