我一直在尝试一种系统,当玩家按下触发器时,在特定区域内召唤硬币。我的代码不起作用。我似乎找不到问题。
触发区域上的代码: 请注意,玩家必须点击触发器(多维数据集)才能激活该功能。我的目的是召唤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);
}
}
答案 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);
}
如果您需要任何说明,请告诉我!