工作日志
- 今天本来打算写词条相关的东西,但是感觉大部分时间都在处理 UI.果然处理 UI 是最繁杂开发效率相对较低的活了.主要是处理了战斗相关的 UI
- 大概改了下这个弹窗,但是还没有填充内容
- 基本上仿照神界原罪,顶部添加了一个行动顺次指示的东西.红色为敌人.白色为主角以及相关队友.
- 这里的角色图是通过 Rendertexture 拿到的.大概代码如下
1public void SetOnCharacter(ActorViewContainer viewContainer)
2{
3 var _camera = Instantiate(camera).GetComponent<Camera>();
4 _camera.transform.localPosition = new Vector3(0, 1.3f, 2.5f);
5 _camera.transform.localRotation = Quaternion.Euler(0, 0, 0);
6
7 RenderTexture rd = new RenderTexture(rt);
8 _camera.targetTexture = rd;
9 // _camera.
10
11 var obj = Instantiate(viewContainer.GetViewObject(), _camera.gameObject.transform);
12 obj.transform.localPosition = new Vector3(0, -1, 2);
13 obj.transform.localRotation = Quaternion.Euler(0, 180, 0);
14 viewCameraDict.Add(viewContainer, rd);
15
16 foreach (var item in obj.GetComponentsInChildren<Renderer>())
17 {
18 item.material.shader = Resources.Load<Shader>("Shader/NewUnlitShader");
19 }
20
21 _camera.Render();
22 _camera.enabled = false;
23
24 obj.SetActive(false);
25}
- 本来想做那种完全动态的,但是解决不了的一个问题是,当相机捕捉到了多个角色的时候,因为角色都是处于同一个 Layer 的,这时候会导致同一个摄像机下的 RT 捕捉到多个角色.没想好怎么解决,可能要看一下怎么通过多通道渲染来解决这类的问题.
- 鼠标移动到指定角色的时候会显示角色的血量信息以及名字.当点击上方的行动次序牌的时候也会显示,并且聚焦到所点击的角色.
- 为了让上面说的点击 UI 能够脱离 3D 物体的点击,建了一个通用方法来判定点击:其实思路很简单,就是先判断点击鼠标抬起前和鼠标抬起后是否是同一个位置.
- 关于是否点击到 UI 的问题,用的是 InputSystemUIInputModule(其实就是新版输入系统的 EventSystem)上的 GetLastRaycastResult 方法看拿到的是否是 Drag 对象(全屏的一个 panel,用来负责拖动),如果不是则证明有 UI 在上层,直接 Return 掉.
优化事项
- 应该优化一下 RT 的逻辑,如果要做动态的战斗头像,需要新知识来研究下怎么做
- 今天依然早起了,但是效率不高.开发中有时候会觉得自己进度还可以,然后就有点掉以轻心发癫了.还是应该按部就班脚踏实地地干活.当然,不是否定今天的工作,只是感觉自己有机会做得更好.
今日目标