125 lines
3.5 KiB
C#
125 lines
3.5 KiB
C#
using Framework;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
namespace GameWrapper.Story
|
|
{
|
|
public class CmpPreviewTalk : MonoBehaviour
|
|
{
|
|
|
|
public IStoryPlayer owner;
|
|
|
|
public Transform bgTrans;
|
|
|
|
public TextMeshPro textMesh;
|
|
|
|
private string _cacheStr;
|
|
private string _cachePlayerName;
|
|
private int _playerType;
|
|
|
|
private bool _isHide = true;
|
|
|
|
public void Hide(bool force = false)
|
|
{
|
|
if (_isHide && !force) return;
|
|
_isHide = true;
|
|
// if (Application.isPlaying)
|
|
// {
|
|
// // 在运行中
|
|
// return;
|
|
// }
|
|
if (gameObject == null) return;
|
|
if (gameObject.activeSelf)
|
|
{
|
|
gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
public void SetText(string str,
|
|
string playerName,
|
|
int playerType)
|
|
{
|
|
if (Application.isPlaying)
|
|
{
|
|
// 在运行中
|
|
_SetToUI(str, playerName, playerType);
|
|
return;
|
|
}
|
|
if (!gameObject.activeSelf)
|
|
{
|
|
gameObject.SetActive(true);
|
|
}
|
|
_isHide = false;
|
|
// 看向摄像机
|
|
var storyCamera = Camera.main;
|
|
if (storyCamera == null) return;
|
|
var cameraTrans = storyCamera.transform;
|
|
transform.rotation = cameraTrans.rotation;
|
|
|
|
if (owner.playerType == (int)EStoryPlayerType.NoOne)
|
|
{
|
|
// 旁白,需要同步位置到相机
|
|
var cameraPos = cameraTrans.position;
|
|
// 向内部移动
|
|
var dir = cameraTrans.forward;
|
|
var offset = 2f;
|
|
cameraPos += dir * offset;
|
|
transform.position = cameraPos;
|
|
}
|
|
|
|
if (_cachePlayerName == playerName && _cacheStr == str && _playerType == playerType) return;
|
|
_playerType = playerType;
|
|
_cachePlayerName = playerName;
|
|
_cacheStr = str;
|
|
|
|
if (playerName == "旁白")
|
|
{
|
|
textMesh.text = str;
|
|
}
|
|
else
|
|
{
|
|
textMesh.text = playerName + ":" + str;
|
|
}
|
|
|
|
|
|
// 更新背景大小
|
|
var size = textMesh.GetPreferredValues();
|
|
bgTrans.localScale = new Vector3(size.x, size.y, 1f);
|
|
}
|
|
|
|
private void _SetToUI(string str,
|
|
string playerName,
|
|
int playerType)
|
|
{
|
|
if (_cachePlayerName == playerName && _cacheStr == str && _playerType == playerType) return;
|
|
_playerType = playerType;
|
|
_cachePlayerName = playerName;
|
|
_cacheStr = str;
|
|
|
|
var sendData = new EDPlayerTalkData();
|
|
sendData.playerId = owner.playerId;
|
|
sendData.talkMsg = str;
|
|
sendData.isPangbai = owner.playerType == EStoryPlayerType.NoOne;
|
|
if (!IsEditor)
|
|
{
|
|
EventManager.Instance.Send(EventManager.EventName.STORY_HANDLE_PLAYER_TALK_DATA, sendData);
|
|
}
|
|
}
|
|
|
|
public static bool IsEditor
|
|
{
|
|
get
|
|
{
|
|
#if UNITY_EDITOR
|
|
if (UnityEditor.EditorApplication.isPlaying == false)
|
|
{
|
|
return true;
|
|
}
|
|
#endif
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|