我有一个乐高EV3。我正在使用API在Visual Studio中使用C#。将Unity3d连接到4.0 .NET框架API visual studio程序
我试过了,它看起来像EV3一样使用unity3d的唯一方法是使用两个程序并让它们通信。
Unity使用2.0框架,所以async
功能不起作用(我敢肯定,如果任何人可以得到async
统一,那会更好)。
所以我试图使用套接字,我相信我的代码都很好,但是当我运行我的计算机时都主动拒绝连接。
防火墙关闭,以管理员身份运行。
那么我该如何解决我的套接字问题,以便我可以与unity3d进行通信,或者我如何与unity3d进行通信?
对不起,代码是多么渺茫,但这是我工作的主要代码,所以我运行这个,我控制我的机器人,但不能发送数据到我在unity3d中运行的程序。
转到通代码和// 7777777777777777777777777777777777将展示它停止,当我点击按钮3,说积极地在我的电脑拒绝
`using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Lego.Ev3.Core;
using Lego.Ev3.Desktop;
using UnityEngine;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using System.Net.Sockets;
using System.Net.Mail;
namespace leeeego
{
public class LegoMove : MonoBehaviour
{
//Brick _brick;
int _forward = 40;
int _backward = 30;
uint _time = 3000;
public float moveSpeed;
private Vector3 input;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
input = new Vector3(2, 0, 2);
//_brick = new Brick(new UsbCommunication());
// _brick.BrickChanged += _brick_BrickChanged;
// _brick.ConnectAsync();
// _brick.DirectCommand.PlayToneAsync(100, 1000, 300);
}
//private void _brick_BrickChanged(object sender, BrickChangedEventArgs e)
//{
//}
}
}
namespace TheBrick
{
public class LegoMove : MonoBehaviour
{
//Brick _brick;
int _forward = 40;
int _backward = 30;
uint _time = 3000;
public float moveSpeed;
private Vector3 input;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
//_brick = new Brick(new UsbCommunication());
// _brick.BrickChanged += _brick_BrickChanged;
// _brick.ConnectAsync();
// _brick.DirectCommand.PlayToneAsync(100, 1000, 300);
}
//private void _brick_BrickChanged(object sender, BrickChangedEventArgs e)
//{
//}
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Brick _brick;
int _forward = 50;
int _backward = 30;
uint _time = 3000;
int _x = 0;
public MainWindow()
{
InitializeComponent();
}
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
_brick = new Brick(new UsbCommunication());
_brick.BrickChanged += _brick_BrickChanged;
await _brick.ConnectAsync();
await _brick.DirectCommand.PlayToneAsync(10, 1000, 300);
TheBrick.Database1DataSet database1DataSet = ((TheBrick.Database1DataSet)(this.FindResource("database1DataSet")));
// Load data into the table Table. You can modify this code as needed.
TheBrick.Database1DataSetTableAdapters.TableTableAdapter database1DataSetTableTableAdapter = new TheBrick.Database1DataSetTableAdapters.TableTableAdapter();
database1DataSetTableTableAdapter.Fill(database1DataSet.Table);
System.Windows.Data.CollectionViewSource tableViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("tableViewSource")));
tableViewSource.View.MoveCurrentToFirst();
}
private void _brick_BrickChanged(object sender, BrickChangedEventArgs e)
{
}
private async void Move_up_Click(object sender, RoutedEventArgs e)
{
_brick = new Brick(new UsbCommunication());
_brick.BrickChanged += _brick_BrickChanged;
await _brick.ConnectAsync();
await _brick.DirectCommand.PlayToneAsync(100, 1000, 300);
}
private async void button_Click(object sender, RoutedEventArgs e)
{
await _brick.DirectCommand.TurnMotorAtPowerForTimeAsync(OutputPort.B | OutputPort.C, _forward, _time, false);
_x += 1;
//label = _x;
}
private async void button1_Click(object sender, RoutedEventArgs e)
{
int a = Score.instace.CurrentScore;
int b = 10;
if (a == b)
{
await _brick.DirectCommand.TurnMotorAtPowerForTimeAsync(OutputPort.B | OutputPort.C, _forward, _time, false);
}
}
private void textBox_TextChanged(object sender, TextChangedEventArgs e)
{
}
private async void button2_Click(object sender, RoutedEventArgs e)
{
SqlConnection cn = new SqlConnection(global::TheBrick.Properties.Settings.Default.Database1ConnectionString);
try
{
string sql = "INSERT INTO Table (moveLego,noiseLego) values(" + txtMove.Text + "," + txtNoise.Text + ")";
SqlCommand exesql = new SqlCommand(sql, cn);
cn.Open();
exesql.ExecuteNonQuery();
}
catch
{
}
finally
{
cn.Close();
}
_forward = Convert.ToInt32(txtMove.Text);
_time = Convert.ToUInt32(txtNoise.Text);
await _brick.DirectCommand.TurnMotorAtPowerForTimeAsync (OutputPort.B | OutputPort.C, _forward, _time, false);
}
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
string serverIP = "localhost";
int port = 8080;
private async void button3_Click(object sender, RoutedEventArgs e)
{
try
{
TcpClient client = new TcpClient(serverIP, port);//777777777777777777777777
int bytecount = Encoding.ASCII.GetByteCount(txtMove.Text);
byte[] sendData = new byte[bytecount];
sendData = Encoding.ASCII.GetBytes(txtMove.Text);
NetworkStream stream = client.GetStream();
stream.Write(sendData, 0, sendData.Length);
stream.Close();
client.Close();
}
catch
{
_forward = Convert.ToInt32(txtMove.Text);
_time = Convert.ToUInt32(txtNoise.Text);
await _brick.DirectCommand.TurnMotorAtPowerForTimeAsync(OutputPort.B | OutputPort.C, _forward, _time, false);
}
}
}
}`
你有什么试过?任何代码示例是什么使你陷入困境? – GoldBishop
Unity使用Mono,它是dotnet4.0的子集,但只有高达2.0的成员实现。这就是为什么linq请求工作的原因 –
您可以尝试通过类似于https://www.nuget.org/packages/AsyncBridge.Net35/的工具非正式地使用异步/等待。 –