首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >触发时旋转立方体- C#统一

触发时旋转立方体- C#统一
EN

Stack Overflow用户
提问于 2017-09-07 20:51:18
回答 2查看 419关注 0票数 0

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

当对撞机进入立方体的盒子对撞机时,我试图得到一个立方体(这是一个进口的FBX和材料)旋转。我一直在遵循两个教程,以使我走。第一个是旋转立方体,这是我成功完成的,第二个是添加声音/音乐到游戏时,一个‘触发区’被输入,再次,这是没有问题的。

现在,当进入触发器区域时,我希望立方体旋转,所以我想我可以组合2并使它工作,但是过了好一会儿,我就走到了死胡同。由于我缺乏理解,所以当脚本被添加到多维数据集时,我不知道为什么我所写的东西不能工作。

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

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

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

代码语言:javascript
运行
复制
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);
            }

        }


}

任何帮助都将不胜感激。

谢谢

接下来,我尝试创建一个脚本(基于来自其他问题和答案的大量信息),该脚本要求在TriggerEnter和TriggerExit上运行2个Spin脚本,但是由于我仍然在尝试并理解我在做什么,它似乎不起作用。

旋转纸片不附加到游戏对象,而只是在资产文件夹中。

代码语言:javascript
运行
复制
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>();

            }

        }


}

这可能是一堆胡说八道,但我希望我在正确的轨道上。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-07 21:08:03

当对象进入触发器时,将只调用一次OnTriggerEnter

当对象退出触发器时,将只调用一次OnTriggerExit

如果您希望对象继续旋转,您可能需要尝试另一种策略。

OnTriggerStay是另一个事件,对于当前处于触发器中的每个对象,每帧大约调用一次。这将允许您在每个帧上调用transform.Rotate一次,以便在每个帧上保持旋转一点。这是一个简单而脆弱的解决方案。

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

票数 3
EN

Stack Overflow用户

发布于 2017-09-08 19:36:17

这是我的解决方案。

代码(C#):

代码语言:javascript
运行
复制
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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46104901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档