使2D GameObject对另一个2D GameObject

时间:2017-09-14 19:01:50

标签: c# position transform distance unity2d

所以,我的老板在检测到玩家时会向特定方向移动。我遇到的问题是如何根据玩家在某个距离内的位置让老板移动。因此,如果老板在玩家的左边,他就会向左移动。如果他在玩家的右边,他就会向右移动。但我无法弄清楚如何让他根据距离作出反应。现在我只是做一个Debug.Log来节省几秒钟。

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

public class phantom : MonoBehaviour {

private Rigidbody2D rb;
private Animator anim;
public Transform Target;


void Start () 
{
    rb = GetComponent<Rigidbody2D> ();
    anim = GetComponent<Animator> ();
}


void Update ()
{

    if (transform.position.x > Target.position.x ) {
        Debug.Log ("left");
    }
    if (transform.position.x < Target.position.x ) {
        Debug.Log ("right");
    }
}

}

2 个答案:

答案 0 :(得分:1)

您可以使用Vector3.Distance方法根据相应的变换确定两个对象之间的距离。这样,您可以根据他与玩家的距离来修改老板的行为。幅度值越小,两个变换越接近。

例如:

int distanceYouWant;

if(Vector3.Distance(transform.position, Target.position).magnitude < distanceToDoStuff)
{
     Debug.Log("Boss do stuff!");
}

以下是Unity脚本API文档的链接:https://docs.unity3d.com/ScriptReference/Vector3.Distance.html

希望这有帮助!

答案 1 :(得分:0)

我明白了。我刚刚在Update中使用了OnTriggerEnterStay2d(Collider2D other)。然后我在同一个GameObject上放置了一个触发器对撞机,并且只有当它检测到目标(播放器)时才进行调试。