(C#脚本)Unity中角色移动的几种实现方法,以及心得。(适合新手入门).pdfVIP

(C#脚本)Unity中角色移动的几种实现方法,以及心得。(适合新手入门).pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(C#脚本)Unity中⾓⾊移动的⼏种实现⽅法,以及⼼得。 (适合新⼿⼊门) ⽬录 PS :⾸先我们要知道,在C#中Transform组件是可以直接调⽤的,⽽其他的(例如:Rigidbody , Animator )都需要通过GetConpoment组件的名称 (); 来获取进⾏实例化(⼀般在初始化时)。 例⼦:调⽤Rigidbody2D private Rigidbody2D rb2D;//声明变量实例化 void Start() { rb2d = GetComponentRigidbody2D();//获取 } 1.对Unity脚本写⼊有⼀定的思维了解。 我们在C#中想要实现对Unity 内各个组件、属性设置的修改和调⽤,⾸先要观察它在外部的形式,也就是 Unity 内的表现 ⽐如我想要控制2D⾓⾊移动,那么改变的就它在X ,Y轴上的坐标(横向和竖向),可以观察到每个物 体的Transform组件下的Position就是该物体的坐标位置,所以我们只需要在脚本实现修改该坐标位置即可 实现物体的移动。(见图1.1) 图1.1 2.分析需求,观察了解要实现的项⽬的条件在Unity中的外在表现。 a.上⽂已经提到,移动实际上就是物体坐标的改变,其次我们需要⽤键盘或⿏标对它进⾏控制,它需要 有⼀个移动速度。 b.在Unity的Project Setting中可以看到它内置了Inpuut Manager ,它作为对外和键盘⿏标交互。Horizontal 控制物体在X轴上的运动,“A,D”输⼊(可以直接在外部修改)Vertical控制物体Y轴上的运动。(见图 2.1) 图2.1 3.开始通过代码实现功能。 a.在Assets⾥新建Scripts⽂件夹⽤于存放脚本⽂件,在该⽂件夹中建⽴PlayerMovementController脚本。 b.需要设置的变量,移动速度moveSpeed ,定义⼀个⼆维向量moveDir using UnityEngine; public float MoveSpeed=3.0f; private Vector2 moveDir = new Vector2(); ps :速度⽤public (把它暴露出去),⽅便我们在外部进⾏修改,表现是图3.1 图3.1 c.写移动函数 把⼆维向量的两个⽅向与键盘交互绑定,当按⼀下A键,X坐标就有左边的1的增量 private void MoveCharacter { moveDir.x = Input.GetAxisRaw(Horizontal); moveDir.y =Input.GetAixisRaw(Vertical); moveDir.Normalize();//当有两个⽅向的向量时进⾏整合 } ps :Normalize 作为将两个⽅向向量合并处理的⼀个函数 图3.2 (1)调⽤transform代码实现 ps: 因为我们这个组件做好后要挂到Player上,所以这⾥的transform都是直接调⽤的Player的。 在坐标位置上加上变化值 transform.position += Vector3(moveDir.x,moveDir.y,0.0f) * MoveSpeed * Time.deltaTime; ps:其中Time.delate相当于⼀个变量,理解为在⼀定时间内完成上⼀帧的动作,运⾏有50帧,它就是 0.02 ,它会随着电脑运⾏帧率⽽变化,⽬的是为了让游戏在不同电脑环境下都显得更为流畅稳定。 调⽤transform ⾃带的Translate函数直接修改变化 transform.Translate(moveDir * MoveSpeed * Time.deltaTime); (2)调⽤RigidBody2D实现代码 要先给Player挂上Rigidbody2D的组件,直接在Unity界⾯Player下Add Component 先声明变量 private RigidBody2D rb2d ; ⽤Rigidbody2D 内置的MovePosition函数 rb2d.MovePosition(new Vector2(transform.position.x,transform.position.y)+moveDir * MoveSpeed * Time.fixedDeltaTime); 在原坐标上增加变化值 rb2d.position += moveDir * MoveSpeed * Time.fixedDeltaTime; 把Player当作⼀个刚体,相当于给它⼀个速度推动移动,调⽤velocity函数,它内

文档评论(0)

166****9181 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档