我正在开展一个平面上存在玩家角色,球体和圆柱体的项目。
它应该起作用的方式是角色检测球体并且可以拾取球体。通过将球体的名称发送到列表然后销毁该对象。然后,当角色与框交互时,使用Sphere
检查姓名(在这种情况下为inventory.Contains("Sphere")
),如果密钥在广告资源中,则会解锁'但无论球体是否在库存中,都会锁定该框。
以下是代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class RayCasting : MonoBehaviour
{
float rayCoeff;
RaycastHit hit;
List<string> inventory = new List<string>();
// Use this for initialization
void Start ()
{
rayCoeff = 3f;
}
void Cast()
{
Debug.DrawRay (transform.position, Vector3.right * rayCoeff, Color.red);
Debug.DrawRay (transform.position, Vector3.right * -rayCoeff, Color.red);
Debug.DrawRay (transform.position, Vector3.forward * rayCoeff, Color.red);
Debug.DrawRay (transform.position, Vector3.forward * -rayCoeff, Color.red);
if (Physics.Raycast (transform.position, Vector3.forward, out hit, rayCoeff, 1<<8)) {
if(hit.collider.tag == "Interactable") {
//Debug.Log ("Front Scan with collider!, Found Thing.");
if(Input.GetKey(KeyCode.E)) {
string inventoryClaim = hit.collider.ToString();
inventory.Add(inventoryClaim);
Destroy(hit.collider.gameObject);
}
}
}
else if (Physics.Raycast (transform.position, new Vector3(0, 0, -1), out hit, rayCoeff, 1<<8)) {
if(hit.collider.tag == "Interactable") {
//Debug.Log ("Back Scan with collider!, Found Thing.");
if(Input.GetKey(KeyCode.E)) {
string inventoryClaim = hit.collider.ToString();
inventory.Add(inventoryClaim);
Destroy(hit.collider.gameObject);
}
}
}
else if (Physics.Raycast (transform.position, Vector3.right, out hit, rayCoeff, 1<<8)) {
if(hit.collider.tag == "Interactable") {
//Debug.Log ("Right Scan with collider!, Found Thing.");
if(Input.GetKey(KeyCode.E)) {
string inventoryClaim = hit.collider.ToString();
inventory.Add(inventoryClaim);
Destroy(hit.collider.gameObject);
}
}
}
else if (Physics.Raycast (transform.position, new Vector3(-1, 0, 0), out hit, rayCoeff, 1<<8)) {
if(hit.collider.tag == "Interactable") {
//Debug.Log ("Left Scan with collider!, Found Thing.");
if(Input.GetKey(KeyCode.E)) {
string inventoryClaim = hit.collider.ToString();
inventory.Add(inventoryClaim);
Destroy(hit.collider.gameObject);
}
}
else if (hit.collider.tag == "Cylinder"){
if(Input.GetKey(KeyCode.E)) {
if(inventory.Contains("Sphere")) {
Debug.Log("Hooray!");
}
}
}
}
}
// Update is called once per frame
void Update () {
Cast ();
}
}
没有错误,只是缺乏认可。
答案 0 :(得分:1)
扩展Vlad的评论...调用hit.collider.ToString()将返回类似&#34; Sphere(UnityEngine.SphereCollider)&#34; - 对撞机的某种字符串ID,表示这是一个坐在称为Sphere的游戏对象上的球体对撞机。
因此,如果您想要命中对撞机所在的游戏对象的名称,您可以编写
string inventoryClaim = hit.collider.name;
变量&#34; name&#34;将引用组件(在本例中为对撞机)所在的游戏对象的名称。