前言跟随玩家对象

Prefab follow player object?

本文关键字:对象 玩家 跟随      更新时间:2023-09-26

简而言之,我有一个2d游戏,一个忍者会在游戏中产生,并向我的玩家投掷忍者之星。我让我的忍者明星成为我的忍者敌人的孩子,并将我的忍者拖到项目文件夹中,使其成为预制件。为了让我的忍者之星追随我的玩家,我不得不让他也成为一个预制品。我的玩家有一个鼠标脚本,我的玩家通过鼠标触摸来移动。我注意到,每当我移动我的玩家时,忍者之星都不会直接跟随我的玩家预制,而是会移动到我在场景视图中放置玩家预制的最后一个地方。我发现了我的问题,这是因为我把我的玩家预制放在了我的忍者之星的脚本预制字段中,当我试图把我的游戏对象放在我的忍术之星的剧本预制字段中时,它不起作用。有没有一种方法可以让我的忍者明星追随我的玩家,而不是跟随我的玩家预制?非常感谢。忍者明星脚本:

#pragma strict
var Player : Transform;
var MoveSpeed = 4;
var MaxDist = 10;
var MinDist = 5;

 function Start () 
{
  GetComponent.<Rigidbody2D>().angularVelocity = Random.Range(-200, 200);
  Destroy(gameObject, 2.4);
}
 function Update () 
{
    if(Vector3.Distance(transform.position,Player.position) >= MinDist){
       transform.position += (Player.transform.position - transform.position).normalized * MoveSpeed * Time.deltaTime;
   }
 }

还有一张图片来跟进我所说的话。(george_0是我的玩家,我的忍者中的Follow ME脚本将跟随脚本。)https://i.stack.imgur.com/1wc5p.png

您的玩家不需要为此做准备。让它成为一个并不是坏事,但这是因为其他原因(你不能把预制块分配给那个Player变量来完成下面的工作,这就是我的意思)。你可以在你的忍者之星的Start函数中获得它,例如通过做Player = GameObject.Find("george_0");

还有var Player : Transform,但使用Player.transform.position,基本上就是transform.transform.position。将玩家设为游戏对象或仅使用Player.position。根据此情况,您可能需要将Find()更改为Player = GameObject.Find("george_0").transform;

对于实际的移动,我会说这样做(假设玩家在这种情况下是一个变换):

function Update()
{
    if(Vector3.Distance(transform.position,Player.position) >= MinDist)
    {
        transform.position = Vector3.MoveTowards(transform.position, Player.position, Time.deltaTime * MoveSpeed);
    }
}