触发器 的脚本怎么写?
圆柱和球都是实例化的,场景里有很多
球有动画,先进入触发器,触发器把球的动画速度设置为0
当圆柱进入触发器时,触发器怎么把之前进入的球的动画速度设置为1
不会C#,简单的能看懂一点,list不会用,请大家帮帮忙,谢谢
你早点把你的功能问题描述清楚嘛,你这么说就不用绕那么一大圈子让人家去猜你的需求了。
如你题所说的话,可以这么写,写个cube的碰撞检测脚本(挂到cube上):脚本内容大概如下:
你试一下,应该是这个意思吧(不用说去用b物体再获取a物体啥的东西)
private GameObject sphereObj;//缓存C物体碰撞检测到的球物体
private void OnTriggerEnter(Collider other)
{
if (other.name=="球")//或者用物体的标签判断,other.tag=="写球的标签名"
{
other.GetComponent<Animator>().speed = 0;//球进入C物体将速度设置为0
sphereObj = other.gameObject;//将碰撞到的球缓存下来
}
else if (other.name == "圆柱")//当碰撞到圆柱时
{
if (sphereObj!=null)//判断一下之前碰撞的球有没有保存,保存了这个对象就不为空
{
sphereObj.GetComponent<Animator>().speed = 1;//圆柱进入时,就将之前的球物体的动画速度设置为1
}
}
}
还是就是你需要将上一个发生碰撞的球设置动画速度为1,还是需要将所以发生过碰撞检测的球都操作一遍?
private void OnTriggerEnter(Collider other)
{
//获取其他物体的某个组件?
other.gameObject.GetComponent<Animator>();
}
是这个意思吗?
List<GameObject> InTriggerGameObjects = new List<GameObject>();
private void OnTriggerEnter(Collider other)
{
//先将所有进入触发器的物体都加到list内
InTriggerGameObjects.Add(other.gameObject);
//判断足够的数量 或者 需要的物体都进入到了other内
//用list内的物体 获取对方的component
foreach(var obj in InTriggerGameObjects)
{
//
}
}
private void OnTriggerExit(Collider other)
{
if(InTriggerGameObjects.Contains(other.gameObject))
InTriggerGameObjects.Remove(other.gameObject);
}
当然是你的问题
高内聚,低耦合,你所有的物体都应该是跟触发器之间相互调用,而跟其他物体没有一毛钱关系
何况就算你物体A找到物体B了,但是如果在区域内有多于2个物体,你到底操作谁不操作谁呢
自己逻辑就没有理清
你上一个问题我已经给出解决方式了,既然A想通过C来获取B,只能是C上面有一个触发脚本,然后A通过触发C,读取C的脚本是否获取到了B,获取到B再进行操作B。