【问题标题】:Making GameObject appear and disappear for a finite amount of time使游戏对象在有限的时间内出现和消失
【发布时间】:2015-10-09 13:54:57
【问题描述】:

我正在尝试让 GameObject 在有限的时间内出现和消失(让我们暂时搁置时间函数)。

这是我得出的结论:

using UnityEngine;
using System.Collections;

public class Enemy1Behavior : MonoBehaviour
{
    // Use this for initialization
    void Start ()
    {
    }

    // Update is called once per frame
    void Update ()
    {
        this.gameObject.SetActive(false); // Making enemy 1 invisible
        Debug.Log("Update called");
        DisappearanceLogic(gameObject);
    }

    private static void DisappearanceLogic(GameObject gameObject)
    {
        int num = 0;
        while (num >= 0)
        {
            if (num % 2 == 0)
            {
                 gameObject.SetActive(false);
            }
            else
            {
                 gameObject.SetActive(true);
            }
            num++;
        }
    }
}

现在当我点击Unity中的播放按钮时,程序只是没有响应,我只能使用End Task从任务管理器中退出。

(是的,我知道该方法中有一个无限循环)。

所以我猜我做错了什么。在Unity 中制作Gameobject Blink/Flash/appear-disappear 的最佳方法是什么?

谢谢大家。

【问题讨论】:

  • 去掉while循环,把num变量放到class级别,但是会太快看到。
  • @Catwood 所以如果 num%100 = 2。我会试一试。
  • 用 100 代替 2 的好主意

标签: c# unity3d gameobject


【解决方案1】:

您正在使用一个无限循环,它会完全锁定您的 Update(),因为 num 总是大于 0。

所以你可以使用 InvokeRepeating (http://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html)

public GameObject gameobj;

void Start()
{
    InvokeRepeating("DisappearanceLogic", 0, interval);
}

void DisappearanceLogic() 
{
     if(gameobj.activeSelf) 
     {
         gameobj.SetActive(false);
     }
     else
     {
         gameobj.SetActive(true);
     }
}

interval 是一个浮点数 - 类似于 1f 0.5f 等。

【讨论】:

  • 就是Trying to Invoke method: GameObject.Disappearance couldn't be called
  • 你去掉DisapperanceLogic()的参数了吗?此外,例如,您必须在 Start 函数中设置 object 变量。
  • 但是我需要那个参数。这个脚本是为了让这个GameObject出现和消失,反之亦然。
  • 你没有。将游戏对象添加为属性并使用它。似乎您总是使用附加了此代码的游戏对象。
  • 我应该在开始时使用 gameObject = GetComponent()?
【解决方案2】:

您可以制作闪烁动画等 - Animations in Mecanim。使用gameObject.SetActive(true/false); 可以实现出现和消失。如果你想随着时间的推移做一些事情,最好使用Coroutines 或者只是使用延迟参数调用 - Invoke Unity Docs

【讨论】:

  • 请让我们暂时离开。但是我尝试在问题的示例代码中使用 SetActive() 方法,但没有成功。
  • 如果ogameObject 被禁用,附加到该对象的脚本也将被禁用。例如,您可以制作一个附加脚本的根对象并添加将成为您的主要对象的子对象。或者,如果您只需要隐藏 GFX,您也可以禁用 Renderer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多