想要实现的效果
参考蔚蓝中的分身,分身会复制玩家的操作,延迟执行。
分析
操作可以分解成 命令输入 和 效果输出 两部分。
分身的操作,可以想象成延迟操作,玩家命令输入N秒后分身才执行效果输出。
所以利用协程简单实现输入输出的延迟效果,
Update中编写输入,获取输入后开启协程,协程开始延迟N秒,然后执行输出效果。
脚本(挂在分身上)
private void Update() {
//获取输入 float horizontal = Input.GetAxisRaw("Horizontal"); float vertical = Input.GetAxisRaw("Vertical");
//开启协程(将获取到的输入传给协程方法) StartCoroutine(Move(20, new Vector2(horizontal, vertical))); } public IEnumerator Move(float moveSpeed, Vector2 vector2) { yield return new WaitForSeconds(1); //延迟1秒
//根据输入进行输出效果 Vector2 moveDirection = vector2.normalized; gameObject.GetComponent<Rigidbody2D>().velocity = moveDirection * moveSpeed; }
简单效果展示
扩展
输入操作不仅仅局限于移动指令,可扩展一些其他动作(开火等),只需要将输出延迟即可。
在执行分身的协程前进行判断,避免开启大量协程。