如何使物体改变方向?

时间:2019-06-22 18:36:47

标签: c# unity3d

我试图使一条鱼在碰到某些触发器时改变方向。 我在场景的右侧放置了一个触发器,我希望鱼碰到它时向左移动,而当它碰到左触发器时就向右移动。 但是,我不能将两个“ OnTriggerEnter2D”函数放在一个类中。 我该怎么办?

代码如下:

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

public class PoissonMouvementScript : MonoBehaviour
{
    public Collider2D colliderleft;
    public Collider2D colliderright;
    public Rigidbody2D rb2;
    public bool fishdirection = false;
    public float sidewaysforce = 1;

    private void OnTriggerEnter2D(Collider2D colliderleft)
    {
        fishdirection = true;
        Debug.Log("Fish is going right");
    }

    private void OnTriggerEnter2D(Collider2D colliderright)
    {
        fishdirection = false;
        Debug.Log("Fish is going left");
    }

    void FixedUpdate()
    {
        if(fishdirection == false)
        {
            rb2.AddForce(new Vector2(sidewaysforce * Time.deltaTime, 0));
        }
        else if (fishdirection == true)
        {
            rb2.AddForce(new Vector2(-sidewaysforce * Time.deltaTime, 0));
        }
    }

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您有几种选择。

一种方法是在左右碰撞对象中创建一个脚本,该脚本具有OnCollisionEnter并检查与玩家的碰撞并为其增加速度。

另一个选择是使用“ LeftEdge”和“ RightEdge”之类的标签标记两个边缘对象。然后,在OnCollisionEnter中到达的脚本中,放入collider.CompareTag(“ LeftEdge”)并执行操作,然后与RightEdge相同。

还有其他选择,但是它们会使看起来简单的项目变得过于复杂。

答案 1 :(得分:0)

好吧,感谢安东(Anton),脚本现在可以正常工作了。 因此,基本上,如果要创建从A点到B点以及从B点到A点的移动实体,则必须放置2个对撞机(一个在左边,另一个在右边),并用标签标记它们例如“ LeftEdge”或“ RightEdge”,然后将此脚本添加到实体:

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

public class BoulbeFishDirection : MonoBehaviour
{
    public Rigidbody2D rb2;
    public bool fishdirection = false;
    public float sidewaysforce = 1;

    private void OnTriggerEnter2D(Collider2D collider)
    {
        if(collider.CompareTag("LeftEdge"))
        {
            fishdirection = true;
            Debug.Log("Fish is going right");
        }

        else if(collider.CompareTag("RightEdge"))
        {
            fishdirection = false;
            Debug.Log("Fish is going left");
        }
    }

    void FixedUpdate()
    {
        if (fishdirection == true)
        {
            rb2.AddForce(new Vector2(sidewaysforce * Time.deltaTime, 0));
        }
        else if (fishdirection == false)
        {
            rb2.AddForce(new Vector2(-sidewaysforce * Time.deltaTime, 0));
        }
    }
}

祝您有美好的一天,并享受有趣的编码!