如何将ZeroMQ导入Unity引擎?

时间:2018-12-20 00:13:32

标签: visual-studio unity3d zeromq

我正在尝试为Unity中的项目导入ZeroMQ库。我正在使用C#和Visual Studio进行编辑。我使用NuGet将ZeroMQ导入到Visual Studio中,但是当我尝试运行游戏时出现错误

Severity    Code    Description Project File    Line    Suppression State
Error   CS0246  The type or namespace name 'ZeroMQ' could not be found (are you missing a using directive or an assembly reference?)    Assembly-CSharp C:\Users\<me>\OneDrive\Documents\UrBalls\Assets\Scripts\PlayerController.cs 4   Active

控制器文件来自教程:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZeroMQ;

public class PlayerController : MonoBehaviour
{
    public float speed;
    private Rigidbody rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();     
    }


    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        System.Console.WriteLine("Hey");
        rb.AddForce(movement * speed);
    }

    // Update is called once per frame
    void Update()
    {        
    }
}

如何让编译器查看该软件包?感激!

1 个答案:

答案 0 :(得分:1)

我没有测试这是否真的有效,但是我能够克服您在这里遇到的错误...

1)如果您从NuGet(metadings软件包)安装了最佳结果,则将其卸载并尝试使用“ clzmq”软件包(或64位版本)。

2)从以下位置复制DLL: 'C:\ Users \ .nuget \ packages \ clrzmq \ 2.2.5 \ lib'& 'C:\ Users \ .nuget \ packages \ clrzmq \ 2.2.5 \ content'  到Unity项目的“资产”文件夹。

3)在您的脚本中,切换“使用ZeroMQ;”到“使用ZMQ;”

此时您应该可以运行。

我没有尝试通过元数据从第一个“ ZeroMQ”程序包中复制DLL,因此您可以尝试使用。我会先尝试clzmq,如果它不符合您的需求,请再给metadings。您还必须使用4.0框架支持配置Unity才能使用metadings包。

更新: 我最终对此进行了测试。我必须使用x64版本,但是它可以工作。这是完整的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Text;
using ZMQ;

public class mqtest : MonoBehaviour
{
    public float speed;
    private Rigidbody rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }


    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        System.Console.WriteLine("Hey");
        rb.AddForce(movement * speed);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown("space"))
        {
            print("space key was pressed");
            string endpoint = "tcp://127.0.0.1:5555";

            // ZMQ Context and client socket
            using (ZMQ.Context context = new ZMQ.Context())
            using (ZMQ.Socket client = context.Socket(SocketType.REQ))
            {
                client.Connect(endpoint);
                string request = "Hello";
                client.Send(request, Encoding.UTF8);
            }
        }
    }
}