所以我试着用不同的单位类型制作一个游戏,每一个都有不同的运动速度。我真的不知道如何面对这个问题:起初,我在每个unitType上都做了一个函数来定义速度,但我不认为这是最理想的方法。现在,我正在考虑创建一个MovementController类。这就是我到目前为止所做的工作:首先,我做了一个通用的Unit -to,保持它很简单,我将只显示运动速度属性-:
public class GenericUnit : MonoBehaviour
{
float movementSpeed;
public float mspeed
{
get { return movementSpeed; }
set { movementSpeed = value; }
}
}之后,我根据单元类型在subClass中定义了所有属性:
public class Archer : MonoBehaviour
{
GenericUnit archer;
void Start()
{
archer = new GenericUnit();
archer.mspeed = 3.0f;
}
}这就是我现在的运动控制器:
public class Movement_Controller : MonoBehaviour
{
GenericUnit msUnit;
public float mspeed;
public bool movimentTrue;
void Start()
{
msunit = new GenericUnit();
mspeed = msUnit.mspeed;
movimentTrue = true;
}
void Update()
{
if (movimentTrue) {
Movement();
}
}
public void Movement(){
Vector3 moviment = new Vector3 (1.0f, 0.0f, 0.0f);
transform.position += Time.deltaTime * mspeed * moviment;
}
}毕竟,这不管用。你知道这是怎么回事吗?我一直在尝试许多其他的选择,但都没有成功。您认为让这个MovementController脚本或者在Archer类上粘贴移动函数更好吗?正如你所看到的,我是编程新手,所以任何建议都会有很大帮助。
谢谢
发布于 2020-11-16 09:38:33
您要寻找的是简单的继承。描述基类中需要的特性,并标记它们(和类) 摘要。这迫使您在所有非抽象派生类中重写它。
基类:
public abstract class BaseUnit : MonoBehaviour
{
protected abstract float movementSpeed { get; } // force every deriving class to provide a movement speed
[SerializeField] private bool isMoving;
void Start()
{
isMoving = true;
}
void Update()
{
if (isMoving)
{
Movement();
}
}
public void Movement()
{
Vector3 direction = new Vector3(1.0f, 0.0f, 0.0f);
transform.position += Time.deltaTime * movementSpeed * direction;
}
}派生类Archer:
public class Archer : BaseUnit
{
protected override float movementSpeed => 3F;
}还请注意,您不能使用MonoBehaviours关键字创建new。您必须使用AddComponent<T>创建或使用GetComponent<T>检索它们(见文件)。
https://stackoverflow.com/questions/64854889
复制相似问题