藏宝湾网游单机站

 找回密码
 注册

QQ登录

只需一步,快速开始

★【黑暗之光SF★我是大主宰SF】【神将三国SF】★

★【0.1折】★【变态网页游戏私服】★

★神将三国网页版上线送V5 5w元宝 5000w铜币 我是大主宰上线满v,80万元宝,小怪都爆元宝,耐玩长久稳定★

【原始传奇SF/维京传奇SF】【GM包站手游】

★【原始传奇SF/维京传奇SF】【GM包站手游】★

★『战online+原始传奇+维京传奇+伏魔者+魔域永恒+混沌战域』一刀99999999999刀刀光柱★

★全网独家 可以单机 可以互动的传奇!★

★全网独家 可以单机 可以互动的传奇!★

★全网唯一持续更新的可单机游戏!每15-25天更新一次内容,保持游戏新鲜度!! 众多独家的功能特色,众多你没见过的全新玩法,有能力的赚点烟钱,还能偶尔沙城战斗!★

神武端游源码泄露08年神武2复古1比1原版
★08年神武2复古1比1原版金币翼龙免费4月10日新开2区★

★神武端游源码泄露08年神武2复古1比1原版金币翼龙免费4月10日新开2区★

☆春节活动开放放置传奇☆

★春节活动开放放置传奇★

★可白嫖 上班摸鱼类 放置文字传奇游戏(放置休闲)qq群756025698★

【独家RPG文字梦幻】【摸鱼搬砖不氪不肝】

★【独家RPG文字梦幻】【摸鱼搬砖不氪不肝】★

★新区开放,三端互通,适合上班挂机、摸鱼。 休闲放置,不占时间,玩熟了一天只需十几分钟就能轻松搞定。★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★DNF★全职业平衡★公益服★
★DNF★全职业平衡★公益服★

【dnf86版本】【怀旧服】【全职业平衡】【非变态服】【非商业服】【775016356】

★完美国际纯防六职业,4月18号正式开区★

★完美国际纯防六职业,4月18号正式开区 ,上线赠送飞机坐骑,红蓝符★

★本服为纯06版本,1比1匹配,为大长期版本。半年一个新区。。上线1级生活技能全满,包裹仓库全开★

★梦幻16门派全新大唐九黎★

★梦幻16门派全新大唐九黎★

★★新增全新门派九黎城,★不做垃圾,力争什么都做到最好★持续更新,长久稳定★

★承接推广★

★承接推广★

★承接推广★

三职业复古★开局送神装★爆率100%★散人逆袭
★三职业复古★开局送神装★爆率100%★散人逆袭★

★〖双线〗〖无忧传奇〗〖每日新区〗〖开局送神装 100%高爆率 装备元宝打怪爆〗★

★《天使之战MU》经典奇迹重现★

★《天使之战MU》经典奇迹重现★

★2025年热门手游推荐:所有游戏充值永久0.1折,648只需6.48元!原版物价不膨胀★

★真实六职业-战-法-道-弓-刺-僧★

★独家传奇体验RPG玩法真实六职业-战-法-道-弓-刺-僧★

★转生属性,六格装备,称号种类,超多的道士BB,生肖技能 各种全新玩法等你来玩★

★彩虹岛s6独家玩法肝帝天堂★

★彩虹岛s6独家玩法肝帝天堂★

★s6彩虹岛,新服开区,来就送死霸脚底龙晶诸多特效。独家玩法护肝不杆不克,可刷一切★

查看: 266|回复: 2

[原创] 远征ol打怪显示伤害逻辑

[复制链接]
 楼主| 发表于 2025-2-27 12:49:08 | 显示全部楼层 |阅读模式
本帖最后由 bfdz49 于 2025-2-27 14:04 编辑

在《远征OL》中,打怪物显示伤害的代码逻辑主要涉及以下几个方面:
1. 伤害计算公式《远征OL》的伤害计算公式较为复杂,涉及多种属性和加成。以下是其核心逻辑:
(1)攻击力计算攻击力由以下部分组成:
  • 基础攻击力(物理或法术攻击)。
  • 状态、技能、装备、五行、三魂、镶嵌等附加攻击
(2)防御力计算防御力的计算方式与攻击力类似,也是基于基础防御力加上各种加成
(3)伤害公式伤害计算公式为:
  • 真实伤害 = 攻击力 × 技能系数 × (1 - 免伤系数)
  • 免伤系数 = 防御力 / (防御力 + C)
  • C 是一个常量,与技能系数和攻击力有关
2. 伤害显示逻辑当玩家攻击怪物时,伤害值的显示需要经过以下步骤:
(1)战斗进程战斗进程会生成攻击方和防守方的状态记录实例(#battle_status),并通过这些实例计算伤害
伤害计算


  • 战斗进程会检查攻击距离、技能冷却时间等条件。
  • 计算双方的持续效果(buff)和技能效果。
  • 根据伤害公式计算最终伤害[color=var(--rag-color)][backcolor=var(--rag-bg-color)]
(3)结果广播计算完成后,战斗进程会更新双方状态,并将伤害结果广播到客户端,显示在怪物头顶
3. 法宝伤害计算《远征OL》中的法宝伤害计算采用减法公式:
  • 法宝伤害 = (法宝威力 - 相应抗性) × 伤害系数
  • 法宝威力高于抗性时,伤害呈线性提升;若低于抗性,伤害可能为零
4. 伤害显示优化为了提升玩家体验,伤害数字的显示方式可以通过客户端设置调整,例如:
  • 开启或关闭伤害数字显示:/console floatingCombatTextCombatDamage 1
  • 调整伤害数字的大小和显示方向
5. 代码逻辑示例以下是简化的伪代码,展示如何计算和显示伤害:
  1. // 伤害计算函数
  2. float CalculateDamage(float attack, float defense, float skillMultiplier, float C) {
  3.     float damage = attack * skillMultiplier;
  4.     float damageReduction = defense / (defense + C);
  5.     float finalDamage = damage * (1 - damageReduction);
  6.     return finalDamage;
  7. }

  8. // 战斗流程
  9. void Battle(Player attacker, Monster defender, Skill skill) {
  10.     float attack = attacker.GetAttack();
  11.     float defense = defender.GetDefense();
  12.     float skillMultiplier = skill.GetMultiplier();
  13.     float C = skill.GetConstant();

  14.     float damage = CalculateDamage(attack, defense, skillMultiplier, C);

  15.     // 更新怪物血量并广播结果
  16.     defender.TakeDamage(damage);
  17.     BroadcastDamage(damage);
  18. }
复制代码
  • 创建显示预制体(Prefab)
    • 建立一个空物体作为父物体(如HitReport),并添加两个子物体,每个子物体添加Text Mesh组件用于显示信息。
    • 为父物体编写脚本,控制文字的显示、渐隐和移动效果。

  • 脚本实现
    1. using UnityEngine;

    2. public class Hit : MonoBehaviour
    3. {
    4.     public TextMesh yellow;
    5.     public TextMesh black;
    6.     float startTime;
    7.     float currentTime;
    8.     public float lifespan = 2.0f; // 文字显示时间
    9.     public float fadeTime = 1.0f; // 渐隐开始时间
    10.     public float fadeSpeed = 0.5f; // 渐隐速度
    11.     public float maxSize = 1.5f; // 最大尺寸
    12.     public float speed = 5.0f; // 上升速度
    13.     public string text;

    14.     void Start()
    15.     {
    16.         startTime = Time.fixedTime;
    17.     }

    18.     void Update()
    19.     {
    20.         currentTime = Time.fixedTime - startTime;

    21.         if (currentTime > lifespan)
    22.         {
    23.             Destroy(gameObject);
    24.         }

    25.         if (currentTime > fadeTime)
    26.         {
    27.             float fade = (fadeTime - (currentTime - fadeTime)) * (1 / fadeSpeed);
    28.             Color tempColor = yellow.color;
    29.             tempColor.a = fade;
    30.             yellow.color = tempColor;

    31.             tempColor = black.color;
    32.             tempColor.a = fade;
    33.             black.color = tempColor;
    34.         }

    35.         if (transform.localScale.x < maxSize)
    36.         {
    37.             transform.localScale = new Vector3(1.0f, 1.0f, 1.0f) * (0.01f + currentTime) * 3.0f;
    38.         }
    39.         transform.position += (Vector3.up * Time.deltaTime * speed);
    40.         transform.LookAt(Camera.main.transform.position);

    41.         yellow.text = text;
    42.         black.text = text;
    43.     }
    44. }
    复制代码
    实例化显示效果:在攻击函数中,生成并显示伤害数字

    1. Transform tm = (Transform)Instantiate(hitReport, (target.position + new Vector3(0.0f, 1.6f, 0.0f)), Quaternion.identity);
    2. tm.gameObject.SetActive(true);
    3. Hit tmHit = tm.GetComponent<Hit>();
    4. tmHit.text = ((int)(Mathf.Abs(damage))).ToString();
    复制代码




发表于 2025-2-27 13:43:56 | 显示全部楼层
感谢大佬的分享   但是没源码啊
发表于 2025-2-27 13:52:31 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明

排行榜|联系我们|小黑屋|手机版|Archiver|游戏藏宝湾 |

GMT+8, 2025-4-26 16:33 , Processed in 0.053883 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表