触发时旋转立方体-C#Unity

触发时旋转立方体-C#Unity,c#,unity3d,C#,Unity3d,我对编码一无所知,所以任何帮助都是非常有价值的 当碰撞器进入立方体的长方体碰撞器时,我试图让立方体(这是一个导入了材质的FBX)旋转。我一直在遵循2个教程,让我去。第一个是旋转立方体,我成功地完成了,第二个是在进入“触发区”时为游戏添加声音/音乐,同样,这没有问题 我现在希望立方体在进入触发区时旋转,所以我想我可以结合2并使其工作,但过了很长一段时间,我就走到了死胡同。由于我缺乏理解,我不知道为什么在将脚本添加到多维数据集时,我所写的内容不起作用 我遵循的立方体教程- 我学习的音乐教程- 以及我

我对编码一无所知,所以任何帮助都是非常有价值的

当碰撞器进入立方体的长方体碰撞器时,我试图让立方体(这是一个导入了材质的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;
        }
    }
}