Reading view

There are new articles available, click to refresh the page.

游戏表现策划(远程)

roumengli888: 薪资:面议

职位概述
我们正在寻找一位 游戏表现策划,负责参与从概念到上线的完整游戏开发流程。
该职位将深度参与游戏的视觉表现与交互体验设计,统筹剧情演出、镜头节奏、美术资源与系统表现的整体呈现,打造兼具沉浸感与表现力的游戏体验。
需要具备对 游戏表现、交互逻辑、美术资源管理与用户体验优化 的综合理解,同时与美术、程序、文案、动画、音效等多团队紧密合作,推动创意落地与品质提升,确保每个细节都服务于整体体验。
我们希望你是一位拥有 强烈责任心和自我驱动力 的创作者,能够主动发现问题、推动解决,并对工作成果的质量保持持续的高标准与执着追求。
主要职责
分析玩家反馈与市场趋势,结合策划目标与用户需求,提出合理的交互与体验优化方案;
设计游戏的交互结构与操作流程,确保逻辑清晰、体验流畅、符合玩家使用习惯;
深入理解游戏系统、角色、场景与 UI 等视觉需求,分析并拆解所需美术资源;
把控角色、场景、UI 等资源品质,细化人物特征、服装、动作与风格表现,确保美术风格与项目目标统一;
规划镜头与节奏表现,融合系统与操作反馈,提升游戏的视觉表现力与沉浸体验;
管理外包资源与美术制作流程,监督交付质量与进度,保障资源符合项目标准;
建立与维护资源管理体系,完善命名规范与版本归档机制,确保资源清晰、可追溯;
推动跨部门合作,与美术、程序、音效、动画等团队协作,协调沟通与进度管理,确保项目高效落地。

要求
本科及以上学历,2 年及以上游戏美术策划或交互设计经验,熟悉游戏研发流程;
对二次元游戏充满热情,体验各类游戏(主机、手游、PC 、独立游戏等),具备广泛的游戏涉猎与玩家视角,有完整项目经验者优先;
具备美术基础,能理解角色造型、构图与色彩关系;
熟练使用 Figma 、XD 、PS 等设计软件,掌握流程图、原型图等基本设计方法;
熟悉游戏整体设计、镜头表现与节奏控制,能够运用视觉语言引导玩家注意力;
了解 Unity 引擎 的工作流程与编辑器基础;
拥有出色的沟通协调能力与逻辑分析能力,能高效推动跨部门协作与落地执行;
具备良好的学习能力与自我驱动力,拥有强烈的责任心与主人翁意识,能主动推进并解决问题,对工作成果的质量保持持续的高标准与执着追求;
Ttelegram:@li948828
邮箱: roumengli8888@gmail.com

你们有什么好的方式扩展自己的见识、增长生活中的智慧吗??非常需要补充,如果有的话,请分享一下

aoyi:

码农的生活太过简单,并且与人交往少(产品、前后端),信息获取不足

我自己是通过 A 股了解买和卖的关系,已经人性的冲动,感受被套时候的无力感,锻炼自己的心态,今天就狠狠被锻炼了

然后日常看股票消息(加入知识星球、各种 wx 群、关注某音博主),了解到了固态电池的信息、无人机的信息、房地产还在下跌的信息、以及补交养老保险的好处

欢迎各位大佬分享,感谢~

最近两周 OpenRouter 的免费模型在调用过程中,每次都会提示 429 错误,有遇到这个问题的吗

mx2dream:

现在是每次都会遇到,几乎无法使用各种 free 模型了,换付费模型就正常,这种情况以前很少出现,但当前已经没法用免费模型了。 余额足够,隐私开关该打开的也都打开了。 看 OpenRouter 的最近公告中有个 BYOK 的新政策,难道免费模型调用总是报 429 错误是受此影响?

一件由于送礼引起的不愉快事件

oracleHe:

我有个跟我相差十年左右的叔叔,跟他家来往得比较紧密一点,经常会一起家庭活动。 去年我娶了个外地媳妇,然后按着外地媳妇的习俗,在春节的时候给叔叔和婶婶送了一箱橙子。当时没发生什么事情。

过了大半年后,就是前阵子国庆,我和媳妇去了趟旅游,买了些手信回来,里面有臭豆腐,因为想着叔叔、婶婶和他们儿子一家人都喜欢吃臭豆腐,就买了。

我和媳妇是中秋前一天回到家的,因为中秋的时候会跟叔叔一家人聚餐,就想着顺手当天再拿手信给他们。 到了中秋那天给手信后,事情就发生了。

中秋那天晚上各回各家之后,婶婶打电话给我妈,说中秋节给他们送臭豆腐气死她了。说是在中秋节这种节日送臭豆腐,又黑又臭的不吉祥。

然后才又提起了今年春节的时候,说我和媳妇送他们橙子,谐音也不吉利(因为我是粤语地区的人,粤语的“橙”跟“惨”很像)

她还数了平时的很多小细节出来,主要说我们一些行为不够尊重她啥的,比如有一件是: 有一次我们一起去吃烤肉,我婶烤好的肉放在盘子上,我媳妇看我妈离那盘肉远,当时礼貌性的跟我妈说:“动筷了,可以吃近的这块肉。”然后我婶就理解为了“故意不给她面子,让我妈不吃她烤的肉” 还有很多乱七八糟的就不细数了。

我跟媳妇都是比较随便的人,都不会太计较这些什么谐音的寓意什么的。虽然确实说我们自己不计较,别人可能会计较,在这点上我们可能确实不够懂人情世故,但关键是如果送的不喜欢, 大家也不是陌生人,为什么不能当面说呢。甚至要一堆小事情都记着小本本放着突然爆发说。就感觉挺莫名其妙的,有种好心付出出去,被人背后捅刀子的感觉。

2025 年了 现在 windows 上可以正确播放杜比视界的方法还是没有吗? 除了自带电视和电影

leafyyy: 习惯了用 potplayer ,之前倒是有过一次更新可以解码杜比视界了。 但是只能以普通模式播放。
日常有台 windows 直接链接电视机的,正常播放 hdr 视频的时候 只要用对了 potplayer 里的解码器 windows 和电视能自动转跳成 hdr 模式。 但是杜比视界的片源 不管选什么解码器 最多也就只能正确解码颜色以普通模式播放。

2025 年了 还是没有什么方便的办法吗?

另外我还发现 potPlayer 似乎无法正确播放 AV1 格式的 hdr 片源。 也是通常只能以普通模式播放。

通勤业余自行车升级推荐

mingweili0x: 日常上下班各 5 公里自行车通勤,很喜欢骑车的感觉,以后也不排除周末专门骑车子去锻炼,现在骑的美利达克罗威 90 ,对车架和车子的定位很喜欢,但自带的套件尤其是整套变速太拉了,变速不丝滑,高档起步卡顿,但我本身又没多少预算,自己在研究各种中套大套也看得眼花缭乱的,如果要升级一下套件,或者直接换个价格 3000 多的平把和弯把公路车的话,有啥好的推荐吗?感谢各位大佬

大佬们,请教一个数据库设计的问题

xided:

需求是用户需要填写一个表单,这个表单是由多个字段的组成一个维度的数据的一个表单,表单上有 n 个这种维度的数据,这种数据库表设计应该如何设计好

举个例子,描述一个长方体需要长宽高三个字段,表单里填了 长方体=>长:123 宽 234 高 345, 三角形=>第一个角 30 第二个角 40 第三个角 110 ,一次性提交表单后,表格会显示两条数据,但这两条数据属于一次填写

类型 时间
长方形 长 123 宽 234 高 345 2025-10-11 11:11:11
三角形 30° 40° 110° 2025-10-11 11:11:11

我的想法是建一张宽表,包含所有维度的数据的字段(固定的),然后有一张字段映射表,配置宽表的哪些字段要组成独立的数据,新增完宽表记录后通过这张映射表,生成对应维度的一个数据,这种设计是否合理呢

用美区 google play 礼品卡充值 chatgpt 的问题

wozitaoran:

1 、用了美国机场,甚至找了美国的朋友帮忙充,均报错: 无法兑换此代码。此代码只能在美国使用。

2 、怀疑原账号问题,新注册了个美国 google 账号,充值报错: 我们需要您提供详细信息,才能为您兑换礼品卡。

3 、新注册了 chatgpt 账号,用新注册的 google 账号登录,但内购是发现还是用的原来的 google play 账户。

为什么这么困难啊,哪位大佬能指点下,多谢了~

赛力斯董事长说:安全是最大的豪华,问界系列车型次年续保费用整体下降 30%

LuJason:

原文。https://www.ithome.com/0/890/278.htm

疑问:第二年车险应该普遍都会下降吧,保费低真的能说明汽车安全吗?

按照他这个算法,我的车第一年保险¥ 5000 ,第二年续保 ¥ 3000 , 下降了 40% ,比他的安全啊


已知 30% = 1 界

那我的车 40/30 = 1.33 界,大家是多少界

新入《逃离鸭科夫》, 妹子不会用键盘玩怎么破?

InDom:

我也不知道我是怎么学会用键盘 WASD 玩游戏, 妹子好像就完全无法 GET 这种按键操作...

这个游戏她应该是喜欢的(和平精英,舔图,0 杀,苟到第二的那种...)

但这个游戏不支持手柄, 妹子又不会用键盘, 大佬们有何解啊?

话说似乎 V 站没有讨论这个游戏的呢?

[提问] 红米有没有办法关掉安装 APP 的验证弹窗?

7gugu:

RT 。之前申请了一台中端机用来做测试用,但是小米的系统会有个安全检测的弹窗,识别到 APP 未签名或者不是从应用商店下载的话,就会阻断用户的安装。对于普通用户而言,一次两次的提示尚可接受,但是我这边开发的 APP 都是 debug 版本,全都是没有签名的,这个验证弹窗就很惹人厌了。想问问 V 友们是否有办法干掉这个阻断弹窗。

我让 GPT 写了个 APP 兑换码高亮助手

apanlin:

看到有大佬分享 APP 兑换码, 但是试了好多, 都是用过的, 即便很多高素质大佬把使用过的贴到了评论区,依然非常难找出一个未使用的兑换码.
于是让 GPT 写了个油猴脚本, 把未使用的兑换码高亮出来方便查找.
当然这个前提是需要大家主动把已经使用的兑换码贴到评论里
高亮显示未使用(绿色)和已使用(红色)兑换码

安装方式

推荐使用 Tampermonkey/Violentmonkey

  1. 安装浏览器扩展 Tampermonkey
  2. 点击 “创建新脚本”,粘贴下面完整脚本
  3. 保存后访问任意 V2EX 帖子页面,自动生效

使用方法

  • 打开 V2EX 帖子页面
  • 脚本会自动抓取作者的兑换码 + 评论
  • 高亮显示未使用(绿色)和已使用(红色)兑换码
  • 页面右下角显示统计信息

完整脚本( v1.6 )

// ==UserScript==
// @name         V2EX 兑换码高亮助手 (多页评论)
// @namespace    https://v2ex.com/
// @version      1.5
// @description  高亮显示作者发布的兑换码(正文 + 附言),抓取多页评论兑换码,评论中出现的默认已使用。
// @match        https://www.v2ex.com/t/*
// @match        https://v2ex.com/t/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const MIN_LEN = 10; // 兑换码最小长度

    function extractCodes(text) {
        const pattern = new RegExp(`\\b[A-Z0-9]{${MIN_LEN},}\\b`, 'g');
        return new Set(text.match(pattern) || []);
    }

    function extractCodesFromReply(replyNode) {
        const codes = new Set();

         console.log('[V2EX Code Highlighter] replyNode:', replyNode);
        // 遍历 replyNode 的子节点
        replyNode.childNodes.forEach(node => {
            if (node.nodeType === Node.TEXT_NODE) {
                // 文本节点按空格分割
                node.textContent.split(/\s+/).forEach(word => {
                    //console.log('正在解析:', word)
                    // 全局匹配所有 10 位以上大写字母或数字
                    const pattern = /\b[A-Z0-9]{10,}\b/g;
                    const matches = word.match(pattern) || [];
                    matches.forEach(c => codes.add(c));
                });
            } else if (node.nodeName === 'BR') {
                // <br> 就当作分隔,不需要处理
            } else {
                // 递归抓取子节点
                extractCodesFromReply(node).forEach(c => codes.add(c));
            }
        });

        //console.log('该评论最后得到:', codes)
        return codes;
    }


    function replaceTextNodes(node, callback) {
        const walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, null, false);
        const nodes = [];
        let n;
        while (n = walker.nextNode()) nodes.push(n);
        for (const t of nodes) callback(t);
    }

    function highlightCodeSpan(code, used) {
        const span = document.createElement('span');
        span.textContent = code;
        span.style.cssText = `
            background-color: ${used ? 'red' : 'green'};
            color: white;
            font-weight: bold;
            padding: 2px 4px;
            border-radius: 4px;
            margin: 0 2px;
            font-family: monospace;
        `;
        span.title = used ? '已用' : '未用';
        return span;
    }

    // 异步抓取评论页内容
    async function fetchReplyCodes(url, authorName) {
        const commentCodes = new Set();
        try {
            const res = await fetch(url);
            const text = await res.text();
            const parser = new DOMParser();
            const doc = parser.parseFromString(text, 'text/html');
            const replyNodes = doc.querySelectorAll('.reply_content');
            replyNodes.forEach(r => {
                const floorNode = r.closest('.cell');
                const userLink = floorNode ? floorNode.querySelector('.dark, .username, a[href^="/member/"]') : null;
                const userName = userLink ? userLink.textContent.trim() : '';
                if (userName === authorName) return; // 跳过作者
                extractCodesFromReply(r).forEach(c => commentCodes.add(c));
            });
        } catch (e) {
            console.error('[V2EX Code Highlighter] Fetch page error:', url, e);
        }
        return commentCodes;
    }

    async function run() {
        const mainPostNode = document.querySelector('#Main .topic_content');
        if (!mainPostNode) return;

        const authorNode = document.querySelector('#Main .header .fr a[href^="/member/"]');
        if (!authorNode) return;
        const authorName = authorNode.textContent.trim();
        console.log('[V2EX Code Highlighter] Author:', authorName);

        const mainCodes = new Set();
        const commentCodes = new Set();

        // 1️⃣ 抓取作者正文
        extractCodes(mainPostNode.innerText).forEach(c => mainCodes.add(c));

        // 2️⃣ 抓取作者附言
        const subNotes = document.querySelectorAll('#Main .subtle .topic_content');
        subNotes.forEach(note => {
            extractCodes(note.innerText).forEach(c => mainCodes.add(c));
        });

        // 输出作者兑换码日志
        console.log('[V2EX Code Highlighter] Author codes:', [...mainCodes]);

        // 3️⃣ 获取评论页数
        const psContainer = document.querySelector('.cell.ps_container');
        let totalPages = 1;
        if (psContainer) {
            const pageLinks = psContainer.querySelectorAll('a.page_current, a.page_normal');
            totalPages = Math.max(...Array.from(pageLinks).map(a => parseInt(a.textContent.trim())));
        }
        console.log('[V2EX Code Highlighter] totalPages:', totalPages);


        // 4️⃣ 抓取所有评论页
        const currentUrl = window.location.href.split('?')[0];
        const pageUrls = [];
        for (let p = 1; p <= totalPages; p++) {
            pageUrls.push(`${currentUrl}?p=${p}`);
        }

        for (const url of pageUrls) {
            const codes = await fetchReplyCodes(url, authorName);
            codes.forEach(c => commentCodes.add(c));
        }

        console.log('[V2EX Code Highlighter] Comment codes (all pages):', [...commentCodes]);

        // 5️⃣ 计算未用
        const unusedCodes = [...mainCodes].filter(c => !commentCodes.has(c));

        // 6️⃣ 高亮当前页面作者兑换码(正文 + 附言)
        const authorContentNodes = [mainPostNode, ...Array.from(subNotes)];
        authorContentNodes.forEach(node => {
            replaceTextNodes(node, t => {
                const text = t.textContent;
                const codes = extractCodes(text);
                if (!codes.size) return;
                const frag = document.createDocumentFragment();
                let remaining = text;
                codes.forEach(c => {
                    const parts = remaining.split(c);
                    frag.appendChild(document.createTextNode(parts.shift()));
                    const used = commentCodes.has(c);
                    frag.appendChild(highlightCodeSpan(c, used));
                    remaining = parts.join(c);
                });
                frag.appendChild(document.createTextNode(remaining));
                t.parentNode.replaceChild(frag, t);
            });
        });

        // 7️⃣ 页面右下角统计
        const panel = document.createElement('div');
        panel.style.cssText = `
            position: fixed;
            bottom: 10px;
            right: 10px;
            background: #222;
            color: #fff;
            padding: 10px 14px;
            border-radius: 8px;
            box-shadow: 0 0 6px rgba(0,0,0,0.5);
            font-size: 13px;
            z-index: 9999;
            line-height: 1.5;
        `;
        panel.innerHTML = `
            <b>兑换码统计</b><br>
            总数: ${mainCodes.size}<br>
            已用: ${commentCodes.size}<br>
            可用: ${unusedCodes.length}
        `;
        document.body.appendChild(panel);
    }

    window.addEventListener('load', run);
})();

招有想法的嵌入式软件工程师, base 重庆

qq1042359045: 主要开发智能硬件产品的科技公司,刚融完天使轮,上代产品也已经投入市场开始盈利,计划打造一整个智能出行产品矩阵

手上现金流比较宽裕,福利到位



[岗位要求]

有一年以上 C/C++编程经验,熟悉 stm32,esp32 单片机开发经验。(独立带过完整硬件产品开发项目的优先考虑)

负责公司智能硬件产品的嵌入式软件的开发、编码、调试等工作。

与硬件工程师紧密协作,参与硬件方案评审,负责传感器、屏幕、无线模块等外围器件的驱动集成与调试。

支持硬件产品的试产、量产和测试环节,提供软件解决方案和故障分析。

编写和维护技术文档,如设计文档、API 接口文档等。



待遇面议,可以给到薪资加期权,

团队氛围自由,工作时间弹性

工作地点:重庆两江数字经济产业园

也欢迎对技术特别感兴趣的同道们一起交流分享~

邮箱:wangshijiecqu@foxmail.com

微信:WSJ3390WSJ

大家的 MacBook 屏幕最近是否出现过闪烁的问题?

bearbest:

手里的两台 MacBook ,一台升级了 macOS 26 ,一台没有升级,但最近(大概两三个月)开始。

偶尔会出现屏幕亮度闪烁的问题,表现大概就像是亮度忽高忽低,速度变化比较快,但是亮度变化幅度不大,整体持续一两秒钟,然后就恢复正常了。

网上搜到几年前的文章说是 HDR 的问题,但是现在两台电脑的屏幕显示里都没有关闭 HDR 的选项了。

有人遇到类似的问题吗?

新出的几个小屏机真不好选

jaleo: 小米 17 摄像一般 系统稍差
vivo x300 电池小
oppo x9 usb2.0 长焦无微距 LTPS
荣耀 magic8 usb2.0

本来看中 oppo 的外观 但是 usb2.0 真是难受
现在想了解下 vivo x300 的续航到底有多少差距

你们用过数据库联合索引优化排序功能吗

ethusdt:

后端小白在学习数据库,看到一篇文章介绍 order by 的工作原理,有一个例子很有趣:

CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `city` varchar(16) NOT NULL,
  `name` varchar(16) NOT NULL,
  `age` int(11) NOT NULL,
  `addr` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `city` (`city`)
) ENGINE=InnoDB;

这样的数据库表结构,查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄 的语句是 select city,name,age from t where city='杭州' order by name limit 1000 ;

后面讲到数据库会执行全字段排序或者rowid 排序来返回结果。

并且文章还讲了一个优化,使用联合索引来优化查询: alter table t add index city_user(city, name);,这样索引中 name 本身就是排序好的,数据库不需要再次执行排序工作,这对查询的性能来讲,可以增加不少。最后还讲到了覆盖索引继续优化一下这个场景: alter table t add index city_user_age(city, name, age);,这样数据库查询出来的结果包含所有的字段,也就是结果集就是我们要的最终结果,不需要往主键索引表中查询了。

我是个后端新手,比较好奇这种优化,小公司用到过吗?我不清楚这是后端的基本能力还是 DBA 专业数据库工作者才需要掌握的优化技能。

V 友必备的插件,良心出品,能解决实际问题!

zl1995:

如果你是 V2EX 的“摸鱼爱好者”,你会发现这个论坛又几个地方做的不够人性化:

例如:

评论回复不支持支持层级展示,没有“楼中楼”那种样式;

消息提醒,没有分类,收藏、感谢、回复全都在一个列表

无法直接上传图片,这个确实有点难受。

为了解决这几个痛点问题,已经有人做好了一个插件-「 V2EX Next 」

1 、先安装好脚本管理器(浏览器插件)——篡改猴。

我这里使用的 Windows11 自带的 Edge 浏览器,下载安装地址:

https://microsoftedge.microsoft.com/addons/search/%E6%B2%B9%E7%8C%B4?hl=zh-CN

成功启用,然后点击「获取新脚本」,搜索「 V2EX Next 」。

2 、添加脚本「 V2EX Next 」

脚本地址:

https://greasyfork.org/zh-CN/scripts/458024-v2ex-next-v2next

完成安装后如图所示:

运行请求访问资源,直接选择「总是允许」即可:

V2EX Next 实测效果

1 、评论可以直接回复图片

评论中的图片都被上传存储到 Imgur 这个网站了,是一个流行的 图片和视频托管平台,主要用于用户上传、分享和浏览网络上的图片、动图( GIF )和短视频。它成立于 2009 年,最初是为了解决 Reddit 等论坛用户分享图片时的需求而设计的,后来逐渐发展成一个独立的社区。

这些图片应该是存到脚本开发者的账号了,具体是哪个账号可以看开源地址,这个脚本都是开源的。

2 、评论列表可以排序了,并且有“楼中楼”的样式,用户体验提升不少

3 、直接解析 Base64 ,V2ex 中的链接内容很多都是 Base64 密文

4 、直接回复别人的评论

5 、回复别人的评论也可以 @某人

6 、提醒系统中回复、收藏、感谢都可以分类了,以前是直接显示一个全部列表

脚本是开源的,另外还有安卓、苹果的客户端。

PC 端脚本 开源地址:

https://greasyfork.org/zh-CN/scripts/458024

不过也有个小问题,提醒系统中的感谢没有显示数据,我发的贴子实际上是有人「感谢」的。

另外还有个小问题,发帖时没有直接上传图片的功能,如图所示:

当然这个功能也非常好解决,直接用 Markdown 格式的语法即可,但是这种做法一定要注意图片来源网站如果做了防盗链功能,那就显示不出来了。

效果如图所示:

❌