【问题标题】:Where is wrong code c# oop in Unity3dUnity3d中的错误代码c# oop在哪里
【发布时间】:2013-07-25 00:57:52
【问题描述】:

现在我的项目中有 2 个班级。
我想在类 1 中使用方法类 2。
而这段代码c#

1 类

public class controlBuilding : MonoBehaviour
{
    ScaleModel cScale = new ScaleModel();

    public void Start()
    {

    }

    public void Update()
    {
        cScale.touchScaleB1();
    }

    public void OnGUI()
    {

    }
}

2 类

public class ScaleModel : MonoBehaviour
{
    public void touchScaleB1()
    {
        if (Input.touchCount >= 2)
        {
            Touch touch1 = Input.touches[0];
            Touch touch2 = Input.touches[1];

            if (touch1.phase == TouchPhase.Moved || touch2.phase == TouchPhase.Moved)
            {
                float pinchDistance = Vector2.Distance(touch1.position, touch2.position);
                float prevDistance = Vector2.Distance(touch1.position - touch1.deltaPosition,
                                                       touch2.position - touch2.deltaPosition);
                float pinchDistanceDelta = pinchDistance - prevDistance;

                if (pinchDistanceDelta > 0)
                {
                    float mScaleFactor;
                    mScaleFactor = b1_floor1dae.transform.localScale.x;
                    mScaleFactor += 0.0004f;
                    b1_floor1dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floor2dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floor3dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floor4dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floorTop.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_other.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                }
                else if (pinchDistanceDelta < 0)
                {
                    float mScaleFactor;
                    mScaleFactor = b1_floor1dae.transform.localScale.x;
                    mScaleFactor -= 0.0004f;
                    b1_floor1dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floor2dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floor3dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floor4dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_floorTop.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                    b1_other.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor);
                }
            }
        }
    }
}

为什么我触摸屏幕不是事件?代码哪里出错了?

对不起,我英语不好。

非常感谢您的回答。

【问题讨论】:

  • 从 Monobehaviour 派生的类不应该用 new 实例化。而是使用Instantiate。您是否尝试过添加一些调试来验证问题是 Input.touches?

标签: c# oop unity3d


【解决方案1】:

如果您希望 ScaleModel 只是一个实用程序类: 不要从 MonoBehaviour 继承它。因此,您可以使用“new”关键字将其创建为常规类。

如果您希望 ScaleModel 成为游戏对象组件: 将您的两个脚本添加到同一个游戏对象并像这样更改您的第一个类... (调用GetComponent,就是在同一个游戏对象上搜索ScaleModel组件)

public class controlBuilding : MonoBehaviour
{
    ScaleModel cScale;

    public void Start()
    {
        cScale = GetComponent<ScaleModel>();
    }

    public void Update()
    {
        cScale.touchScaleB1();
    }

    public void OnGUI()
    {

    }
}

【讨论】:

  • 您看到的错误是什么?如果您需要帮助,您应该提供详细信息:)
  • 当我捏放大和缩小时,touchScaleB1 功能不起作用。但是当我将 touchScaleB1 中的代码放入“public void Update”时,功能正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
相关资源
最近更新 更多