我有一个机械师。有一个玩家和一个敌人。他们每个人都能吸引立方体。所以当他们都接触立方体时,立方体会同时飞向敌人和玩家,我需要它飞向第一个接触它的人。这就是我现在拥有的
[SerializeField] private Transform _cube;
[SerializeField] private Transform _playerParent;
[SerializeField] private Transform _enemyParent;
private Transform _carPlayer, _carEnemy;
private Rigidbody _rigidbody;
private void Start()
{
_rigidbody = GetComponent<Rigidbody>();
}
public void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.tag == "Player")
{
_carPlayer = collider.transform;
}
if (collider.gameObject.tag == "Enemy")
{
_carEnemy = collider.transform;
}
}
private void FixedUpdate()
{
if (_carPlayer)
{
PlayerTakeCube();
}
if (_carEnemyFirst)
{
EnemyFirstTakeCube();
}
}
private void PlayerTakeCube()
{
_cube.transform.position = Vector3.MoveTowards(transform.position,
_playerParent.position, 0.02f);
_cube.transform.rotation = _playerParent.transform.rotation;
_rigidbody.isKinematic = true;
_cube.transform.SetParent(_playerParent);
}
private void EnemyFirstTakeCube()
{
_cube.transform.position = Vector3.MoveTowards(transform.position,
_enemyParent.position, 0.02f);
_cube.transform.rotation = _enemyParent.transform.rotation;
_rigidbody.isKinematic = true;
_cube.transform.SetParent(_enemyParent);
}
2条答案
按热度按时间wfsdck301#
在OnTriggerEnter中,检查是否已分配carPlayer或carEnemy,如果已分配,则不执行其余操作:
我还建议加上以下几行:将“刚体.isKinematic = true”和“立方体.变换.SetParent(...)”添加到OnTriggerEnter方法中,因为您不需要每次调用FixedUpdate();
只有当您不希望多维数据集相互窃取时,上面的示例才有效。
如果可以的话,我会建议创建一个1秒的短计时器,在此期间,立方体在有人触摸后无法控制:
brc7rcf02#
我会把它统一起来,简单地用一个组件,比如。
在你们两辆汽车。
然后你可以简单地