从零开始学习Unity学习笔记:Day04 角色水平移动逻辑

【UnityShader]使用Shader将图片进行水平/竖直镜像翻转 在开发时从很多地方取出来的图片可能并不是图像原本的模样,可能是被水平或者竖直镜像翻转后的图形,这时候我们要将图片再次镜像回来,只需要一个小小的Shader即可。 阅读详情

在继续本节教程之前,需要设置好脚本编辑器。最简单的方法是安装Visual Studio 2019/2022,如果喜欢轻量级的VSCode(需要经过相对复杂的设置),可以参考M_Studio老师提供的教程来操作设置。

按键设置

在菜单栏中的“编辑”菜单打开“项目设置”,找到 输入管理器 这一栏,展开轴线(Axes)设置项,可以看到Unity预设的若干个输入按键,中文版翻译的有些问题,我这里解释在图中了。
可以更改这些按键,具体按键设置见 官方文档 。
根据官方文档:键盘上的按钮只会产生–1作为负值、1作为正值,什么都不按就为0。而某些手柄的按键/摇杆则可能产生-1~1之间的值。

为Sprite添加控制脚本

为了告诉Unity当玩家按下指定的按钮时应当执行什么操作,需要为该Sprite添加脚本。
选择好相应的Sprite后,在检查器面板中点击“添加组件”按钮-“新建脚本”,然后为脚本命名。在项目窗口中可以看到:Unity会将新建好的脚本存放在Assets文件夹中。打开脚本文件即可对其查看和编辑。
建议新建一个Scripts文件夹来专门存放脚本。 一般情况下,控制玩家所代表的的Sprite的脚本可以称为Player Controller(玩家控制器)。
如果希望将项目窗口中已有的脚本添加到Sprite中,可以直接将脚本拖拽到相应Sprite的检查器窗口中。
Unity使用 C#语言 作为脚本语言。
新建的脚本大概长这样:
    
using System . Collections ; using System . Collections . Generic ; using UnityEngine ; public class PlayerController : MonoBehaviour { // Start is called before the first frame update void Start ( ) { } // Update is called once per frame void Update ( ) { } }
本帖 不记录 与Unity特性无关的C#具体编程细节。相关教程可以参考 C# 教程 | 菜鸟教程 (runoob.com) 。
Unity会根据你的脚本文件名建立一个类,其中会包含两个无返回值的函数: Start() 和 Update() ,这两个函数会自动由Unity来调用。
  • Start() :在第一帧画面被渲染前调用,一般会在这里写一些初始化用的代码。
  • Update() :每一帧画面被渲染时都会调用这个函数,这也是编写玩家操作逻辑的地方。

编写水平移动逻辑

为了Sprite的动作符合物理规则而显得更加真实,我们不应该直接操作Sprite的Transform组件下的坐标,而应该利用Sprite中的刚体组件来告诉物理引擎我们的移动速度,再由物理引擎来自动计算出Sprite的坐标。
为了操作刚体组件,我们需要先在类中定义一个公开的 RigidBody2D 成员(这个类型在 UnityEngine 命名空间定义)。此外,为了方便我们在Unity中直接控制Sprite的移动速度,我们可以再定义一个公开的 speed 成员。
    
public Rigidbody2D rigidBody ; public float speed ;
保存好脚本后,就可以在Unity的检查器窗口看到这两个成员的接口,我们可以在Unity指定接口挂载到上面地方,这里我们将检查器窗口上的Rigidbody 2D组件拖动到 Rigid Body 这一栏,并在 Speed (中文版会自动翻译成速度)这一栏填上一个速度值,比如16。这样,这两个成员将由Unity完成初始化,不需要我们写初始化代码。
在脚本中,我们可以使用 Input.GetAxis("Horizontal") 来获得之前指定按键的情况,键盘按键的情况下,会返回:
  • -1(A键或者方向键←)
  • 1(D键或者方向键→)
  • 0(什么都没按)
根据 官方文档 :该方法实际上会自动进行 平滑处理 ,也就是说,按下按键后该方法并不会立即返回对应的值,而是随时间缓慢增加到该值。例如,如果某个时刻该方法返回0,突然按住A键不放,该值每次调用会以-0.05的增速返回值,直到返回了-1,然后就一直返回-1。 如果不希望值被平滑(按下A键立即返回-1),则应当使用 Input.GetAxisRaw("Horizontal") 。
根据按键的状态,我们可以设置刚体成员 rigidBody 的 velocity 属性,这个属性在2D游戏中应当是 Vector2 类型,两个分量分别表示水平和垂直方向的速度分量。这里只需要根据输入与给定的速度值,改变水平速度就行,垂直速度则保持原来的值:
    
float horizontal_move = Input . GetAxis ( "Horizontal" ) ; // 输入管理器中出现的那个“名称” rigidBody . velocity = new Vector2 ( horizontal_move * speed , rigidBody . velocity . y ) ;
这些代码本应当在 Update() 中执行,但是考虑到今后 Update() 可能会执行非常多的逻辑,直接写在这里面会让 Update() 非常长,所以这里另行创建了一个函数 Move() 来处理移动操作的逻辑。

物理模拟逻辑应当放在固定帧率方法中

这一节本来是下个视频的内容,这里出于代码的合理性挪到这里记录。
之前放在 Update() 方法中的 Move() 方法操作了处理物理交互逻辑的刚体组件,但这会导致一个问题: Update() 方法实际上 依赖于渲染帧率 。如果因为某些原因,机器渲染的速率随时间变化起伏很大,而 Update() 中调用物理交互操作也就 必须等待渲染 ,从而只能随着渲染速率的变化进行模拟(比如说希望人物每帧行走1单位,但是1帧渲染的时间有时候是0.02s,又是是0.5s,那么人物走一单位的时间也会变成一会儿是0.02s,一会儿是0.5s),这就不符合物理规则,会给人卡顿的感觉。
一般来说,我们希望处理物理交互的逻辑以恒定的频率被执行。Unity提供了这样的方法: FixedUpdate() 。它和 Update() 一样会被Unity自动调用,但它的调用频率则和渲染速率无关。
因此,我们将 Move() 方法改换到 FixedUpdate() 中执行。
完整的脚本代码如下:
    
using System . Collections ; using System . Collections . Generic ; using UnityEngine ; public class PlayerController : MonoBehaviour { public Rigidbody2D rigidBody ; public float speed ; // Start is called before the first frame update void Start ( ) { } // Update is called once per frame void Update ( ) { } void FixedUpdate ( ) { Move ( ) ; } void Move ( ) { float horizontal_move = Input . GetAxis ( "Horizontal" ) ; rigidBody . velocity = new Vector2 ( horizontal_move * speed , rigidBody . velocity . y ) ; } }

禁止Sprite的旋转

通常情况下,我们希望Sprite保持直立行走(而不是走着走着碰到倾斜的障碍物就转起来了),可以在检查器窗口-刚体组件- Constraints (约束)设置项中把 冻结旋转 (Freeze Rotation)打上勾(2D游戏的旋转只有绕Z轴旋转,所以只有一个Z轴的选项)。

保存试玩中修改的参数

在Unity编辑器中试玩时修改检视器窗口中任何参数的值,在停止试玩后 不会被保存下来 。这里提供一个简单的技巧来在试玩结束后快速修改参数到试玩时设置的值:
1.在试玩时在修改属性的组件标题栏右键(或点最右边的三个点按钮)选择 复制组件 (Copy Component)。
2.在停止试玩时,在该组件标题栏右键(或点最右边的三个点按钮)选择 粘贴组件值 (Paste Component Values)。

随按键修改角色朝向

所谓角色的朝向,其实是Sprite的水平翻转与否。水平翻转最直观的实现方法是:将Sprite中Transform组件的Scale属性的X值从1修改为-1。在脚本中,Scale属性可以通过 transform.localScale 来修改。
由于 GetAxis 方法存在自动平滑的特性,我们不希望有平滑处理,故这里使用 GetAxisRaw 来检测按键。
【注意】由于Scale属性的X值如果被设置为0值,那么Sprite会变成一条线从而看起来被隐藏了。因此,我们的角色朝向处理的逻辑应当只处理 GetAxisRaw("Horizontal") 返回-1或1的情况,0的情况不处理。
    
float face_direction = Input . GetAxisRaw ( "Horizontal" ) ; if ( face_direction != 0 ) { transform . localScale = new Vector3 ( face_direction , transform . localScale . y , transform . localScale . z ) ; }
Unity平滑移动:Vector3.SmoothDamp原理、应用与调优全解析 在游戏开发与交互设计中,平滑移动是提升用户体验的关键技术之一。其核心原理基于物理阻尼模型,通过模拟速度的连续衰减过程,实现物体的缓入缓出运动,从而避免生硬的瞬移或匀速移动。这项技术的核心价值在于能够为角色控制、相机跟随等动态场景提供自然流畅的视觉反馈,极大地增强了游戏的沉浸感和操作手感。在实际应用场景中,开发者常需在Update或LateUpdate循环中处理动态目标的追踪问题。本文将以Unity引擎中的Vector3.SmoothDamp函数为焦点,深入剖析其参数机制,并与Lerp、MoveTowards 阅读详情

相关推荐

Unity天气系统插件UniStorm v5.2.0深度解析:从核心架构到性能优化实战

在Unity引擎开发中,天气系统是构建沉浸式开放世界和场景氛围的关键技术组件。其核心原理在于通过模块化架构,将天空光照、粒子特效、环境音效等子系统进行数据驱动的动态管理,实现天气状态的平滑过渡与实时渲染。这一技术对于提升游戏视觉表现力和玩家沉浸感具有重要价值,广泛应用于开放世界、角色扮演、模拟经营等游戏类型。本文聚焦于Unity Asset Store中备受关注的天气插件UniStorm,特别是其最新的v5.2.0版本,深入剖析其模块化设计、与URP/HDRP渲染管线的集成方案,并提供从基础配置到性能调优的

csdn785029689的博客 511

unity游戏物体水平镜像翻转

水平镜像翻转,将scale改为(-1,1,1),如果有刚体的话不适合用这个方法。

qq_19605587的博客 3104

AI原生游戏开发实战:从零构建僵尸生存游戏的技术拆解

游戏开发流程正经历着由AI技术驱动的深刻变革。传统开发模式中,独立开发者常受限于美术、编程、策划等多重技能门槛,项目周期漫长。如今,以Claude Code、GPT-4为代表的AI编程助手,结合Midjourney等视觉生成工具,正在重塑这一流程。其核心原理在于,通过自然语言指令,AI能够快速生成可运行的游戏代码、按需创建美术资源,并辅助完成音效设计,从而将开发周期从“月”级压缩至“天”甚至“小时”级。这一技术组合的价值在于,它极大地降低了原型验证和创意实现的成本,使开发者能更专注于游戏机制设计与体验调优。

weixin_34034670的博客 2352

【Unity3D】缩放、平移、旋转场景

场景缩放、平移、旋转有两种实现方案,一种是对场景中所有物体进行同步变换,另一种方案是对相机的位置和姿态进行变换。对于方案一,如果所有物体都在同一个根对象下(其子对象或孙子对象),那么只需要对根对象施加变换就可以实现场景变换;如果有多个根对象,那就需要对所有根对象施加变换。该方案实现简单,但是会破坏场景中对象的尺寸、位置、姿态,不符合现实世界的规则。如:对场景施加缩放变换后,又新增了一个对象,但是该对象不是放在同一个根目录下,就会让用户感觉新增对象的尺寸超出意外;

little_fat_sheep 1万+

72小时AI游戏开发实战:Claude Code与AI资产快速构建游戏原型

在当今的软件开发领域,人工智能辅助编程已成为提升效率的关键技术。其核心原理是利用大语言模型(LLM)对代码上下文进行深度理解,从而提供精准的生成、补全和调试建议。这项技术的核心价值在于,它能将开发者从繁琐的语法记忆和基础代码编写中解放出来,使其能更专注于核心逻辑与创意实现。在游戏开发、工具脚本编写、自动化测试等应用场景中,这种“想法-实现”的加速能力尤为突出。本文聚焦于游戏原型开发这一具体实践,详细阐述了如何协同使用**AI资产**(包括AI生成的代码、美术、音频资源)与**Claude Code**这一专

weixin_34115824的博客 426

Unity中实现UI翻转

一:效果演示 二:使用 FlipType:翻转类型(水平翻转、竖直翻转、水平竖直翻转) 三:为什么不使用将Scale设置为-1 将Scale的x、y设置为-1也可以实现翻转的效果,但是这样还会影响到子物体以及animation,所以最佳的方法是修改图片的显示,我们可以继承UGUI提供的网格效果基类BaseMeshEffect修改网格顶点去实现翻转效果 四:代码实现 using UnityEngine; using UnityEngine.UI; using System.Collecti

L的博客 5899

从零开始学习Unity学习笔记:Day05 角色的跳跃逻辑&动画效果

05 角色方向&跳跃(续)这部分内容是我结合了M_Studio老师自己的另一个“补丁”视频进行了重新整理,所以内容可能和教程里的视频不完全对应,原教程里的视频也是M_Studio老师自己在学习过程中录制的早期视频,存在一些问题,这里尝试修正一下,如果有什么问题还请大家在评论区反馈,我看到一定会改过来的,感谢大家支持!控制角色跳跃的逻辑整体思路上和控制角色水平移动的类似:定义一个成员表示角色...

unityofficial的博客 261

Unity飞机大战(控制移动 限制移动范围 水平方向移动时发生倾斜 )

LilyCoder的博客 1240

新手学习unity(day2)

我们知道Rotate这个函数相当于我们旋转了整个cube,当我们把视角朝上看的时候,相当于整个人躺在地上,这时候我们左右移动鼠标,相当于整个人在地上开始原地打滚。同时transform.right是预定义的三维方向向量,形如(1,0,0)但要注意,这里是以物体为参考系的,移动起来要与世界参考系区别开。是控制人物的左右旋转。这里设置人物控制器的时候一开始外面这个碰撞框和cube没重合,在很远的地方,需要我自己手动拖过来,有点麻烦。因为编辑器里的坐标是这样的,xoz系控制的是整个水平面(有点反直觉)。

2303_79548695的博客 1888

【信息科学与工程学】【解决方案体系】第三十篇 在线游戏及游戏云系统模型与方程式01

本表格旨在系统化地描述在线游戏及其云系统所涉及的各类数学模型、算法和定理。以下为前8个核心模型的详细示例,展示了从用户请求建模到资源规划的完整链条。编号规则为D(设计)、P(性能)、R(资源)、C(成本)、A(算法)。编号类别领域模型配方定理/算法/模型/方法名称定理/算法/模型/方法的逐步思考推理过程及每一个步骤的数学方程式和参数选择/参数优化精度/密度/误差/强度底层规律/理论定理典型应用场景和各类特征变量/常量/参数列表及说明数学特征。

weixin_49199313的博客 2293

【信息科学与工程学】计算机科学与自动化——第八十六篇 各类应用上云计算 01

数字孪生:核心是实时性不等式(Δ<Δt)与带宽-精度权衡。数学上归结为带约束的非线性优化。预测性维护:从物理退化方程(Paris 定律)出发,结合贝叶斯推断,云端训练用深度时序模型,边缘推理用轻量模型。机器人协同:本质是多商品流 + 动态障碍物,需用图论(冲突检测)+ 最优控制(轨迹平滑)。工业视觉:延迟由四个环节组成,需用排队论分析流水线瓶颈,量化感知是降低延迟的关键。液压/气动系统上云(涉及流体力学、热力学、控制)机械臂力控/阻抗控制上云(涉及动力学、力/位混合控制)

weixin_49199313的博客 201

Unity FPS游戏开发:从Input系统到角色控制器完整实现

在游戏开发中,输入系统是连接玩家操作与游戏世界的核心桥梁。其原理在于实时捕获键盘、鼠标等外设信号,并将其转化为游戏逻辑可识别的数据。对于第一人称射击(FPS)这类对操作响应要求极高的游戏,一套稳健的输入处理方案直接决定了游戏的基础手感和可玩性。通过分离输入采集、逻辑计算与物理执行三层架构,开发者可以构建出清晰、可扩展的控制逻辑,有效管理角色移动、视角旋转与状态切换。本文以Unity引擎的经典Input Manager为切入点,详细拆解了如何利用Input.GetAxis、CharacterControlle

weixin_30326515的博客 368

C语言 在合并编译 ( 多.c文件 ) 情况下 实现 linked list ( 链表 ) 教程 . 更新ing

写在前面  依旧是参考借鉴了 浙江大学 温老师 的视频教程,很不错,在中国大学MOOC上,强力推荐!  虽说有借鉴,但是能保证的是每一行代码都是我自己经过理解后手敲出来的,所以才来做了这部分的教程。  最后,带 * 字符是我个人觉得可以添加的功能,按理来讲是可以不看的,而且大概率是可以有更好的改进的。  PS: 文章还在更新,如果文字蓝了(有超链接),说明写完了,如果没蓝,说明我在开军舰.jpg 源代码:  这里→源代码. 第一步:前置工作  先说一下每一篇都会出现 main 函数的,stage1 只是给没

weixin_47287635的博客 526

【Unity基础】day1整理 -----小球吃金币

小球 先搭一个场地Plane,命名Map ,通过将四个墙的立方体归入Map,可以同时控制大小。 分别赋予场地和墙的材质 创造一个小球Player 赋予材质和刚体,因为要实现键盘操作控制小球,因此需要写脚本挂载到Player上。 using System.Collections; using System.Collections.Generic; using UnityEngine; // 所有能够挂载到游戏对象的组件都要继承 MonoBehaviour // 文件名和类名保持一致,如果不一致就不能挂载在

qq_42404497的博客 3697

西门子精致面板TP1200 历史数据(历史数据、审计追踪) 移存到网络路径

TP1200 审计追踪

zhang080602的博客 5769

国产数据库PolarDB-X实战:5分钟快速搭建本地开发环境(附Docker一键部署脚本)

本文提供了一份详尽的国产分布式数据库PolarDB-X本地开发环境搭建指南。通过Docker Compose一键部署脚本,开发者可在5分钟内快速启动一个功能完整的PolarDB-X实例,涵盖环境准备、脚本解析、连接验证及日常维护,极大简化了国产数据库的入门和体验流程。

weixin_29246195的博客 358

游戏角色动画全流程揭秘:从灵感到手柄

《动画制作全流程揭秘》摘要(150字) 动画是艺术与技术的完美融合,从灵感萌芽到荧幕呈现需经历完整流程:剧本策划构建故事框架,角色与场景设计塑造视觉风格,3D建模搭建数字骨骼;动画师通过关键帧或动捕技术赋予角色生命,灯光渲染营造氛围,音效配乐注入灵魂;特效与后期合成完成最终视觉魔法。千人协作的项目管理、日新月异的技术革新,共同推动着动画艺术的边界。每一帧画面都凝结着创作者的心血,让虚拟角色在时光中绽放真实情感。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 3545

多普勒频移测速与FMCW测距

文章目录时域与频域基于多普勒频移估计速度基于传统的FMCW测距什么是FMCWFMCW测距原理参考论文 时域与频域 时域 — 自变量是时间,即横轴是时间,纵轴是信号振幅的变化。表示振幅随时间的变化。 频域 — 自变量是频率,即横轴是频率,纵轴是该频率信号幅度的峰值。表示振幅峰值随频率的变化。 基于多普勒频移估计速度 当发送端静止而接收端相对运动时,有: v=FsFcv=\frac{F^s}{F}cv=FFs​c 其中,F是信号的原始频率;FsF^sFs 是接收信号频率与发送信号频率之差,即多普勒频移;c是

dsaaf21的博客 9186

数据工程工具链实战地图:20个核心工具分层解析与选型指南

数据工程工具链是支撑现代企业数据能力的基础设施,其本质是围绕数据生命周期——接入、存储、计算、治理与消费——构建的协同系统。理解各工具的技术原理(如Airflow的DAG编排、dbt的Transformation-as-Code、Flink的Event Time语义)是避免选型失当的前提;其技术价值在于将数据可靠性、模型可信度、实时准确性、质量可预防性及跨源可分析性从理想变为可落地的工程实践。典型应用场景包括金融实时风控、电商T+1报表、SaaS多源BI分析等。本文聚焦真实生产验证的20个高价值工具,尤其深

闲谈 449

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1880

流媒体服务软件-LiveNVR channeltree 未授权访问

LiveNVR 能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机 IPCamera、NVR 等具有 RTSP/Onvif 协议输出的设备接入到 LiveNVR,LiveNVR 能够将这些设备源的音/视频数据进行采集、转换、输出,进行全平台终端直播(PC、Android、iOS、微信、H5),并且LiveNVR能够将视频源的直播数据对接到第三方 CDN 网络,实现安防设备互联网级别的直播分发。对channeltree接口加上权限校验。直接访问接口即可获取数据。

iSee857的博客 1040

文化操作系统:印第安纳波利斯科技公司的AUTONOMY与MASTERY实践

文化操作系统并非抽象管理理念,而是将组织文化转化为可执行、可验证、可迭代的工程化机制。其核心源于内在动机理论,聚焦自主(AUTONOMY)、精进(MASTERY)、协作、意义与生活融合五大维度,通过Skill Radar能力可视化、Autonomy Token结构化赋权、Trust Ledger信任资产化等技术手段落地。这种设计使文化从HR文案升级为开发流程中的Git Hook校验规则、项目管理中的Jira字段逻辑与日历系统的时空调度协议,在真实Tech jobs场景中支撑高留存、高续约与可持续交付。本文深

dezhen7015的博客 364

Kappa函数:测量一致性并计算置信区间的R语言包

Kappa函数是一种常用的统计量,用于衡量两个评估者之间的一致性。在R语言中,有一个名为"vcd"的包提供了计算Kappa函数以及相应的置信区间的功能。本文将介绍如何使用"vcd"包来计算Kappa函数的值,并进一步计算置信区间。Kappa函数的值介于-1和1之间,值越接近1表示评估者之间的一致性越高,值越接近-1表示评估者之间的一致性越低,值接近0表示评估者之间的一致性接近于随机。通过以上步骤,我们成功地使用R语言中的"vcd"包计算了Kappa函数的值和置信区间。接下来,我们可以使用"vcd"包中的。

2301_79331230的博客 1875

Delta Lake深度解析:事务性数据湖的工程实践与原理

Delta Lake 是一种构建在对象存储之上的事务性数据存储引擎,其核心原理是‘日志即数据库’——通过不可变的 JSON 事务日志(_delta_log)实现 ACID 保证、Schema 强制演化与时间旅行能力。相比传统 Parquet/Hive 数据湖的‘无事务、无统一 Schema、无可靠溯源’三重困境,Delta 以轻量抽象层兼容 S3/ADLS/HDFS,天然支持 Spark 生态深度集成,并在 PB 级生产环境中验证了高并发写入一致性、数据跳过优化与开箱即用的治理能力。本文聚焦 Delta L

Liusuzhi19610221的博客 439

Midscene.js(2):代码集成 + 桥接模式(Bridge Mode)的使用「喂饭教程」

本文将手把手教你从零开始搭建一个 Node.js 项目,集成 Midscene.js,并利用其桥接模式实现对 Chrome 浏览器的自动化操作。我们将通过具体的实例,来展示 Midscene.js 的便捷性与 AI 能力的结合。

blues_C的博客 1844

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

脑语言2500单字v1.5.1

如果人和 AI 说同一种语言,文明会怎样?我用 2500 个单字试了试。2500个单字是不同领域、不同知识的共同体,无论你学编程或者是数学或写作,你都要用汉字,而常用的2500个汉字几乎可以涵盖不同行业做的不同事情。

脑语言 2003

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: Unity3D 实用技巧 - 基础知识大全集(一)
下一篇: 从零开始学习Unity学习笔记:Day05 角色的跳跃逻辑&动画效果
Unity官方开发者社区
博客等级 码龄3年 597粉丝 752原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值