Player实例化
修改Player的Prefab的Y坐标,这里改为-2。
修改SceneRoot
1 2 3 4 5 6 7 8
| public class SceneRoot : MonoBehaviour { public void Init() { var player = LoadMgr.Instance.LoadPrefabAndInstantiate(Pathes.PREFAB_PLAYER); player.AddComponent<PlayerView>(); }
|
PlayerView
在Logic——View文件夹下新建PlayerView
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| using UnityEngine;
public class PlayerView : PlaneView { private readonly float _startY = -2.0f; public override void Init() { InitPos(); InitSprite(); InitComponent(); } private void InitComponent() { var reader = ReaderMgr.Instance.GetReader(Pathes.INIT_PLANE_CONFIG); reader["planeSpeed"].Get<float>(speed => { var moveCo = gameObject.AddComponent<MoveComponent>(); moveCo.Init(speed); gameObject.AddComponent<PlayerController>(); gameObject.AddComponent<CameraMove>(); }); } private void InitPos() { var pos = transform.position; pos.y = _startY; transform.position = pos; } private void InitSprite() { var spriteRenderer = GetComponent<SpriteRenderer>(); int id = GameStateModel.Instance.SelectedPlaneId; int level = GameStateModel.Instance.PlaneLevel; var sprite = PlaneSpritesModel.Instance[id, level]; spriteRenderer.sprite = sprite; } }
|
这里把Player初始化的Y坐标直接写在变量里了,正常情况下应该写在配置文件中。
这里的MoveComponent
和新加的配置在下一节介绍。只有添加了移动组件才能使用PlayerController
控制飞机,所以这里把两个组件的添加都放到回调里面。
PlayerController
在Logic文件夹中新建Player文件夹,并在其中新建PlayerController
脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| using UnityEngine;
public class PlayerController : MonoBehaviour { private MoveComponent _moveCo; void Start() { _moveCo = GetComponent<MoveComponent>(); InputMgr.Instance.AddKeyListener(KeyCode.W); InputMgr.Instance.AddKeyListener(KeyCode.A); InputMgr.Instance.AddKeyListener(KeyCode.S); InputMgr.Instance.AddKeyListener(KeyCode.D);
MessageMgr.Instance.AddInputLintener(KeyCode.W, InputState.PRESS, ReceiveW); MessageMgr.Instance.AddInputLintener(KeyCode.S, InputState.PRESS, ReceiveS); MessageMgr.Instance.AddInputLintener(KeyCode.A, InputState.PRESS, ReceiveA); MessageMgr.Instance.AddInputLintener(KeyCode.D, InputState.PRESS, ReceiveD); } private void OnDestroy() { InputMgr.Instance.RemoveKeyListener(KeyCode.W); InputMgr.Instance.RemoveKeyListener(KeyCode.A); InputMgr.Instance.RemoveKeyListener(KeyCode.S); InputMgr.Instance.RemoveKeyListener(KeyCode.D);
MessageMgr.Instance.RemoveInputLintener(KeyCode.W, InputState.PRESS, ReceiveW); MessageMgr.Instance.RemoveInputLintener(KeyCode.S, InputState.PRESS, ReceiveS); MessageMgr.Instance.RemoveInputLintener(KeyCode.A, InputState.PRESS, ReceiveA); MessageMgr.Instance.RemoveInputLintener(KeyCode.D, InputState.PRESS, ReceiveD); } void ReceiveW(params object[] args) { _moveCo.Move(Vector2.up); } void ReceiveS(params object[] args) { _moveCo.Move(Vector2.down); } void ReceiveA(params object[] args) { _moveCo.Move(Vector2.left); } void ReceiveD(params object[] args) { _moveCo.Move(Vector2.right); } }
|
这里的MoveComponent
在下一节介绍