【发布时间】:2011-02-12 15:35:28
【问题描述】:
我一直在慢慢学习 Unity 3D。我正在尝试制作迷宫,并且需要在他们到达终点区域时发生事件。
如何获取对象位置并检查它是否在目标区域?使用 Javascript。
感谢您的帮助!
【问题讨论】:
标签: unity3d gameobject
我一直在慢慢学习 Unity 3D。我正在尝试制作迷宫,并且需要在他们到达终点区域时发生事件。
如何获取对象位置并检查它是否在目标区域?使用 Javascript。
感谢您的帮助!
【问题讨论】:
标签: unity3d gameobject
如果您的结束区域可以被视为一个盒子,您可以在结束区域周围的场景中添加一个 BoxCollider,并将其 isTrigger 属性设置为 true。然后,当您的实体进入该区域时,您将在您的实体上收到对OnTriggerEnter 的回调,您随后可以使用它来结束关卡或其他任何事情。
【讨论】:
作为彼得 G states on Unity Answers:
如果你有一个刚体,那么你可以做 Rigidbody.IsSleeping() 来 检查你的刚体是否在睡觉
如果您使用的是角色控制器,请检查是否 CharacterController.velocity == Vector3.zero;
或者,您可以在每帧手动保存一个 Vector3 以记住 最后一个位置。比如:
function Update () {
curPos = position;
if(curPos == lastPos) {
print("Not moving");
}
lastPos = curPos;
}
【讨论】:
好吧,如果您所说的目标区域是指终点区域,那么 您可以通过多种方式做到这一点
你可以使用碰撞
以一种简单的方式: (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
}
}
【讨论】: