Unity闲谈2D游戏的角色跟随,角色队列的实现

Posted Moenen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity闲谈2D游戏的角色跟随,角色队列的实现相关的知识,希望对你有一定的参考价值。

贴吧传送门:http://tieba.baidu.com/p/4295282467


· 实现效果

(GIF,但愿能动)



· 什么是角色队列?

所谓角色队列,就是多个角色按照贪吃蛇的走法,沿着前面角色的路线行走,从而形成的队列。这种东西经常出现在日式RPG游戏中,新手们把这个逻辑看成“走到离目标XX距离时停止”,实现后却事与愿违,今天就来说说这种逻辑到底怎么实现。


· 代码下载

FollowMovement.cshttp://download.csdn.net/detail/u011771335/9399239


· 实现思路

1、实时检测目标的位置,若 目标现在的位置与上次检查时的位置 的距离大于已知float _gap,就把现在的值add到List<位置>中。
2、实时检测List的count,只要count大于已知float _stopCount,就让自己走向List[0]记载的位置。
3、细节无需讨论。。。


· 代码截图

全部逻辑只需这个代码,挂载到跟着别人走的东西上,把被跟随的目标的Transform拖拽到public Transform Target;上即可。


------------------------------------------在这里复制代码--------------------------------

using UnityEngine;
using System.Collections;
using System.Collections.Generic;


[RequireComponent(typeof(Rigidbody2D))]


public class FollowMovement : MonoBehaviour


public Transform TargetTF; //要跟随的目标
public float RecordGap = 0.2f; //目标移动多远记录一次距离
public float StopCount = 2f; //记录还剩多少时停止移动
public float WalkSpeed = 10f; //走速度
public float RunSpeed = 20f; //跑速度
public float SpeedLerpRant = 0.1f; //速度变化的缓动率
public float StartRunCount = 5f; //距离目标多远后开始跑(单位是List的Item数)
public bool Running
get return PosList.Count > StartRunCount;
set



private Rigidbody2D Rig;
private List<Vector2> PosList = new List<Vector2>();


void Awake ()


Rig = GetComponent<Rigidbody2D>();
Rig.constraints = RigidbodyConstraints2D.FreezeRotation;
Rig.gravityScale = 0f;







void OnDisabled()
//失去意识时清空记录
PosList.Clear();





void FixedUpdate()

if (TargetTF)
//清除已经到达的点
while (PosList.Count > 0 && Vector2.Distance(transform.position, PosList[0]) < RecordGap)
PosList.RemoveAt(0);

if (PosList.Count > 0)
//添加当前Target位置
if (Vector2.Distance(TargetTF.position, PosList[PosList.Count - 1]) > RecordGap)
PosList.Add(TargetTF.position);

//处理移动
if (PosList.Count > StopCount)
Rig.velocity = Vector2.Lerp(Rig.velocity, new Vector2(
PosList[0].x - transform.position.x,
PosList[0].y - transform.position.y
).normalized * (Running ? RunSpeed : WalkSpeed), SpeedLerpRant);
else
Rig.velocity = Vector2.Lerp(Rig.velocity, Vector2.zero, SpeedLerpRant);

else
PosList.Add(TargetTF.position);














----------------------------------------代码结束-----------------------------------------

以上是关于Unity闲谈2D游戏的角色跟随,角色队列的实现的主要内容,如果未能解决你的问题,请参考以下文章

[Unity3D/2D]实现相机对人物角色的跟随效果/相机在一定范围内移动/内置插件实现

100个 Unity实用技能| 游戏中使技能或装备跟随角色环绕,持续旋转

100个 Unity实用技能| 游戏中使技能或装备跟随角色环绕,持续旋转

[Unity3D] 多人游戏中镜头固定角度、随角色移动的实现方式

Unity 如何实现游戏Avatar角色头部跟随视角转动

unity 相机跟随物体(角色)