触发时旋转立方体-C#Unity
我对编码一无所知,所以任何帮助都是非常有价值的 当碰撞器进入立方体的长方体碰撞器时,我试图让立方体(这是一个导入了材质的FBX)旋转。我一直在遵循2个教程,让我去。第一个是旋转立方体,我成功地完成了,第二个是在进入“触发区”时为游戏添加声音/音乐,同样,这没有问题 我现在希望立方体在进入触发区时旋转,所以我想我可以结合2并使其工作,但过了很长一段时间,我就走到了死胡同。由于我缺乏理解,我不知道为什么在将脚本添加到多维数据集时,我所写的内容不起作用 我遵循的立方体教程- 我学习的音乐教程- 以及我在结合上述内容的旋转立方体方面的失败尝试-触发时旋转立方体-C#Unity,c#,unity3d,C#,Unity3d,我对编码一无所知,所以任何帮助都是非常有价值的 当碰撞器进入立方体的长方体碰撞器时,我试图让立方体(这是一个导入了材质的FBX)旋转。我一直在遵循2个教程,让我去。第一个是旋转立方体,我成功地完成了,第二个是在进入“触发区”时为游戏添加声音/音乐,同样,这没有问题 我现在希望立方体在进入触发区时旋转,所以我想我可以结合2并使其工作,但过了很长一段时间,我就走到了死胡同。由于我缺乏理解,我不知道为什么在将脚本添加到多维数据集时,我所写的内容不起作用 我遵循的立方体教程- 我学习的音乐教程- 以及我
using UnityEngine;
using System.Collections;
public class TriggerSpinControl : MonoBehaviour
{
public float speed1 = 25f;
public float speed2 = 100f;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
transform.Rotate(Vector3.forward, speed1 * Time.deltaTime);
}
}
void OnTriggerExit(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
transform.Rotate(Vector3.forward, speed2 * Time.deltaTime);
}
}
}
任何帮助都将不胜感激
谢谢
根据Rutter下面的回答,我尝试创建了一个脚本(基于其他问题和答案中虚幻的信息片段),要求在TriggerEnter和TriggerExit上运行两个旋转脚本,但由于我仍在尝试了解和理解我在做什么,它似乎不起作用 旋转纸条不会附加到游戏对象,而只是在资产文件夹中
using UnityEngine;
using System.Collections;
public class TriggerSpinControl : MonoBehaviour
{
private SpinFast spinfast;
private SpinSlow spinslow;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
spinfast = GetComponent<SpinFast>();
}
}
void OnTriggerExit(Collider other)
{
if (other.CompareTag("TriggerZone"))
{
spinslow = GetComponent<SpinSlow>();
}
}
}
使用UnityEngine;
使用系统集合;
公共类触发器控制:单行为
{
私人纺纱机纺纱机;
私人斯宾斯洛斯宾斯洛;
无效对撞机(对撞机其他)
{
if(其他比较标记(“TriggerZone”))
{
spinfast=GetComponent();
}
}
void OnTriggerExit(碰撞器其他)
{
if(其他比较标记(“TriggerZone”))
{
spinslow=GetComponent();
}
}
}
这可能只是一堆废话,但我希望我走上了正确的道路
谢谢
当对象进入触发器时,OnTriggerEnter
将被调用一次
当对象退出触发器时,OnTriggerExit
将被调用一次
如果希望对象继续旋转,可能需要尝试不同的策略
OnTriggerStay
是另一个事件,对于当前在触发器中的每个对象,大约每帧调用一次。这将允许您调用transform.Rotate
每帧一次,以在每帧上保持一点旋转。这是一个简单但脆弱的解决方案
Unity是一种“基于组件的”体系结构——您的每个脚本都是一个组件,将多个组件组合在一起通常是有利的。您可以创建一个脚本来管理每帧调用一次的
Update
事件中的旋转行为,然后创建另一个组件来根据触发器的进入/退出启用和禁用旋转脚本。OnTriggerEnter
将在对象进入触发器时调用一次
当对象退出触发器时,OnTriggerExit
将被调用一次
如果希望对象继续旋转,可能需要尝试不同的策略
OnTriggerStay
是另一个事件,对于当前在触发器中的每个对象,大约每帧调用一次。这将允许您调用transform.Rotate
每帧一次,以在每帧上保持一点旋转。这是一个简单但脆弱的解决方案
Unity是一种“基于组件的”体系结构——您的每个脚本都是一个组件,将多个组件组合在一起通常是有利的。您可以创建一个脚本来管理每帧调用一次的Update
事件中的旋转行为,然后创建另一个组件,根据触发器进入/退出启用和禁用旋转脚本。这是我的解决方案
代码(C#):
这是我的解决方案
代码(C#):
使用OnTiggerStay():)使用OnTiggerStay():)
using UnityEngine;
using System.Collections;
public class TriggerSpinControl : MonoBehaviour
{
public float speed1 = 25f;
public float speed2 = 100f;
private void Update()
{
transform.Rotate(Vector3.forward, speed2 * Time.deltaTime);
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "MainCamera")
{
enabled = false;
}
}
void OnTriggerStay(Collider other)
{
if (other.tag == "MainCamera")
{
transform.Rotate(Vector3.forward, speed1 * Time.deltaTime);
}
}
private void OnTriggerExit(Collider other)
{
if (other.tag == "MainCamera")
{
enabled = true;
}
}
}