我对C#很新,所以我还是习惯了。
我已将此代码转到我想用虚拟操纵杆控制角色的位置。我正在测试操纵杆是响应还是现在,但每次我尝试播放场景时,我都会遇到3 CS0535
个错误:
' VirtualJoystick'没有实现接口成员UnityEngine.EventSystems.IPointerUpHandler.OnPointerUp(UnityEngine.EventSystems.PointerEventData)'
' VirtualJoystick'没有实现接口成员UnityEngine.EventSystems.IDragHandler.OnDrag(UnityEngine.EventSystems.PointerEventData)'
' VirtualJoystick'没有实现接口成员`UnityEngine.EventSystems.IPointerDownHandler.OnPointerDown(UnityEngine.EventSystems.PointerEventData)'
这是代码。它相当短。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
public class VirtualJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler
{
private Image bgImg;
private Image joystickImg;
private Vector3 inputVector;
private void start()
{
bgImg = GetComponent<Image>();
joystickImg = transform.GetChild(0).GetComponent<Image>();
}
public virtual void onDrag(PointerEventData ped)
{
Vector2 pos;
if(RectTransformUtility.ScreenPointToLocalPointInRectangle(bgImg.rectTransform, ped.position, ped.pressEventCamera, out pos))
{
Debug.Log("Test");
}
}
public virtual void onPointerDown(PointerEventData ped)
{
onDrag(ped);
}
public virtual void onPointerUp(PointerEventData ped)
{
}
}
我希望你们能帮助我解决这个问题。
编辑:
我已经纠正了语法,这是导致场景无法播放的原因。但OnDrag代码上的Debug.Log无法正常工作。我收到此NullReferenceException:对象引用未设置为对象错误的实例。再一次,我只关注视频所说的内容,而且他似乎工作得很好。
答案 0 :(得分:3)
您已声明方法virtual
,因为基类已经声明它们virtual
,您必须使用override
声明它们。
所以:
public override void OnPointerUp(PointerEventData ped) { }
另请注意,使用C#,您的命名应与完全匹配,因此OnPointerUp
代替onPointerUp
。
答案 1 :(得分:1)
更正您的拼写,即onPointerDown
- &gt; OnPointerDown
。 C#区分大小写。
答案 2 :(得分:0)
当你的类从接口继承时,它应该实现在这些接口上声明的所有方法和属性。
在您的情况下,您必须在您的类中声明编译错误消息中提到的方法,尊重其参数类型和返回值,所有区分大小写。
接口旨在确保从它们继承的所有类都实现此类方法和属性。因此,您可以在不了解类本身的情况下访问这些成员。
接口不声明方法/属性修饰符(私有,公共等)。您可以根据需要指定它们。
答案 3 :(得分:-2)
idraghandler,ipointeruphandler,ipointerdownhandler按此顺序实现