如何解决在地图上特定区域的某些硬币上触发NavMesh函数
我一直在尝试一种系统,当玩家按下触发器时,在特定区域内召唤硬币。我的代码不起作用。我似乎找不到问题。
触发区域上的代码: 请注意,玩家必须点击触发器(多维数据集)才能激活该功能。我的目的是召唤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);
}
}
解决方法
无论何时玩家击中触发区,都可以调用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);
}
如果您需要任何说明,请告诉我!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。