游戏对象跟随玩家形成链条

问题描述 投票:0回答:1

我正在制作一个游戏,当玩家触摸它时,游戏对象会跟随第一个对象,而第二个对象会跟随第一个对象。每个物体都跟随它前面的物体,形成一条链,玩家引领这条链。

这是我到目前为止所拥有的

public class ChickenManager : MonoBehaviour
{
Transform player;
bool shouldFollow;
int chickenOrder = 0;
[SerializeField] NavMeshAgent navMeshAgent;
private List<GameObject> chickenList = new List<GameObject>();

// Start is called before the first frame update
void Start()
{
    player = GameObject.FindGameObjectWithTag("Player").transform;
    navMeshAgent = GetComponent<NavMeshAgent>();
}

// Update is called once per frame
void Update()
{
    if (shouldFollow) FollowTarget();
}

private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        chickenList.Add(gameObject);
        shouldFollow = true;
    }
}

void FollowTarget()
{
    Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);

    if (chickenOrder == 0)
    {
        Vector3 newPosition = player.transform.position - new Vector3(0f,0f,0.5f) ;
        navMeshAgent.SetDestination(newPosition);
    }
    else 
    {
        Vector3 newPosition = chickenList[chickenOrder - 1].transform.position - new Vector3(0f, 0f, 0.5f);
        navMeshAgent.SetDestination(newPosition);
    }
}
}

现在,当玩家击中游戏对象时,它会跟随玩家但不会留在队列中,而是围绕玩家,我该如何修复它?

提前谢谢您。

c# visual-studio unity-game-engine unityscript
1个回答
0
投票

假设您在 3D 空间中执行此操作,您的第一个问题是您要从目标位置中减去

new Vector3(0f, 0f, 0.5f)
,因此它始终处于相同的位置,因为您有一个静态偏移量,所以您需要什么是一个相对偏移量,如下所示:

var chicken = chickenList[chickenOrder - 1]; //Added this to make it easier to read
var distanceToFollowBehind = 0.5f;
chicken.transform.position = chicken.transform.position - (chicken.transform.forward * distanceToFollowBehind);

这将获得目标相对于其前进方向后面的位置,因此它始终位于目标后面。

它们包围玩家的原因(我猜)是因为导航网格代理之间的距离非常小,并且它们都试图占据一个小空间并最终聚集在一起。

© www.soinside.com 2019 - 2024. All rights reserved.