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

时间:2017-09-07 20:51:19

标签: c# unity3d

我对编码完全陌生,所以任何帮助都会很有价值。

我试图让一个立方体(这是一个带材料的导入FBX)在对撞机进入立方体的盒子对撞机时旋转。我一直在关注2个教程让我走了。第一个是旋转立方体,我成功完成,第二个是在“触发区域”时为游戏添加声音/音乐。进入,再次,这没问题。

我现在想要在触发区域进入时旋转立方体,所以我想我能够将2结合起来并使其工作,但过了一段时间我就走到了死胡同。由于我缺乏理解,我不知道为什么我写的内容在脚本添加到多维数据集时不起作用。

我遵循的多维数据集教程 - https://unity3d.com/learn/tutorials/topics/scripting/spinning-cube

我遵循的音乐教程 - https://unity3d.com/learn/tutorials/topics/audio/adding-music-your-game

我在基于上述结合的旋转立方体的尝试失败 -

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上运行2个Spin脚本,但由于我还在努力弄清楚并理解我在做什么,所以它似乎并没有起作用。

旋转划线不附加到游戏对象,但只是在Assets文件夹中。

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>();

            }

        }


}

这可能只是一堆废话,但我希望我能走上正轨。

由于

2 个答案:

答案 0 :(得分:3)

当对象进入触发器时,

OnTriggerEnter将被调用一次。

当对象退出触发器时,

OnTriggerExit将被调用一次。

如果您希望对象继续旋转,您可能想尝试不同的策略。

OnTriggerStay是另一个事件,对于当前在触发器内的每个对象,每帧大致会被调用一次。这样您就可以每帧​​调用transform.Rotate一次,以便在每帧上保持一点点旋转。这是一个简单而脆弱的解决方案。

Unity是一种“基于组件”的体系结构 - 您的每个脚本都是一个组件,将多个组件协同工作通常是有利的。您可以创建一个脚本来管理Update事件中的旋转行为,每个帧调用一次,然后创建另一个组件,根据触发器进入/退出启用和禁用旋转脚本。

答案 1 :(得分:0)

这是我的解决方案。

代码(C#):

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;
        }
    }
}