我需要知道有多少非持久侦听器被添加到 UnityEvent。
似乎没有方法在 UnityEvent 类中给我这个数字。我只能获得持久侦听器计数(从编辑器或使用 UnityEvent.AddPersistentListener() 添加的那些)。我想出的唯一解决方案是创建一个子类并使用注册计数覆盖该函数。
这是一个显示问题的简短代码:
private UnityEvent myEvent;
private void MyFunctionToHook()
{
// func logic
}
private void MyInitialisation()
{
myEvent.AddListener(MyFunctionToHook);
myEvent.AddListener(MyFunctionToHook);
myEvent.AddListener(MyFunctionToHook);
// here, I need to know how much hooks were added.
// ??
}
Run Code Online (Sandbox Code Playgroud)
1)您对我如何设法在本地跟踪此信息有任何想法吗?
2)我这样做对吗?想知道这些信息有错吗?
无法访问此信息似乎很奇怪,因为它可能在单元测试/警告中很有用...等
谢谢你的时间。
这是 unityEvent 文档:https ://docs.unity3d.com/ScriptReference/Events.UnityEvent.html
[编辑] 到目前为止我发现的唯一解决方案如下:
public class TrackingUnityEvent<T0> : UnityEvent<T0>
{
private int nonPersistentListenersCount;
public int GetNonPersistentEventCount()
{
return nonPersistentListenersCount;
}
public void AddNonPersistantListener(UnityAction<T0> call)
{
AddListener(call);
nonPersistentListenersCount++;
}
public void RemoveNonPersistantListener(UnityAction<T0> call)
{ …Run Code Online (Sandbox Code Playgroud) 我目前正在探索 Xcode/Swift/Objective-C;这个问题对于有经验的用户来说可能是无稽之谈,如果不相关,将被删除。
操作系统版本: MacOS Sierra 10.13.5
Xcode 版本: 9.4.1
我创建了一个 Bundle(它只包含一个 .h 和 .mm),针对 iOS 平台。我想使用“嵌入式二进制文件”列表在其中添加一个框架,但目前只有“链接框架和库”。
我所做的 ->在我的项目中创建了一个“Framework”文件夹并在其中添加了“.framework”。然后.framework已添加到“链接的框架和库”中
为什么 Xcode 不显示“嵌入式二进制文件”选项?
是否应该使用另一种方法来添加“.framework”?
目前正在尝试在Unity上为iOS框架创建一个包装器.
我制作了一个.bundle,包含基本的Objective-c代码:
sample.h:
#import <Foundation/Foundation.h>
extern "C"
{
void SampleFunction(); // this is going to call already bridged swift or objc code
}
Run Code Online (Sandbox Code Playgroud)
sample.mm:
#import "Sample.h"
#import <SDK/SDKFunctions.h>
void SampleFunction()
{
// my sweet functions calls
}
Run Code Online (Sandbox Code Playgroud)
SDK作为.framework包含在包中(在"链接的框架和库"中引用).捆绑目标是iOS.
捆绑包成功构建.
捆绑包位于Unity中的"Assets/Plugins/iOS"下,标记为"iOS"和"添加到嵌入式二进制文件"
然后,在Unity中,有一个简单的C#脚本调用SDK函数:
sample.cs
public class BundleImportSample : MonoBehaviour {
#if UNITY_IOS
[DllImport("__Internal")]
private static extern void SampleFunction();
#endif
void Start()
{
#if UNITY_IOS
SampleFunction();
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
当我在编辑器中测试此代码时,我收到以下错误:
EntryPointNotFoundException:SampleFunction
如果我在iOS上构建生成的项目,我会遇到类似的问题:
ld:找不到架构arm64的符号
注意:我使用以下教程作为指导:http://blog.mousta.ch/post/140780061168
为什么在__Internal中找不到SampleFunction()?
我宁愿实现一个非友元函数并直接将该函数标记为虚拟。
但我现在的情况是,我想确保一组特定的类实现重载
friend std::ostream& operator << (std::ostream& os, MyClass& myClass);
Run Code Online (Sandbox Code Playgroud)
我发现没有其他方法可以将其直接链接到我的班级。(实施运算符的其他可能性是将其移到我的班级之外,没有朋友)
各位语法大佬,我有什么方法可以正确执行这个规则吗?(让孩子重写 << ostream 运算符)
编辑 - 以下线程的相关主题: