【问题标题】:how to cross out text on displayed on the screen?如何划掉屏幕上显示的文字?
【发布时间】:2022-06-11 02:28:03
【问题描述】:

在我的游戏中,有些对象被标记为“TargetObj”,这些对象的名称显示在屏幕上,如下所示:

GameObject[] targetObjects;
List<GameObject> targetObjectsList; 
private TextMeshProUGUI mytext;
public TMP_FontAsset FontAssetA;
[SerializeField] GameObject TargetsCanvas;
void Start()
    {
        mainCamera = Camera.main;
        targetObjects = GameObject.FindGameObjectsWithTag("TargetObj");

        targetObjectsList = new List<GameObject>();
        foreach (var obj in targetObjects)
        {
            mytext = CreateText(TargetsCanvas.transform);
            mytext.text = "• " + obj.name;
            mytext.font = FontAssetA;   
        }
    }
static TextMeshProUGUI CreateText(Transform parent)
    {
        var go = new GameObject();
        go.transform.parent = parent;
        var text = go.AddComponent<TextMeshProUGUI>();
        text.fontSize = 20;
        return text;
    }

它们看起来像这样:

TargetsCanvas 检查员:

一旦玩家拿起所有标记的对象,他就赢了:

     if (PickingUp)
            {
                if (currentlyPickedUpObject == null)
                {
                    if (lookObject != null)
                    {
                        PickupObject();
                        if (lookObject.CompareTag("TargetObj") && !targetObjectsList.Contains(lookObject.gameObject))
                        {
                            if (aSource)
                            {
                                aSource.Play();
                            }
                            targetObjectsList.Add(lookObject.gameObject);
                            if (targetObjectsList.Count == targetObjects.Length)
                            {
                                winUI.SetActive(true);
                                Time.timeScale = 0f;
                                //SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
                                //Time.timeScale = 1f;
                            }
    
                        }
                    }
 public void PickupObject()
        {

         physicsObject = lookObject.GetComponentInChildren<PhysicsObjects>();
         currentlyPickedUpObject = lookObject;
         pickupRB = currentlyPickedUpObject.GetComponent<Rigidbody>();
         pickupRB.constraints = RigidbodyConstraints.FreezeRotation;
         physicsObject.playerInteractions = this;
       pickupRB.transform.parent = PickupParent.transform;

        //StartCoroutine(physicsObject.PickUp()); 

    }

一旦拾起该对象,我将尝试在屏幕上划掉名称对象。我将如何实现这一目标?

【问题讨论】:

  • textmesh pro 字体不能让你做一个划掉的字体吗?

标签: unity3d


【解决方案1】:

使用 TextMeshPro Text 时,您可以添加富文本标签来删除字符串的任何部分。

例如:

  1. 确保在 TMP 文本组件的额外设置下启用富文本

  2. 使用开始标记和结束标记来定义删除线的开始和结束位置

在代码中设置它的一个例子是

public string textToStrike; //"Coffee Cup"
const string STRIKE_START = "<s>";
const string STRIKE_END = "</s>";
outputText = STRIKE_START + textToStrike + STRIKE_END;

结果 outputText = 咖啡杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多