我在Unity项目中第一次使用接口。我试图让这些clas实现Move()方法。应该很容易,但它不起作用。我已经尝试了所有的Microsoft页面和一些类似的问题,但没有找到相同的问题。
using UnityEngine;
using System.Collections;
public interface IMover {
float Move();
}
public class Move_1 : Mover {
public float moveSpeed = 1;
public float energyConsumption = 0.1;
float Move(Vector2 vec,Rigidbody2D rb){
rb.AddForce (vec * moveSpeed);
return energyConsumption * vec.magnitude;
}
}
我确信我错过了一些明显的东西。我尝试了IMover.Move()
和
public float Mover(
但没有任何效果。不是一边,我对带接口的可见性修饰符有点困惑。接口没有可见性修饰符,所以我认为它将是实现的一部分。我可能会混淆隐式和显式声明。
答案 0 :(得分:1)
您的界面定义了一种方法
public interface IMover
{
float Move();
}
这意味着实现此接口的任何类都必须具有名为Move且不带参数的公共方法,并且返回float
public class SomeClass : IMover
{
public float Move()
{
// some code
return someFloat;
}
}
你所拥有的课程没有实现界面,虽然这可能是一个错字。
您可以愉快地在类中创建方法重载,但您还必须在界面中定义签名,以便以下内容有效
public class SomeClass : IMover
{
public float Move() { /* implement */ }
public float Move(float f) { /* implement */ }
}
但是,以下(与您的情况类似)无效,因为它没有接口IMover
的合同定义的方法
public class SomeClass : IMover
{
public float Move(float f) { /* implement */ }
}
根据您的评论,您需要做的就是修改您的界面:
public interface IMover
{
float Move(Vector2 vec, Rigidbody2D rb);
}
并确保您在班级中将该方法声明为公开。
答案 1 :(得分:1)
这是你想要做的吗?
using UnityEngine;
using System.Collections;
public interface IMover {
float Move();
}
public class Move_1 : IMover {
private Vector2 vec;
private Rigidbody2D rb;
public float moveSpeed = 1;
public float energyConsumption = 0.1;
public Move_1(Vector2 vec,Rigidbody2D rb){
this.vec = vec;
this.rb = rb;
}
float Move(){
this.rb.AddForce (this.vec * moveSpeed);
return energyConsumption * vec.magnitude;
}
}