确定 Unity 3D 中的对象位置

发布于 2024-08-30 04:58:14 字数 118 浏览 4 评论 0原文

我一直在慢慢学习 Unity 3D。我正在尝试制作一个迷宫,并且需要在他们到达终点区域时发生一个事件。

如何获取对象位置并检查它是否位于目标区域?使用 JavaScript。

感谢您的帮助!

I've been learning Unity 3D, slowly. I'm trying to make a maze, and need an event to occur when they reach the finish area.

How do I fetch object location and check if it's in the target area? Using Javascript.

Thanks for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

救星 2024-09-06 04:58:14

如果您的结束区域可以视为一个盒子,您可以在结束区域周围的场景中添加一个 BoxCollider,并将其 isTrigger 属性设置为 true。然后,当实体进入该区域时,您将收到对实体上的 OnTriggerEnter 的回调,您随后可以使用该回调来结束关卡或执行其他操作。

If your end area can be treated as a box, you could add a BoxCollider to your scene around the finish area and set its isTrigger property to true. Then you'll get a callback to OnTriggerEnter on your entity when it enters the area, which you can subsequently use to end the level or whatever.

一影成城 2024-09-06 04:58:14

正如 Peter G 在 Unity Answers 中所述

如果你有一个刚体,那么你可以执行 Rigidbody.IsSleeping() 来
检查你的刚体是否正在睡觉

如果您使用的是字符控制器,则检查是否
CharacterController.velocity == Vector3.zero;

或者,您可以手动保存一个 Vector3 每帧,记住
最后的位置。像这样的东西:

function Update () {
 curPos = position;
 if(curPos == lastPos) {
     print("Not moving");
 }
 lastPos = curPos;
}

As Peter G states on Unity Answers:

If you have a rigidbody, then you can do Rigidbody.IsSleeping() to
check if your rigidbody is sleeping

If you are using a Character Controller, then checking to see if
CharacterController.velocity == Vector3.zero;

Or, you can manually save a Vector3 every frame that remembers the
last position. Something like:

function Update () {
 curPos = position;
 if(curPos == lastPos) {
     print("Not moving");
 }
 lastPos = curPos;
}
∝单色的世界 2024-09-06 04:58:14

好吧,如果你所说的目标区域是指终点区域,那么
您可以通过多种方式来做到这一点,

使用碰撞

您可以以简单的方式 :
(1)创建一个平面,创建一个名为“finish”的标签
(2) 然后选择播放器,然后单击检查器中的下拉“标签”。搜索“完成”并选择它。
您还需要向游戏对象添加一个碰撞器。

然后创建一个新的 JavaScript 并向其中添加此代码

    function OnCollisionEnter(collision : Collision){
    if(collision.gameObject.tag == "finish"){ 

//"STOP GAMEOBJECT FROM MOVING"
}

}

或使用此方法

将此脚本放置在您的播放器上。
这个脚本可能就像使用碰撞器来完成你正在做的事情一样神

 var other : Transform;
    function Update ()
    {

    var dist = Vector3.Distance(other.position, transform.position);

    if (dist < 100)
    {
    //stop player movent here 
// move player to exact finish position over time 

    }

    }

well if you by target area you mean the finish area then
you can do this in several ways

you can use collides

in a simple way :
(1) create a plane , create a tag named "finish"
(2) then select the player then click the dropdown "tag" in the inspector . search for "finish" and select it .
you will also need to add a collider to your gameobject.

then create a new JavaScript and add this code to it

    function OnCollisionEnter(collision : Collision){
    if(collision.gameObject.tag == "finish"){ 

//"STOP GAMEOBJECT FROM MOVING"
}

}

or use this method

place this script on your player .
this script is probably just as god as using colliders for what you are doing

 var other : Transform;
    function Update ()
    {

    var dist = Vector3.Distance(other.position, transform.position);

    if (dist < 100)
    {
    //stop player movent here 
// move player to exact finish position over time 

    }

    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文