Fps射击游戏开发:第二回
本文介绍在上一篇文章中我们介绍了一些基本的先验内容,并且搭建了一个基础场景。本文目标,挂载枪支,并实现子弹射击逻辑
枪支挂载
首先需要创建枪支的刚体,用了三个cube搭建,同时把他用一个整体包裹,方便后续敌人复用。
编写对应Gun和GunController,具体代码如下:
Gun.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Gun : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
GunController
using System.Colle ...
Fps射击游戏开发:第一回
由于项目需要,研究了下unity,借此写个小游戏,所以本文开始,将详细记录,使用unity开发fps射击游戏的所有细节认识编辑器
基本的界面如上图所示,就四大块工作区:视图区(红色)、文件区(橙色)、对象区(蓝色)及最右侧的inspector区域。其中inspector可以看作是属性详情,例如我们选中某个刚体(物体,如圆柱、地面),能够看到该刚体的位置等的所有信息,当然,还包括了其绑定的c#代码文件。
我们首先创建了一个圆柱体和一个地面。本质就是俩三维刚体,通过GameObject选项卡中的capsule和plane创建。并分别给他们加了点material(材质、颜色)。最后设置了一个光照,使其看起来有质感些。
Start和Update这俩函数是我们之后几乎标配的函数。前者在项目开始运行时,执行一次。后者就是大名鼎鼎的tick时刻,每帧执行,类似于前端的raf函数。
给圆柱体绑定c#代码创建scripts文件夹专门存放代码文件,然后选中物体,将c#文件直接拖入inspector中绑定。代码文件具体如下。
palyer.cs
using System.Collections;
u ...
Thoughts on the Frontend Product Perspective
Keep it simpleHaving been in development for four years and worked on plenty of projects, I suddenly had some thoughts about the product side.
It started when I noticed many domestic friends building independent sites and overseas ventures. After briefly getting involved, I realized that some shopping platforms can be extremely minimalist. Because of work, I got exposed to many overseas businesses. Compared with domestic projects, they share one glaring trait: clean, flashy, and built on modern ...
力扣经典100题- 字母异位词分组
字母异位词分组思路:大力出奇迹,首先写一个算法,暴力的出任意字符串的全排列集合。然后依次遍历strs,双循环得出所有剩余项目中的亦或字符串,完毕。
/**
* @param {string[]} strs
* @return {string[][]}
*/
const returnAllChildArr = (arr) => {
const res = []
const used = new Array(arr.length).fill(false)
const walk = (curArr, len) => {
if (curArr.length === len) {
if (!res.includes(curArr.join(''))) {
res.push(curArr.join(''))
}
return
}
for (let i = 0; i < len; i++) { ...
React系列:第十二回(调和过程和diff)
本文介绍react的调和过程和diff算法所谓的调和,本质是将虚拟节点转换为真是dom的过程
React15栈调和机制下diff的核心逻辑先看下图的两个节点:
先对比连个根节点,是否为同一个元素,判断依据标签名和key。若是同一节点,更新各个属性,进入子节点的diff,若不是,简单粗暴,删除旧节点,根据新结点的虚拟dom挨个创建。
进入子节点的对比后,从头至尾依次对比。旧节点所有子节点从左到右一次同新虚拟dom的子节点对比。判断是否为同一节点,是则更新相关属性下一个。不是,删除旧节点。图中依次是B、D、E,到D时,发现不同,删除D创建C。到E时发现不同删除E创建D。
最后因为新节点还有一个E剩余,创建之。完毕。注意:react15的栈调和是深度优先遍历的。倘若D有子组件,那么会继续往下走,最后再往回冒。
上述过程存在的一个问题,新节点中明明也有D、E,但是我们还是经过了删除、创建,明显浪费。此时,就祭出了我们的key.
key属性帮助react记住节点。D、E只需要执行插入即可
The Method Of Learning
The Study Method That Works For Technical Subjects
Step 1 - Preparation: Find an authoritative reference book that covers most of the fundamentals, and skim through the whole book quickly
Step 2: Locate a reliable mentor, work through the entire course, and correct misunderstandings. Pay extreme attention to hands-on practice
Step 3: Take a comprehensive test to verify you truly understand what you learned
Step 4: Focus on misunderstanding points, practice repeatedly through hands-on exercisesOv ...
第一回:开宗明义的聊聊
本文简单聊聊“整洁代码”的几个点究竟什么样的代码才是高质量可维护的代码(没有味道的代码)?什么样的组件才能叫作好的组件?函数怎么写才是干净、高效、得体的?瓦卡利马僧。但是,本文中我们尝试着去瓦卡利。
组件化编程随着业务量代码的积累,自己突然感觉有点力不从心:代码太容易成为“屎山”了。就拿目前项目的一个场景举例:写一个创建任务的表单组件。听起来很简单是吧?是很简单,但写起来,极度费劲。原因在于,该创建表单项过多,且伴随着各种联动需求。一开始愣头愣脑的上去就是干。写到一半,发现已经写不下去了—->该文件已经超过了 1000 行,变量无数,单单 flag 就十几二十来个,如若再这么写下去,我估计即使勉强实现了需求,后面接手的人都会顺着网线来砍我。此时,我的心情是崩溃且尴尬的。你能够想象,在一个单文件代码超过1000 行游走是什么感觉吗?望着这座自己亲手堆砌的半坐“屎山“,觉得自己有义务寻求一些解决方案,免得被后人耻笑。简单的讲就是一个字:拆。在《重构》这本书的指导下,疯狂拆分这座屎山,当然,这个过程也是无偿加班的过程。最终单文件代码量干到了 300 来行,虽然被拆出去的儿子组件的可复用 ...
vue3备忘录:同前代的优化
优化总结
为了更好支持ts,类型检查,类型推导
优化代码可读性、可维护性(composition API 取代options API)
优化代码可复用性。vue2使用mixin去复用代码逻辑存在俩问题:命名冲突、数据来源不清晰。vue3抄了一把react,也用了hook的方式去复用代码
打包速度更快
diff算法优化。
响应式系统优化。通过proxy解决俩问题:新增删除的数据监听问题。2.对象嵌套过深引起的性能问题.需要注意的是,使用proxy代理整个对象的前提是该对象非嵌套,如果是嵌套的,需要在get再加一层代理逻辑
treeshaking。实际就是删除无用代码
SEO相关手段
目下前端SEO三大核心手段语义化 HTML(让爬虫识别内容结构)用语义标签替代无意义 div,明确内容层级,提升爬虫解析效率。
<h1>2025战国策略手游 - 官方首页</h1> <!-- 唯一h1,定义页面核心主题 -->
<main> <!-- 核心内容区 -->
<article>
<h2>游戏核心玩法:战国七雄争霸</h2>
</article>
</main>
Meta 标签精准配置(提升搜索结果相关性)title/description 含核心关键词,控制字符长度,直接影响搜索展示。
<title>战国策略手游 - 还原真实历史 | 2025公测</title> <!-- 60字符内 -->
<meta name="description" content="战国策略手游主打真实历史还原,招募名将、攻城略地,2025年全平台公测!"> <!-- 120字符内 -->
JS 渲染适配(解决 SPA 爬虫抓取问题)SPA 页面需让爬虫获取完整内容,避免空页面抓取。如果 ...
