【问题标题】:making a 2D GameObject react to the position of another 2D GameObject使 2D 游戏对象对另一个 2D 游戏对象的位置做出反应
【发布时间】:2017-09-14 19:01:50
【问题描述】:

所以,我的老板在检测到玩家时会朝特定方向移动。我遇到的问题是如何让老板移动,这取决于玩家在一定距离内的位置。所以如果老板在玩家的左边,他会向左移动。如果他在球员的右边,他会向右移动。但我不知道如何让他根据距离做出反应。现在我只是在做一个 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");
    }
}

}

【问题讨论】:

  • 根据距离应该有什么反应?您是否尝试过计算更新中的距离并根据结果采取各种措施?
  • 是的,我有。我只是要让这个脚本附加到的老板,向右或向左移动。我已经知道该怎么做。我专注于让它只显示 Debug.Log ("");当她在某个距离接近时。
  • 但是有什么问题呢?我在这里看不到任何基于到目标距离的代码。您是否尝试过实施?如果有,代码是什么,有什么问题?
  • 这就是我想要弄清楚的。如何在代码中实现距离。不过我想通了。我只是把这个函数变成了一个 OnTriggerStay2D 函数。不过感谢您的回复。

标签: c# position transform distance unity2d


【解决方案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

希望这会有所帮助!

【讨论】:

  • 我相信这在未来会非常有用。感谢您的帮助,不胜感激。我为该链接添加了书签以供将来使用。
【解决方案2】:

我想通了。我只是用一个 OnTriggerEnterStay2d(Collider2D 其他)而不是在 Update 中创建了该函数。然后我在同一个游戏对象上放置了一个触发碰撞器,只有当它检测到目标(玩家)时才会进行调试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多