我试图使一条鱼在碰到某些触发器时改变方向。 我在场景的右侧放置了一个触发器,我希望鱼碰到它时向左移动,而当它碰到左触发器时就向右移动。 但是,我不能将两个“ 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));
}
}
感谢您的帮助!
答案 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));
}
}
}
祝您有美好的一天,并享受有趣的编码!