unity通过枚举管理不同方法控制器,要求方法可以传入不同参数
时间: 2023-08-04 12:38:25 浏览: 57
可以使用枚举类型和函数委托来实现根据不同的枚举值调用不同的方法,并且这些方法可以传入不同的参数。以下是示例代码:
```csharp
public enum ControlType {
Move,
Rotate,
Scale
}
public delegate void ControlAction(Vector3 direction, float speed);
public void DoControl(ControlType controlType, Vector3 direction, float speed) {
ControlAction controlAction = null;
switch (controlType) {
case ControlType.Move:
controlAction = Move;
break;
case ControlType.Rotate:
controlAction = Rotate;
break;
case ControlType.Scale:
controlAction = Scale;
break;
default:
Debug.LogError("Unknown control type: " + controlType);
break;
}
controlAction?.Invoke(direction, speed);
}
private void Move(Vector3 direction, float speed) {
transform.Translate(direction * speed * Time.deltaTime);
}
private void Rotate(Vector3 direction, float speed) {
transform.Rotate(direction * speed * Time.deltaTime);
}
private void Scale(Vector3 direction, float speed) {
transform.localScale += direction * speed * Time.deltaTime;
}
```
在上面的代码中,我们定义了一个枚举类型 ControlType 和一个函数委托 ControlAction。在 DoControl 方法中,我们根据传入的 ControlType 枚举值选择要调用的方法,并通过函数委托 ControlAction 来传入不同的参数。例如,当传入 ControlType.Move 时,我们会调用 Move 方法,并传入 direction 和 speed 作为参数。
需要注意的是,由于枚举类型可能有未知的值,我们在选择要调用的方法时需要加入对未知值的判断,以避免出现错误。同时,在调用函数委托时需要加上 null 判断,以避免出现空引用异常。