如何检查bool或调用Unity脚本中的函数在Windows应用程序解决方案方面
本文关键字:函数 Windows 方面 解决方案 应用程序 脚本 Unity 何检查 检查 调用 bool | 更新日期: 2023-09-27 18:09:40
我需要通过检查unity脚本中的布尔值来调用Windows Store应用程序端的函数。如何做到这一点,我使用这个代码,但它给出了错误。我只需要一个简单的解决方案,其中我检查在unity脚本中声明的bool在移植的windows store应用程序端调用函数
using System;
using UnityEngine;
public class SphereScript : MonoBehaviour
{
private bool m_IsMoving = true;
private bool m_IsMovingLeft = false;
public Camera GameCamera;
public event Action<bool> SphereStateChanged;
public bool IsSphereMoving { get { return m_IsMoving; } }
void Start()
{
if (GameCamera == null)
{
throw new Exception("Camera is not attached to the sphere script!");
}
}
void FixedUpdate()
{
if (!m_IsMoving)
{
return;
}
if (m_IsMovingLeft)
{
transform.position -= new Vector3(0.2f, 0.0f);
if (GameCamera.WorldToScreenPoint(transform.position).x < 100.0f)
{
m_IsMovingLeft = false;
}
}
else
{
transform.position += new Vector3(0.2f, 0.0f);
if (GameCamera.WorldToScreenPoint(transform.position).x > Screen.width - 100.0f)
{
m_IsMovingLeft = true;
}
}
}
void OnGUI()
{
var buttonText = m_IsMoving ? "Stop sphere" : "Start sphere movement";
if (GUI.Button(new Rect(0, 0, Screen.width, 40), buttonText))
{
m_IsMoving = !m_IsMoving;
if (SphereStateChanged != null)
{
SphereStateChanged(m_IsMoving);
}
}
}
}
完整的代码在这里
我理解你的问题的方式是,当某些事情发生在Unity端时,你想调用Windows Store应用端上的方法,对吗?
一个很好的方法是在你的Unity代码中添加一个事件,你的Win代码可以注册。在本例中,我将把您的事件命名为ButtonClicked
。
首先你需要一个静态类,事件将在其中。在Unity Assets文件夹中创建一个新的c#脚本并打开它。我把我的调用为StaticInterop。清除生成的代码,并使其如下:
public class StaticInterop
{
public static event EventHandler ButtonClicked;
public static void FireButtonClicked()
{
if (ButtonClicked != null)
{
ButtonClicked(null, null);
}
}
}
现在,在Unity中,无论何时发生这种情况(在这种情况下,当按钮被点击时),执行这行代码:
StaticInterop.FireButtonClicked();
这是Unity方面所做的一切。所以创建一个构建,并打开它创建的VS Windows Store应用程序项目。
在Win代码中,你现在可以像这样报名参加活动:
StaticInterop.ButtonClicked+= StaticInterop_ButtonClicked;
并声明该方法以使其运行:
void StaticInterop_ButtonClicked(object sender, EventArgs e)
{
// Do whatever you need here.
}
重要的是要注意StaticInterop
静态类显示在您的Win代码中。这意味着你可以使用它在Unity和Win端之间传输任何内容。您甚至可以在类中有一个名为PauseGame()
的方法,然后在Win端使用StaticInterop.PauseGame()
运行该方法。