销毁拾取对象OnMouseDown

时间:2017-01-20 15:40:53

标签: c# unity3d unity5 gameobject onmousedown

我刚刚发布了我的第一个独立恐怖游戏,并且正在更新它。在我的游戏中,目标是绕过激活几个发电机以恢复力量和逃生。我想让我的游戏更加逼真,所以,我正在添加可以用来激活发电机的汽油罐。我需要一些帮助来创建一个脚本,允许玩家拾取气体罐并使用它们来激活发生器。这是我到目前为止所做的:

    public class GasCanisters : MonoBehaviour

public GameObject Player;
public GameObject[] GasCanisters;
public AudioClip PickupSound;

void Update()
{
AudioSource.PlayClipAtPoint(PickupSound, transform.position);

  if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.collider.CompareTag("Gas Canister"))
     GameObject.Destroy(gameObject);
              }
}

你可能会说,我是一个非常基本和糟糕的程序员。但无论如何,我真的很感激我能得到的所有帮助。

1 个答案:

答案 0 :(得分:1)

好的,这里有很多事要做;首先,不要使用Update,它运行每一帧,无论你的玩家距离容器1米还是200英里都浪费了大量的CPU时间。而是使用OnMouseOver。确保您的容器上有collider,然后添加类似以下内容的脚本:

void OnMouseOver()
{
   if(Input.GetButtonDown)
   {
       transform.SetParent(yourPlayersHand.transform);
       transform.localPosition = Vector3.Zero;
       transform.localRotation = Quaterion.Identity;
   }
}

这将附加'罐子给你的球员手。你可能想摆弄这个位置&方向让它看起来正确。

其次,您需要一些方法来识别容器,最简单的方法是添加tag

接下来,向生成器添加类似的脚本以执行您想要的操作,例如:

void OnMouseOver()
{
   if(Input.GetButtonDown)
   {
       if(yourPlayersHand.transform.GetChild(0).tag == "canister")
       {
            // your code for what happens
       }
   }
}