【技术向】让2D游戏中的角色互相跟随,角色队列的实现
unity3d吧
全部回复
仅看楼主
level 12
M_oenen 楼主
先看效果(GIF,但愿能动)
所谓角色队列,就是多个角色按照贪吃蛇的走法,沿着前面角色的路线行走,从而形成的队列。这种东西经常出现在日式RPG游戏中,新手们把这个逻辑看成“走到离目标XX距离时停止”,实现后却事与愿违,今天就来说说这种逻辑到底怎么实现。
大概思路:
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);
}
}
}
}
----------------------【代码结束】-------------------------------
2016年01月11日 06点01分 1
level 12
M_oenen 楼主
备用
2016年01月11日 06点01分 2
【推荐】自动处理2.5D(伪3D)游戏中 物体的遮挡关系 https://tieba.baidu.com/p/4259216192
2016年01月11日 06点01分
level 1
66666666666666666666666666666666666666666666
2016年01月12日 06点01分 4
level 1
好腻害[惊讶]
2016年01月25日 09点01分 5
哇塞居然在这里遇见了peraff
2018年06月12日 22点06分
level 13
新手,膜拜大神
2016年01月26日 05点01分 6
level 8
mark
2016年01月26日 09点01分 7
level 7
顶一个!!!!!
2016年01月26日 09点01分 8
level 9
666
2016年01月31日 14点01分 9
level 1
问下楼主,知道u3d导入itween时出现error building package错误是为什么啊!求解,先谢过!
2016年02月10日 06点02分 10
别用iTween,Unity的动画系统挺好用的。非得用的话 检查unitypackage名字有没有中文,路径也不能有中文,别直接拖拽或者双击,用右键的importPackage导入。还不行就重启Unity。
2016年02月10日 07点02分
顺便 个人认为iTween性能差而且漏内存。
2016年02月10日 07点02分
@M_oenen 怎么检查unitypackage路径啊
2016年02月10日 08点02分
@呵_3_呵 你去官网看看视频吧,现在动手有点早
2016年02月10日 15点02分
level 10
坐等大神
2016年02月10日 11点02分 11
level 12
这个666
2016年02月12日 12点02分 12
level 3
。。。
2016年02月13日 01点02分 13
level 12
备用
2016年02月15日 01点02分 14
level 1
膜拜一下大神![哈哈]
2016年02月15日 02点02分 15
1 2 尾页