角色信息展示

展示角色使用Render Texture,这个Render Texture相机放在Main City Scene场景当中,每次进入主城场景时,先把这个摄像机关闭,

MainCitySys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private Transform charCamTrans;

public void EnterMainCity()
{
MapCfg mapData = resSvc.GetMapCfgData(Constants.MainCityMapID);
resSvc.AsyncLoadScene(mapData.sceneName, () =>
{
//加载游戏主角
LoadPlayer(mapData);
//打开主城场景UI
mainCityWnd.SetWndState();
//播放主城背景音乐
audioSvc.PlayBGMusic(Constants.BGMainCity);
//关闭人物展示相机,在打开角色详情界面时再打开
if(charCamTrans != null)
{
charCamTrans.gameObject.SetActive(false);
}

});
}

MainCitySys还要提供打开关闭InfoWnd的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void OpenInfoWnd()//这个方法在MainCityWnd调用
{
if(charCamTrans == null)
{
charCamTrans = GameObject.FindGameObjectWithTag("CharShowCam").transform;
}
//设置人物展示相机的相对位置
charCamTrans.localPosition = playerController.transform.position + playerController.transform.forward * 3.8f + new Vector3(0, 1.2f, 0);//这个值要不断调整
charCamTrans.localEulerAngles = new Vector3(0, 180 + playerController.transform.localEulerAngles.y, 0);
charCamTrans.localScale = Vector3.one;
charCamTrans.gameObject.SetActive(true);
infoWnd.SetWndState();
}

public void CloseInfoWnd()//这个方法在InfoWnd调用
{
if(charCamTrans != null)
{
charCamTrans.gameObject.SetActive(false);
}
}

角色触摸旋转

InfoWnd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public RawImage charShow;

private void RegTouchEvts()
{
OnPointerDown(charShow.gameObject, (evt) =>
{
startPos = evt.position;
MainCitySys.Instance.SetStartRotate();
});

OnPointerDrag(charShow.gameObject, (evt) =>
{
float rotate = -(evt.position.x - startPos.x)*0.4f;//使用负数,因为方向是相反的
MainCitySys.Instance.SetPalyerRotate(rotate);
});
}

MainCitySys:

1
2
3
4
5
6
7
8
9
private float startRotate = 0;
public void SetStartRotate()
{
startRotate = playerController.transform.localEulerAngles.y;
}
public void SetPalyerRotate(float degrees)
{
playerController.transform.localEulerAngles = new Vector3(0,startRotate + degrees, 0);
}