Unity闲谈2D游戏的角色跟随,角色队列的实现
Posted Moenen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity闲谈2D游戏的角色跟随,角色队列的实现相关的知识,希望对你有一定的参考价值。
贴吧传送门:http://tieba.baidu.com/p/4295282467
· 实现效果
(GIF,但愿能动)
· 什么是角色队列?
所谓角色队列,就是多个角色按照贪吃蛇的走法,沿着前面角色的路线行走,从而形成的队列。这种东西经常出现在日式RPG游戏中,新手们把这个逻辑看成“走到离目标XX距离时停止”,实现后却事与愿违,今天就来说说这种逻辑到底怎么实现。
· 代码下载
【FollowMovement.cs】http://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实用技能| 游戏中使技能或装备跟随角色环绕,持续旋转