小编Pro*_*mer的帖子

在单个脚本中同时具有IEnumerator Start()和void Start()

我有一个来自Unity文档页面的示例程序,其中包含IEnumerator Start()如下所示,但我想知道如何void Start()在同一个脚本中也能正常运行?

我也尝试添加void Start()它,但它引发了一个错误.然后,我试着在一个IEnumerator函数中包含我的代码(它只是写入控制应用程序的数据路径),虽然通过使用0f延迟参数立即执行它,但它不会打印出任何东西......

我错过了什么?这种情况的常见解决方案是什么,你必须有一个IEnumerator Start()但你还需要执行启动代码?

/// Saves screenshots as PNG files.
public class PNGers : MonoBehaviour
{

    // Take a shot immediately.
    IEnumerator Start()
    {
        yield return UploadPNG();
        yield return ConsoleMSG();
    }

    IEnumerator UploadPNG()
    {
        // We should only read the screen buffer after frame rendering is complete.
        yield return new WaitForEndOfFrame();

        // Create a texture the size of the screen, with RGB24 format.
        int width …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine

2
推荐指数
1
解决办法
1202
查看次数

Unity输入在印刷机中多次检测到

我有一个MonoBehavior使用这些方法的源脚本:

private void Update () {
    if (Input.GetMouseButton(0)) {
        HandleInput();
    }
}

private void HandleInput () {
    Ray inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if (Physics.Raycast(inputRay, out hit)) {
        var position = transform.InverseTransformPoint(hit.point);
        Coordinates coords = Coordinates.FromPosition(position);
        HexCell cell = null;        
        if (!cells.TryGetValue(coords, out cell)) {
            var err = string.Format("{0} is an invalid position and coordinates are improperly calculated: {1}", position, coords);
            print(err);

            throw new System.ArgumentException(err);
        }

        print(string.Format("[{0}] cell: [{1}] {2}", DateTime.Now, cell.id, cell.coordinates));
        OnCellTouched(cell);
    }
}
Run Code Online (Sandbox Code Playgroud)

网格是透明的,我按预期得到六边形(单元格).在编辑器中,当我单击一个单元格时,我得到一条消息输出:

[05.31.2017.14.15.14.2836] …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine

2
推荐指数
1
解决办法
2289
查看次数

按名称,标签或图层查找非活动的GameObject

首先,我需要停用一个游戏对象,然后在10秒后激活它,所以我认为协同程序是合适的:

IEnumerator BarDeactivate(float sec)
{
        yield return new WaitForSeconds(sec);

        var obj = GameObject.Find("OBJ");
        obj.SetActive(false);
}

IEnumerator BarReactivate(float sec)
{
        yield return new WaitForSeconds(sec);

        var obj = transform.Find("OBJ");
        obj.SetActive(true);
}
Run Code Online (Sandbox Code Playgroud)

显然,我不能再使用,GameObject.Find所以我用它transform.Find来找到不活跃的游戏对象,但当然.SetActive现在不行,因为obj实际上并不是游戏对象...

如何投射找到的变换,以便可以再次设置它?

我试过obj.gameObject.SetActive(true)但它一定是错的,因为这个物体不会复活......

c# unity-game-engine

2
推荐指数
1
解决办法
4944
查看次数

我应该使用什么来代替 OnMouseXXX 事件处理程序?

我已经构建了一个小应用程序,我在某些对象中使​​用 OnMouseDrag 和 OnMouseDown。我认为这将是最好的选择,因为这种方法在 Update 方法之外。然而,在编译应用程序时,Unity 表示“游戏脚本或其他自定义代码包含 OnMouseXXX 事件处理程序。此类处理程序的存在可能会影响手持设备的性能。”

那么...我应该使用什么来代替 OnMouseDrag 和 OnMouseDown?

我已经看到我可以使用 Input.GetMouseButtonDown。但是要做到这一点,我必须向每个具有 OnMouseDown 的对象添加一个 Update 方法。是不是比拥有 OnMouseDrag 更糟糕?

而且,为什么 OnMouseXXX 事件对手持设备的性能不利?

c# performance android input unity-game-engine

2
推荐指数
1
解决办法
857
查看次数

检查变量何时等于另一个值的更好方法

我有一个变量,我需要在游戏运行时经常检查.为了简化这一点,检查是:if (score >= achievement1) {do something}.

把这个检查放在Update()每帧调用的函数中似乎有点过分了.

所以相反,我在InvokeRepeating函数中调用Start ();函数:

InvokeRepeating ("checkscoreforachievement", 0f, 2f);
Run Code Online (Sandbox Code Playgroud)

这样聪明还是有更好的方法呢?最终结果应该是在达到一定分数后的几秒钟内,触发成就.

我问的原因是,当我的游戏运行时,我还需要做更多的事情,所以我最终会选择其中的一些进程.想知道这是不是太多的资源消耗.找不到关于这个主题的好文档.

c# unity-game-engine

2
推荐指数
1
解决办法
79
查看次数

无法加载,因为已经加载了另一个具有相同文件的 AssetBundle

我想在 AR 相机中播放视频。我总共有 10 个视频和一个视频播放器。我正在从服务器下载视频播放器作为资产包,名称为 videoplayer.unit3d 并存储到 SD 卡中。当我扫描 imageTarget 时,我正在使用AssetBundle.LoadFromFile()函数读取视频资产包文件,并且第一次它工作正常。

如果我扫描第二个 imageTarget 它会显示以下错误

“无法加载,因为已经加载了另一个具有相同文件的 AssetBundle”

我试过 a bundle.Unload(true);andCaching.cleanchache()但它不工作抛出同样的错误。也试过bundle.Unload(false);

 private void loadObject(string resourcePath, string objectName, TrackableBehaviour trackableBehaviuor, string videoUrl)
    {

        Debug.Log("Resource path " + resourcePath + " objectName " + objectName);

        Debug.Log("Video Url from sd card   " + videoUrl);

        FileInfo fileInfo = new FileInfo(resourcePath);

        if (!fileInfo.Exists)
            return;


        Debug.Log("File is present");
        AssetBundle bundle = AssetBundle.LoadFromFile(resourcePath, 0, 0);//www.assetBundle;


        Debug.Log("Bundle data is  " + bundle);
        if (bundle …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine assetbundle

2
推荐指数
1
解决办法
1万
查看次数

如何在 Unity 检查器中根据其他变量值隐藏变量

我如何根据统一检查器中的其他变量值隐藏变量。基本上想象一下:如果我有一个名为“CanSprint”的布尔值和一个名为“SprintSpeed”的浮点数,那么我想这样做,以便当布尔值为真时,浮点数显示,但当布尔值为假时,浮点数隐藏。这只是为了更整洁一点。谢谢!

c# unity-game-engine inspector

2
推荐指数
1
解决办法
2万
查看次数

没有互联网时 WWW 冻结

我正在 Unity 中编写一个简单的代码,以检查我是否能够通过我的应用程序访问网站。这是我写的代码:

IEnumerator CheckInternetPing()
{
    WWW wwwInternet = new WWW("http://google.com");
    yield return wwwInternet;
    if (wwwInternet.bytesDownloaded == 0)
    {
        //yield return new WaitForSeconds(1f);
        Debug.Log("Not Connected to Internet");
    }
    else
    {
        Debug.Log("Connected to Internet");
        internetMenu.SetActive(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现了一个错误,如果我在互联网上运行它,它会显示“已连接”,但是当我关闭互联网并立即运行该应用程序时,它不会记录任何内容。仅当我再次重新启动应用程序时,它才会显示“未连接”。有谁知道为什么它在第一次没有记录任何内容?谢谢

c# httprequest unity-game-engine

2
推荐指数
1
解决办法
1009
查看次数

将 Texture2D 转换为 OpenCV Mat?

有一篇关于将 OpenCV 转换为Unity的帖子,我提供了一个效果很好的答案。现在,我正试图做相反的事情,但现在已经坚持了几个小时。cv::MatTexture2D

我想将 Unity 转换Texture2D为 OpenCV,cv::Mat以便我可以在 C++ 端处理纹理。

这是Texture2D我要转换为 Unity 项目中的原始文件cv:Mat

在此处输入图片说明

这是转换成后的样子cv:Mat

在此处输入图片说明

它看起来很褪色。我不担心图像的旋转。我可以解决这个问题。只是想知道为什么它看起来如此褪色。也用于cv::imwrite保存图像以进行测试,但问题也出现在保存的图像中。

C# 代码

[DllImport("TextureConverter")]
private static extern float TextureToCVMat(IntPtr texData, int width, int height);

unsafe void TextureToCVMat(Texture2D texData)
{
    Color32[] texDataColor = texData.GetPixels32();
    //Pin Memory
    fixed (Color32* p = texDataColor)
    {
        TextureToCVMat((IntPtr)p, texData.width, texData.height);
    }
}

public Texture2D tex;

void Start()
{
    TextureToCVMat(tex);
}
Run Code Online (Sandbox Code Playgroud)

C++ 代码

DLLExport …
Run Code Online (Sandbox Code Playgroud)

c# c++ opencv unity-game-engine

2
推荐指数
1
解决办法
3361
查看次数

Unity:什么在我的函数中分配内存?

我对内存和优化比较陌生。我的任务是优化一个现有项目,在查看 Unity 中的分析器时,我发现有一个函数会生成一堆东西供 GC 清理。

该函数是这样的:

public bool AnyCanvasOpen()
{
    for (int i = 0; i < canvasList.Count; i++)
        if (canvasList[i].activeSelf && canvasList[i].name != "MainUICanvas")
            return true;

    return false;
}
Run Code Online (Sandbox Code Playgroud)

其中 canvasList 只是游戏对象的列表。我的 282B 分配可能是什么原因?

c# memory arrays string unity-game-engine

2
推荐指数
1
解决办法
1080
查看次数