我正在阅读一个Kudan for Unity exaple项目 (Kudan是AR的框架)
在文件KudanTracker.cs中,他们使用名为 _trackerPlugin 的 TrackerBase 对象
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace Kudan.AR
{
[DisallowMultipleComponent]
[RequireComponent(typeof(Camera))]
[AddComponentMenu("Kudan AR/Kudan Tracker")]
public class KudanTracker : MonoBehaviour
{
protected TrackerBase _trackerPlugin;
public bool ArbiTrackIsTracking()
{
return _trackerPlugin.ArbiTrackIsTracking();
}
...
}
所以我转到 TrackerBase.cs 看看 ArbiTrackIsTracking()的实现,但我找到的就是:
using UnityEngine;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace Kudan.AR
{
/// <summary>
/// Base class for the tracker plugin. This abstracts the native plugin for each operating system.
/// </summary>
public abstract class TrackerBase : ITracker
{
public abstract bool ArbiTrackIsTracking ();
...
}
}
如何调用从未实现的方法?
实施隐藏在哪里?
谢谢
答案 0 :(得分:2)
他们可能会处理它,就像微软处理XmlReader
:
您正在为正在使用的对象使用派生类,但是通过其基类访问它。
在XmlReader
中它是这样的:
XmlReader reader = XmlReader.Create("something");
然后你可以通过
读取xml文件中的每个元素reader.Read();
但正如您所见,XmlReader.Read()
甚至未实施:Source
相反,XmlReader.Create()
创建一个XmlTextReader
,它继承自XmlReader并实现所有内容,尤其是如何处理Read()
。
我猜他们在插件中也是这样做的。请参阅API中所述的API&#34;在Tracker中实施&#34; KudanAR - Unity Plugin V1.4
答案 1 :(得分:0)
在没有任何实现的情况下调用抽象方法是不可能的。
正如TrackerBase类的评论所说,Tracker类对于每个操作系统都是不同的,所以寻找TrackerWin.cs或类似的东西
答案 2 :(得分:0)
这是完全正常的。
此类行为是正常的, IF 该类已使用非抽象版本的Trackerbase正确实例化。
但是,您没有提供相关的实例化代码,因此我无法验证您提供的代码示例是否已正确实例化,而我自己无法获取该代码。
理论上,实例化代码可能看起来像这样:
{{1}}
IF 代码有适当的实例化,如上所述,你很好。