前文:https://blog.csdn.net/Jaihk662/article/details/86763790(物体查找与控制)
前面已经实现了当小方块在Door里面时,可以用按键控制物体Door的旋转,触发器的代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LRtoDoor : MonoBehaviour
{
private Door mydoor;
private Transform myTransform;
private Rigidbody myRigidbody;
void Start()
{
mydoor = GameObject.Find("Door").GetComponent<Door>();
myTransform = gameObject.GetComponent<Transform>(); //获取相应对象的引用
myRigidbody = gameObject.GetComponent<Rigidbody>();
}
void Update()
{
}
void OnTriggerStay(Collider coll)
{
if (coll.gameObject.name=="Cube (3)") //如果方块进入了Door里面
{
Debug.Log("触发成功,可以用ZX键控制旋转");
mydoor.Rotate();
}
}
}
那么问题又来了:想要设计100个可以触发效果的物体,该怎么办呢?总不可能写100个if语句吧
一、Tag标签
这个时候就需要标签了,也就是给物体分类,只要是这一类的物体都可以触发
GameObject.FindGameObjectsWithTag(string):静态方法,返回一个数组,里面为所有标签为string的物体(GameObject)
触发器代码修改如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LRtoDoor : MonoBehaviour
{
private Door mydoor;
private GameObject[] p;
private Transform myTransform;
void Start()
{
p = GameObject.FindGameObjectsWithTag("Player");
mydoor = GameObject.Find("Door").GetComponent<Door>();
myTransform = gameObject.GetComponent<Transform>();
Debug.Log("标签为Player的物体有:");
for (int i = 0; i < p.Length; i++)
Debug.Log(p[i].name);
}
void Update()
{
}
void OnTriggerStay(Collider coll)
{
//暂时可以理解:coll.gameObject.tag和coll.tag一样,上面coll.name一样的道理
if (coll.gameObject.tag=="Player") //如果标签为"Player"的方块进入了Door里面
{
Debug.Log("触发成功,可以用ZX键控制旋转");
mydoor.Rotate();
}
}
}
效果如下: