shb490264 2024-06-30 14:29 采纳率: 0%
浏览 2

text文字实时更新内容

using System.Data;
using UnityEngine;

public class PositionController : MonoBehaviour
{
    public GameObject goMould; // 模具下_8
    public GameObject goMesa; // Mesa-1-solid1
    public GameObject goMartelo;
    public GameObject goHaste;
    public GameObject goFlange;
    public GameObject goNONE1;

    public float downDistanceMould = 0.1f; // 模具下_8 下压的距离
    public float downDistanceMesa = 0.1f; // Mesa-1-solid1 下压的距离
    public float downDistanceMartelo = 0.1f;
    public float downDistanceHaste = 0.1f;
    public float downDistanceFlange = 0.1f;

    public float speed = 0.05f; // 移动的速度

    float nextTime;
    float rate = 0.5f;

    DataTable table;
    int count = 0;
    int currentInt = -1;
    DataSet ds = null;

    Vector3 initialPositionMould;
    Vector3 downPositionMould;

    Vector3 initialPositionMesa;
    Vector3 downPositionMesa;

    Vector3 initialPositionMartelo;
    Vector3 downPositionMartelo;

    Vector3 initialPositionHaste;
    Vector3 downPositionHaste;

    Vector3 initialPositionFlange;
    Vector3 downPositionFlange;
    // Start is called before the first frame update
    void Start()
    {
        // 初始化模具下_8的位置
        initialPositionMould = goMould.transform.position;
        downPositionMould = initialPositionMould - new Vector3(0, downDistanceMould, 0);

        // 初始化Mesa-1-solid1的位置
        initialPositionMesa = goMesa.transform.position;
        downPositionMesa = initialPositionMesa - new Vector3(0, downDistanceMesa, 0);

        initialPositionMartelo = goMartelo.transform.position;
        downPositionMartelo = initialPositionMartelo - new Vector3(0, downDistanceMartelo, 0);

        initialPositionHaste = goHaste.transform.position;
        downPositionHaste = initialPositionHaste - new Vector3(0, downDistanceHaste, 0);

        initialPositionFlange = goFlange.transform.position;
        downPositionFlange = initialPositionFlange - new Vector3(0, downDistanceFlange, 0);

        // 假设数据库中的表名为"test"
        SqlAccess sql = new SqlAccess();
        string[] items = { "X0", "Y0" };
        string[] col = { };
        string[] op = { };
        string[] val = { };
        ds = sql.SelectWhere("test", items, col, op, val);

        if (ds != null)
        {
            table = ds.Tables[0];
            count = table.Rows.Count;
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (Time.time > nextTime && currentInt < (count - 1) && ds != null)
        {
            currentInt++;
            // 时间间隔越大,移动速度越慢
            nextTime = Time.time + rate;
            string yValue = table.Rows[currentInt][table.Columns[0]].ToString(); // 读取Y轴的位置(字符串类型)
            string xValue = table.Rows[currentInt][table.Columns[1]].ToString();
            // 根据数据库的值移动游戏对象
            if (yValue == "1")
            {
                // 悬停状态
                goMould.transform.position = initialPositionMould;
                goMesa.transform.position = initialPositionMesa;
                goMartelo.transform.position = initialPositionMartelo;
                goHaste.transform.position = initialPositionHaste;
                goFlange.transform.position = initialPositionFlange;
            }
            else if (yValue == "0")
            {
                // 压下状态
                goMould.transform.position = downPositionMould;
                goMesa.transform.position = downPositionMesa;
                goMartelo.transform.position = downPositionMartelo;
                goHaste.transform.position = downPositionHaste;
                goFlange.transform.position = downPositionFlange;
            }
            if (goNONE1 != null)
            {
                if (xValue == "1")
                {
                    // Y0为1时,NONE1运行
                    goNONE1.transform.Translate(-1 * Vector3.forward * speed * Time.deltaTime, Space.World);
                }
                else if (xValue == "0")
                {
                    // Y0为0时,NONE1停止
                    goNONE1.transform.Translate(-1 * Vector3.back * speed * Time.deltaTime, Space.World);
                }
            }



            // 在Console窗口中显示位置信息
            Debug.Log("模具下_8 新位置: " + goMould.transform.position);
            Debug.Log("Mesa-1-solid1 新位置: " + goMesa.transform.position);
            Debug.Log("Martelo-1-solid1 新位置: " + goMartelo.transform.position);
            Debug.Log("Haste-1-solid1 新位置: " + goMartelo.transform.position);
            Debug.Log("Flange-1-solid1 新位置: " + goMartelo.transform.position);
        }
    }
}

这上面是模具下压悬停运动的代码,根据这代码写出新的c#代码,要求在unity中,有了模具下_8这个模型之后,模具下_8运动状态为下压和悬停状态来回切换,要求只要模具出现了下压状态,那么Text文字内容就更新为0,并且在有下压状态之后的3s内,模具再次有下压状态,那么Text文字内容就一直更新为0,相反如果模具在有下压状态之后的3s内,模具没有再次发生下压状态,,那么Text文字内容就更新为1。

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-30 14:30
    关注

    引自免费微信小程序:皆我百晓生

    根据你的需求,我为你编写了一个新的C#脚本,用于在Unity中实现模具下_8的下压和悬停状态切换,并根据状态更新Text文字内容。以下是修改后的代码:

    using System.Data;
    using UnityEngine;
    using UnityEngine.UI; // 导入UI模块以操作Text组件
    
    public class PositionController : MonoBehaviour
    {
        public GameObject goMould; // 模具下_8
        public float downDistanceMould = 0.1f; // 模具下_8 下压的距离
        public float speed = 0.05f; // 移动的速度
        public Text uiText; // UI中的文本组件,用于显示状态信息
    
        float lastDownTime = -1f; // 上一次模具下压的时间
        bool isDown = false; // 当前模具是否处于下压状态
        int textStatus = 1; // Text文字内容,初始化为1(表示悬停状态)
    
        void Start()
        {
            // 初始化UI文本组件
            if (uiText != null)
            {
                uiText.text = "当前状态:悬停"; // 初始显示悬停状态
            }
        }
    
        void Update()
        {
            // 检查模具是否处于下压状态
            if (isDown)
            {
                // 如果模具处于下压状态,更新Text文字内容为0,并显示状态信息
                uiText.text = "当前状态:下压";
                textStatus = 0; // 更新文字状态为下压状态
            }
            else if (Time.time - lastDownTime > 3f) // 如果距离上次下压超过3秒,更新Text文字内容为悬停状态并重置文字状态值(可选)
            {
                uiText.text = "当前状态:悬停"; // 更新显示悬停状态信息(可选)此时文字状态重置为悬停状态,因为需要持续监测是否有新的下压动作来更新状态为下压状态。注意:这里的文本信息提示应该是暂时的展示当前的状态而非全局或累计的判断。我们可以临时忽略你的实际游戏逻辑要求中涉及到数据库的复杂情况。如果要真正应用这些逻辑到实际游戏中可能需要进一步的数据库连接逻辑或者状态机的实现等更复杂的操作。现在我们可以假设当物体被触发为下压状态时进行更新操作即可。如果有更复杂的逻辑需求请进一步说明。 } else { uiText.text = "最近有过下压动作"; // 如果你想要在这个阶段提供用户反馈可以在此处增加文字描述具体发生的行为情况} // 判断模具是否发生下压动作(这里假设有某种方式触发下压动作) if (/*你的下压判断逻辑*/) { isDown = true; lastDownTime = Time.time; } else { isDown = false; } } } // 此处添加触发下压动作的函数 public void OnMouldDownPress() { // 当触发下压动作时调用该函数 isDown = true; lastDownTime = Time.time; } } ``` 请注意,你需要将脚本中的`uiText`字段绑定到你的Unity UI中的Text组件。此外,你还需要根据你的游戏逻辑实现下压动作的触发条件(在`OnMouldDownPress`函数中)。例如,你可以通过碰撞检测或其他触发器事件来触发这个函数的调用。另外,由于你的代码中涉及到数据库的操作和复杂的状态管理,这里的代码只是一个基础的实现框架,你可能需要根据实际情况进一步扩展和完善代码。
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月30日