我正在尝试在游戏中实现胸部机制。当玩家触摸胸部时,胸部消失,心脏出现。当玩家触摸示例化的心脏时,它必须消失,生命值加1,但脚本不起作用。
Chest.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chest : MonoBehaviour
{
public GameObject heart;
public GameObject _heart; //Instantiated heart.
void OnTriggerEnter2D(Collider2D col){
if (col.gameObject.tag == "Player"){
Vector3 insPos = transform.position;
_heart = Instantiate(heart,new Vector3(insPos.x,insPos.y+0.5f,insPos.z),Quaternion.identity);
_heart.AddComponent<Heart>();
_heart.GetComponent<Heart>().ls = GameObject.FindGameObjectWithTag("Player").GetComponent<LifeSystem>();
Destroy(gameObject);
}
}
}
Heart.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Heart : MonoBehaviour
{
public LifeSystem ls;
void OnTriggerEnter2D(Collider2D col){
if (col.gameObject.tag == "Player"){
SoundManager.PlaySound("CollectCoinSound");
ls.lifes += 1;
Destroy(gameObject);
}
}
}
当玩家触摸胸部时,我检查了示例化心脏的组件,我可以看到生命系统引用被添加,心脏脚本也被添加。
谢谢你的时间。
2条答案
按热度按时间vyswwuz21#
要在派生的
Hearth
上调用OnTriggerEnter2D
,您需要满足以下条件:Player
和Hearth
中至少有一个需要具有Rigidbody2D
组件Player
和Hearth
都需要与IsTrigger = true
具有碰撞器Player
和Hearth
游戏对象需要位于collision matrix中的两个交互层上Hearth
组件需要与碰撞器位于同一游戏对象上,或者与RigidBody2D
位于同一游戏对象上我实际上简化了规则1和规则2,以展示最常见的用例:如果你想知道碰撞的实际规则,你可以找到它们here(见底部的矩阵)。
zte4gxcn2#
除了general collision rules之外,我首先要确保您的字段具有正确的类型,并且已经将
Heart
组件附加到您的预置。此外,也没有必要寻找。。你已经知道参考的球员,你是碰撞
然后简单地
而是将
LifeSystem
附加到播放器对象。总的来说,我会期待两者最终在同一时间触发,因为心脏可能已经触发,如果产卵的权利,球员是