Unity UGUI의 Textα값으로 문자 표시
3351 단어 Unity2DuGUIGIF 이미지 바꾸세요.Unity
개시하다
어쩌면 이것은 당연한 방법일지도 모르지만, 자신이 생각한 방법은 오히려 교묘하게 운용할 수 있다
나는 문장의 쓰기 연습도 보도로 삼고 싶다.
개요
유니티로 이런 느낌을 실현해 봤다는 메시지 표시.
방법
BaseMeshEffect의 반을 계승하여 ModifyMesh를 다시 쓸 준비를 합니다
그 방법 안에서 정점의 알파를 고쳐 쓰다.
소스는 이렇게.using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using System.Collections.Generic;
public class TextAlphaSending : BaseMeshEffect
{
private const int OneSpriteVertex = 6;
private bool _isEnd = false;
private float _alpha = 0f;
private int _charaCount = 0;
private Text _text;
public Text Text
{
get{return _text ?? (_text = GetComponent<Text>()); }
}
/// <summary>
/// 文字表示終了判定
/// </summary>
/// <returns></returns>
public bool IsEnd()
{
return _isEnd;
}
/// <summary>
/// 文字数カウント初期化
/// </summary>
public void Initialize()
{
_charaCount = 0;
_isEnd = false;
}
/// <summary>
///
/// </summary>
/// <param name="vh"></param>
public override void ModifyMesh(VertexHelper vh)
{
var input = new List<UIVertex>();
var output = new List<UIVertex>();
var text = Text;
vh.GetUIVertexStream(input);
var vertexTop = _charaCount * OneSpriteVertex;
if (vertexTop >= input.Count) {
_isEnd = true;
return;
}
for (int i=0; i<vertexTop; ++i) {
output.Add(input[i]);
}
for (int i=vertexTop; i<vertexTop + OneSpriteVertex; ++i) {
var uiVertex = input[i];
uiVertex.color.a = (byte)(255f * _alpha);
output.Add(uiVertex);
}
_alpha += 0.1f;
if (_alpha >= 1f) {
_charaCount++;
_alpha = 0f;
}
vh.Clear();
vh.AddUIVertexTriangleStream(output);
}
}
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class TextSenging : MonoBehaviour
{
private Text _text;
public Text Text
{
get
{
return _text ?? (_text = GetComponent<Text>());
}
}
private TextAlphaSending _textAlphaSending;
public TextAlphaSending TextAlphaSending
{
get
{
return _textAlphaSending ?? (_textAlphaSending = GetComponent<TextAlphaSending>());
}
}
// Use this for initialization
void Start ()
{
TextAlphaSending.Initialize();
Text.text = "【王様】\nおお勇者よ,よくぞ参った";
}
// Update is called once per frame
void Update ()
{
if (!TextAlphaSending.IsEnd()) {
Text.SetAllDirty();
}
}
}
TextSenging Update로 표시된 텍스트가 남아 있는 경우
Text.SetAllDirty에서 ModifyMesh가 호출됩니다.
이렇게 한 글자 한 글자.α값을 변경하여 문자를 표시할 수 있습니다.
문제점으로 삼다α값을 업데이트해야 하므로 프레임당 SetAllDirty
교점을 업데이트해야 합니다.
실제 처리 부하가 검증되지는 않았지만, 컴퓨터 환경에서만 잠깐 대화를 나눴다면 문제가 없었겠죠
만약 이동 환경이라면 매우 심각할 수 있다
UGUI의 정점을 의외로 간단하게 편집한 예로 고려해 주십시오
Reference
이 문제에 관하여(Unity UGUI의 Textα값으로 문자 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuMe03/items/2e85712c36b5a108f161
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
유니티로 이런 느낌을 실현해 봤다는 메시지 표시.
방법
BaseMeshEffect의 반을 계승하여 ModifyMesh를 다시 쓸 준비를 합니다
그 방법 안에서 정점의 알파를 고쳐 쓰다.
소스는 이렇게.using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using System.Collections.Generic;
public class TextAlphaSending : BaseMeshEffect
{
private const int OneSpriteVertex = 6;
private bool _isEnd = false;
private float _alpha = 0f;
private int _charaCount = 0;
private Text _text;
public Text Text
{
get{return _text ?? (_text = GetComponent<Text>()); }
}
/// <summary>
/// 文字表示終了判定
/// </summary>
/// <returns></returns>
public bool IsEnd()
{
return _isEnd;
}
/// <summary>
/// 文字数カウント初期化
/// </summary>
public void Initialize()
{
_charaCount = 0;
_isEnd = false;
}
/// <summary>
///
/// </summary>
/// <param name="vh"></param>
public override void ModifyMesh(VertexHelper vh)
{
var input = new List<UIVertex>();
var output = new List<UIVertex>();
var text = Text;
vh.GetUIVertexStream(input);
var vertexTop = _charaCount * OneSpriteVertex;
if (vertexTop >= input.Count) {
_isEnd = true;
return;
}
for (int i=0; i<vertexTop; ++i) {
output.Add(input[i]);
}
for (int i=vertexTop; i<vertexTop + OneSpriteVertex; ++i) {
var uiVertex = input[i];
uiVertex.color.a = (byte)(255f * _alpha);
output.Add(uiVertex);
}
_alpha += 0.1f;
if (_alpha >= 1f) {
_charaCount++;
_alpha = 0f;
}
vh.Clear();
vh.AddUIVertexTriangleStream(output);
}
}
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class TextSenging : MonoBehaviour
{
private Text _text;
public Text Text
{
get
{
return _text ?? (_text = GetComponent<Text>());
}
}
private TextAlphaSending _textAlphaSending;
public TextAlphaSending TextAlphaSending
{
get
{
return _textAlphaSending ?? (_textAlphaSending = GetComponent<TextAlphaSending>());
}
}
// Use this for initialization
void Start ()
{
TextAlphaSending.Initialize();
Text.text = "【王様】\nおお勇者よ,よくぞ参った";
}
// Update is called once per frame
void Update ()
{
if (!TextAlphaSending.IsEnd()) {
Text.SetAllDirty();
}
}
}
TextSenging Update로 표시된 텍스트가 남아 있는 경우
Text.SetAllDirty에서 ModifyMesh가 호출됩니다.
이렇게 한 글자 한 글자.α값을 변경하여 문자를 표시할 수 있습니다.
문제점으로 삼다α값을 업데이트해야 하므로 프레임당 SetAllDirty
교점을 업데이트해야 합니다.
실제 처리 부하가 검증되지는 않았지만, 컴퓨터 환경에서만 잠깐 대화를 나눴다면 문제가 없었겠죠
만약 이동 환경이라면 매우 심각할 수 있다
UGUI의 정점을 의외로 간단하게 편집한 예로 고려해 주십시오
Reference
이 문제에 관하여(Unity UGUI의 Textα값으로 문자 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuMe03/items/2e85712c36b5a108f161
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using System.Collections.Generic;
public class TextAlphaSending : BaseMeshEffect
{
private const int OneSpriteVertex = 6;
private bool _isEnd = false;
private float _alpha = 0f;
private int _charaCount = 0;
private Text _text;
public Text Text
{
get{return _text ?? (_text = GetComponent<Text>()); }
}
/// <summary>
/// 文字表示終了判定
/// </summary>
/// <returns></returns>
public bool IsEnd()
{
return _isEnd;
}
/// <summary>
/// 文字数カウント初期化
/// </summary>
public void Initialize()
{
_charaCount = 0;
_isEnd = false;
}
/// <summary>
///
/// </summary>
/// <param name="vh"></param>
public override void ModifyMesh(VertexHelper vh)
{
var input = new List<UIVertex>();
var output = new List<UIVertex>();
var text = Text;
vh.GetUIVertexStream(input);
var vertexTop = _charaCount * OneSpriteVertex;
if (vertexTop >= input.Count) {
_isEnd = true;
return;
}
for (int i=0; i<vertexTop; ++i) {
output.Add(input[i]);
}
for (int i=vertexTop; i<vertexTop + OneSpriteVertex; ++i) {
var uiVertex = input[i];
uiVertex.color.a = (byte)(255f * _alpha);
output.Add(uiVertex);
}
_alpha += 0.1f;
if (_alpha >= 1f) {
_charaCount++;
_alpha = 0f;
}
vh.Clear();
vh.AddUIVertexTriangleStream(output);
}
}
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class TextSenging : MonoBehaviour
{
private Text _text;
public Text Text
{
get
{
return _text ?? (_text = GetComponent<Text>());
}
}
private TextAlphaSending _textAlphaSending;
public TextAlphaSending TextAlphaSending
{
get
{
return _textAlphaSending ?? (_textAlphaSending = GetComponent<TextAlphaSending>());
}
}
// Use this for initialization
void Start ()
{
TextAlphaSending.Initialize();
Text.text = "【王様】\nおお勇者よ,よくぞ参った";
}
// Update is called once per frame
void Update ()
{
if (!TextAlphaSending.IsEnd()) {
Text.SetAllDirty();
}
}
}
Reference
이 문제에 관하여(Unity UGUI의 Textα값으로 문자 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YuMe03/items/2e85712c36b5a108f161텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)