MEGALOVANIA MEGALOVANIA

游戏开发中

目录
CKPA开发日志 其二十三
/      

CKPA开发日志 其二十三

工作日志

  • 今天本来打算写词条相关的东西,但是感觉大部分时间都在处理 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 的逻辑,如果要做动态的战斗头像,需要新知识来研究下怎么做
  • 今天依然早起了,但是效率不高.开发中有时候会觉得自己进度还可以,然后就有点掉以轻心发癫了.还是应该按部就班脚踏实地地干活.当然,不是否定今天的工作,只是感觉自己有机会做得更好.

今日目标

  • 完善现在的 UI 效果
  • 完成词条系统

标题:CKPA开发日志 其二十三
作者:matengli110
地址:https://www.sunsgo.world/articles/2024/04/16/1713224704616.html