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文」の各特定の項目を追加するために、私はアイテムの多くを持っていた場合は、非常に魅力的に感じることはありません。したがって、これに簡単にアプローチする方法が必要です。
raycastHit.collider.gameObjectを使用してください。ここで、gameObjectにはすべてのインベントリオブジェクトを含めることができます。これらのインベントリオブジェクトは、基本クラスとしてObjectsWhichCanBePickedのような共通オブジェクトから継承し、IronSwordおよびCopperSwordで継承されるクラスSwordに継承される必要があります。 –
私はこの知識をまだ持っていませんが、この作業を行うためには何を読んで学ぶべきかの出発点を与えてくれます。ありがとうございました! :) – Markus121
あなたは歓迎です –