在地图上特定区域的某些硬币上触发NavMesh函数

时间:2020-11-03 20:27:58

标签: c# unity3d boolean navmesh

我一直在尝试一种系统,当玩家按下触发器时,在特定区域内召唤硬币。我的代码不起作用。我似乎找不到问题。enter image description here

触发区域上的代码: 请注意,玩家必须点击触发器(多维数据集)才能激活该功能。我的目的是召唤TriggerZone中的硬币。

当玩家点击触发器时,所有硬币都会按预期变化,但硬币脚本中管道“ CoinMovement”中的最后一个除外。

using System.Collections.Generic;
using UnityEngine;


public class coinTriggerZone : MonoBehaviour
{
    public MagnetCoinMovement coinOG;

    public bool objectMobility = false;
    
    private void OnTriggerEnter(Collider other)
    {


        if (objectMobility == true && other.gameObject.CompareTag("coin"))
        {
            
            coinOG.CoinMobility();
            Debug.Log("entered");

            


        }

    }

    public void activate()
    {
        objectMobility = true;
    }

}

触发器本身的代码:

using System.Collections.Generic;
using UnityEngine;

public class CoinTrigger : MonoBehaviour
{

    private bool activated = false;


    //LaterUpdates Links to CoinEnemyScript
    public coinEnemyTriggerZone coinEnemy;

    private void OnTriggerEnter(Collider other)
    {
        if (activated == false && other.gameObject.CompareTag("Player"))
        {
            activated = true;
           


            

            coinEnemy.activate();

        }


    }
}







在硬币中编码:

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


public class MagnetCoinMovement : MonoBehaviour
{
    public Transform player;
    public NavMeshAgent agent;



    public bool CoinMovement = false;
    void Start()
    {

    }
    void Update()
    {
        if (CoinMovement == true)
        {
            agent.SetDestination(player.transform.position);

        }
    }

    public void CoinMobility()
    {
        CoinMovement = true;
    }

    public void Vanish()
    {
        Destroy(gameObject);
    }




}

1 个答案:

答案 0 :(得分:0)

无论何时玩家击中触发区,都可以调用Physics.OverlapSphere投射出一个球体,该球体将返回其所有碰撞。然后,您可以检查它击中的每个对象是否是硬币,然后可以通过引用附带的脚本并调用CoinMobility()方法来激活它们。

Physics.OverlapSphere带有两个参数,一个是要从其投射圆的中心。另一个是要投射的球体的半径。您可以将圆心设置为附加到其上的gameObject的局部变换,然后可以根据自己的喜好设置半径。我建议创建一个新的名为SphereRadius的公共变量,以便您可以在检查器中更改它的值。

Collider[] hitColliders = Physics.OverlapSphere(transform.position, sphereRadius);
        foreach (var hitCollider in hitColliders)
        {
            if (hitCollider.CompareTag("Coin"))
                hitCollider.GetComponent<MagnetCoinMovement>().CoinMobility();
        }

要调试/测试,您可以使用OnDrawGizmos,它使您可以直观地看到球形投影在场景视图中的外观。

void OnDrawGizmos()
    {
        Gizmos.color = Color.yellow;
        Gizmos.DrawSphere(transform.position, sphereRadius);
    }

如果您需要任何说明,请告诉我!