【问题标题】:Problems with randomly moving in unity3d?在unity3d中随机移动的问题?
【发布时间】:2014-07-10 06:21:03
【问题描述】:

我有一个随机移动的生物,当撞到墙壁时它会改变方向,但一段时间后它会消失(它不应该这样)。谁能告诉我为什么以及如何解决这个问题?这是我的代码:

using UnityEngine;

using System.Collections;

public class Random_moving : MonoBehaviour{

    public Vector3 target;

    public float speed=10f;

    Vector3 screenPos;

    int direction = 1;

    void  Start (){
        target = Random.insideUnitSphere * 5;
        transform.Rotate(target);
    }
    void  Update (){
        transform.position += (transform.forward * speed * Time.deltaTime)*direction;
    }

    void OnCollisionEnter2D (Collision2D coll){
                Debug.Log ("hit.");
                if (coll.gameObject.tag == "maze"){                 
                        if (screenPos.x < Screen.width / 2){
                                direction = -1;
                                Debug.Log ("change_2.");
            }
        }
    }
}

【问题讨论】:

  • 请将您的代码复制并粘贴到此问题中。在不访问其他站点的情况下使其完整(可能会损坏)

标签: c# unity3d


【解决方案1】:

如果生物必须改变方向,你应该这样做:

direction *= -1;

而不是

direction = -1;

实际上,仅在第一次与墙壁碰撞时改变方向。很可能,这会导致该生物在第二次碰撞时“进入”墙壁,因为方向仍然相同。

【讨论】:

  • 我怎样才能让这个生物在每次发生碰撞时改变它的方向?
  • 实际上,您正在使用对撞机的标签“过滤”您的碰撞(if (coll.gameObject.tag == "maze"))。只需删除该 if 语句即可“捕获”所有冲突。
  • 哦,我的意思是,如何停止消失的生物?即使方向 *= -1;它仍然会消失,但会在一段时间后显示。
  • 对不起,不看项目就无法判断。我只能建议降低场景的复杂性(也许移除一些对撞机/墙壁),看看问题是否仍然存在。因此,您可以了解这是否是由于碰撞造成的问题。
【解决方案2】:

你有两个独立的问题。首先,正如Andrea 已经告诉你的那样,你不会在每次碰撞时切换你的方向。如果1 是向前而-1 是向后,那么在第一次碰撞后你总是向后退。要切换方向,只需乘以 -1

direction *= -1;

其次,您正在使用transform.position 来移动您的生物。通过直接设置transform.position,您基本上忽略了碰撞。这就像将物体传送到目的地,即使它进入另一个物体。要触发碰撞,您需要在物理引擎的帮助下移动您的生物。通过对生物施加力或使用函数Rigidbody2D.MovePosition()

void FixedUpdate() {
    rigidbody2D.MovePosition(rigidbody2D.position + (transform.forward * speed * Time.deltaTime * direction));
}

来自manual的重要提示:

重要的是要了解实际的位置变化只会在下一次物理更新期间发生,因此重复调用此方法而不等待下一次物理更新将导致使用最后一次调用。因此,建议在 FixedUpdate 回调期间调用它。

【讨论】:

  • 谢谢,帮了大忙。但知道我还有另一个问题。在它撞到“墙”之后,我希望这个生物改变它的方向,而不仅仅是像乒乓球一样移动,如果你明白我的意思的话。我尝试了一些东西,但它们没有用。有什么建议我该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多