You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity ScrollView中TextMeshPro文本重叠问题求助

Unity ScrollView 文本重叠问题解决

问题场景

PHP接口在网页中可正常输出用户数据,但Unity运行时,ScrollView内的TextMeshPro文本出现重叠,无法正常阅读。尝试在PHP中添加<br>、在脚本中用\n处理换行均无效。

相关代码

AdminUI.cs

using UnityEngine;
using TMPro;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine.Networking;

public class AdminUI : MonoBehaviour
{
    public TextMeshProUGUI userPrefab; // 用于显示用户邮箱和用户名的TextMeshProUGUI预制体
    public Transform contentPanel; // 挂载TextMeshPro组件的面板

    async void Start()
    {
        // 从数据库获取用户数据
        string usersText = await Getusers.GetUsersText();

        if (string.IsNullOrEmpty(usersText))
            return;

        // 按换行符分割文本
        string[] lines = usersText.Split('\n');

        // 显示用户数据
        foreach (string line in lines)
        {
            // 过滤空行,避免生成空的文本组件
            if (string.IsNullOrWhiteSpace(line))
                continue;

            // 实例化TextMeshPro组件
            TextMeshProUGUI userText = Instantiate(userPrefab, contentPanel);

            // 设置文本内容
            userText.text = line;
        }
    }
}

public static class Getusers
{
    readonly static string SERVER_URL = "http://localhost:80/Cryppy";

    public static async Task<string> GetUsersText()
    {
        string GET_USERS_URL = $"{SERVER_URL}/GetUsers.php";
        using UnityWebRequest req = UnityWebRequest.Get(GET_USERS_URL);

        // 异步发送请求并等待完成
        await req.SendWebRequest();

        // 检查请求结果
        if (req.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError($"获取用户数据失败: {req.error}");
            return null;
        }
        else
        {
            return req.downloadHandler.text;
        }
    }
}

GetUsers.php

<?php
// 连接数据库
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "cryppy_nightfall";

$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 查询用户数据
$sql = "SELECT email, username FROM user";
$result = $conn->query($sql);

// 处理查询结果
if ($result->num_rows > 0) {
    $users = [];
    // 遍历每行数据
    while($row = $result->fetch_assoc()) {
        // 拼接邮箱和用户名
        $users[] = $row["email"] . ":" . $row["username"];
    }
    // 用换行符连接所有用户数据,避免最后多一个空行
    echo implode("\n", $users);
} else {
    echo "0 results";
}
$conn->close();
?>

解决步骤

  1. 修复ScrollView布局设置

    • 给ScrollView的Content对象添加Vertical Layout Group组件,设置Spacing为合适值(如10),勾选Control Child Size下的Height,勾选Child Force Expand下的Width。
    • 给Content添加Content Size Fitter组件,设置Vertical Fit为Preferred Size。
  2. 处理空行问题

    • PHP中用implode("\n", $users)代替循环拼接,避免最后一行多空换行。
    • Unity脚本中过滤空行,防止生成空的TextMeshPro组件占用布局空间。
  3. 检查TextMeshPro预制体设置

    • 确保预制体的RectTransform高度非固定值,或设置Vertical Overflow为Wrap让文本自动换行。
    • 预制体的TextMeshProUGUI组件中,将Horizontal Alignment设为Left,保证文本正常显示。
  4. 优化异步请求逻辑

    • 用await req.SendWebRequest()代替手动循环等待代码,更高效且符合Unity异步规范。

内容的提问来源于stack exchange,提问作者rafi 415

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:50:00