2016-07-29 15 views
1

レイキャストで検出されたタグに基づいてアイテムを受け取る方法を教えてください。タグに基づいて在庫を在庫に追加するにはどうすればよいですか?

地面に銅剣があるとしましょう。 と私はそれを拾うために "F"を押します。

このスクリプトでは、タグ「CopperSword」を検出し、1つの銅剣をインベントリに配置する必要があります。タグが「IronSword」になる場合は、1つのアイアンソードを在庫に配置する必要があります。

using UnityEngine; 
using System.Collections; 

public class PickUp : MonoBehaviour 
{ 
    private Vector3 position; 
    private Vector3 target; 
    public int range = 2; 

    Inventory inv; 
    public GameObject player; 

    void Start() 
    { 
     inv = player.GetComponent<Inventory>(); 
    } 

    void Update() 
    { 
     position = gameObject.transform.position; 
     RaycastHit raycastHit; 
     target = position + Camera.main.transform.forward * range; 

     if (Physics.Linecast(position, target, out raycastHit)) 
     { 
      // Shows which object that the Raycast collided with 
      Debug.Log(raycastHit.collider.gameObject); 
     } 

     // Recieve an item based on the Tag 
     if (Input.GetButtonDown("Fire1")) 
     { 
      if (raycastHit.collider.tag == "CopperSword") 
      { 
       inv.copperSword += 1; 
      } 
     } 
    } 
} 

私は可能性があり、単にハードコード各「if文」の各特定の項目を追加するために、私はアイテムの多くを持っていた場合は、非常に魅力的に感じることはありません。したがって、これに簡単にアプローチする方法が必要です。

+0

raycastHit.collider.gameObjectを使用してください。ここで、gameObjectにはすべてのインベントリオブジェクトを含めることができます。これらのインベントリオブジェクトは、基本クラスとしてObjectsWhichCanBePickedのような共通オブジェクトから継承し、IronSwordおよびCopperSwordで継承されるクラスSwordに継承される必要があります。 –

+0

私はこの知識をまだ持っていませんが、この作業を行うためには何を読んで学ぶべきかの出発点を与えてくれます。ありがとうございました! :) – Markus121

+0

あなたは歓迎です –

答えて

0

「粘土はそれを工芸する者に言いなさい、あなたは何を作るのですか?」 The Bible、Isaiah、45:9

関連する問題