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(); ?>
解决步骤
修复ScrollView布局设置
- 给ScrollView的Content对象添加
Vertical Layout Group组件,设置Spacing为合适值(如10),勾选Control Child Size下的Height,勾选Child Force Expand下的Width。 - 给Content添加
Content Size Fitter组件,设置Vertical Fit为Preferred Size。
- 给ScrollView的Content对象添加
处理空行问题
- PHP中用
implode("\n", $users)代替循环拼接,避免最后一行多空换行。 - Unity脚本中过滤空行,防止生成空的TextMeshPro组件占用布局空间。
- PHP中用
检查TextMeshPro预制体设置
- 确保预制体的
RectTransform高度非固定值,或设置Vertical Overflow为Wrap让文本自动换行。 - 预制体的
TextMeshProUGUI组件中,将Horizontal Alignment设为Left,保证文本正常显示。
- 确保预制体的
优化异步请求逻辑
- 用
await req.SendWebRequest()代替手动循环等待代码,更高效且符合Unity异步规范。
- 用
内容的提问来源于stack exchange,提问作者rafi 415
相关产品推荐
相关产品推荐

