第二章-unity基础移动和小功能


第二章

OK ,来到了第二章,主要介绍unity中几种简单的移动方法和常用功能里选中功能的实现🌰

请添加图片描述


以下内容仅作参考

一、Unity中的移动方式

首先是使用Transform进行移动

Transform类

1. Transform.position

在这里插入图片描述
Transform.position()是Vector3类型的数据类型,这意味着V3类型能进行的运算操作可以被使用
这说明我们可以通过运算进行值的修改来达到移动的效果
比如

transform.position += moveDirection * Time.deltaTime * moveSpeed;

这段代码的意义是向某个方向按照一定的速度前进
moveDirection是V3类型的变量用来表示方向
moveSpeed是一个变量代表速度前进
Time.deltaTime是从上一帧到这一帧之间的时间间隔
这段移动代码根据以上几个要素的运算叠加描述了位移这个行为

2. Transform.Translate()

transform.Translate(moveDirection*Time.deltaTime*moveSpeed);

Transform.Translate是一个具有多个重载的方法
可以通过传入V3变量或者三个float变量来描述位移行为

二者的区别主要在一个是V3类型,一个是void方法,但是Translate可以表示坐标系的不同,默认是自身坐标系,而position是世界坐标系

这里的moveDirection是一个仅用来表示方向的归一化向量,归一化可以通过.normalized来实现

通过物理引擎表现移动

使用物理引擎方法需要给物体添加刚体组件
在这里插入图片描述
1. Rigidbody.AddForce()
通过对物体施加力来改变物体的运动状态,要求给定里的方向,施力模式可以根据需求选择

2. Rigidbody.MovePosition()
在这里插入图片描述
MovePosition()移动的Kinematic类型刚体会不受其他物理因素影响的进行运动
3.Rigidbody.velocity
velocity是描述刚体速度的一个V3变量,是刚体的属性之一,可以通过修改它的值来表现移动行为

总结
如果没有特殊要求尽量使用transform移动,物理引擎的移动方法会在过程中产生大量物理计算,对性能消耗很大

请添加图片描述

二、选中功能的实现

1.射线选中

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if( Physics.Raycast(ray, out RaycastHit raycastHit, float.MaxValue, layerMask))
{       
......操作部分
}         

这段代码是从主摄像机发射出一条射线到鼠标点击位置
Physics.Raycast返回一个bool值,表示在给定条件下射线是否触碰到layerMask层级下的任何物体
其中Ray表示的是一个结构体,在这里主要使用的是其中的两个V3变量,分别表示射线起点和方向
第二个参数要求显式使用out关键字返回一个RaycastHit类型的变量引用,这个变量是一个结构体类型保存着被射线击中物体的信息
第三个参数是一个float类型变量,表示射线的最大距离
最后一个是一个int型变量,表示射线判断的层级,

选中功能就先介绍这一种,有机会会把RTS游戏中的框选功能分享出来😁


总结

第二章简单介绍了移动和点击选择这个基本的功能,但是没有作相关应用,下一篇文章会根据本章内容,进行一个简单小功能的开发,第三章要做什么还没想好,准备实现一下网格系统

请添加图片描述


下一篇预告
移动和小功能的应用实现

(碎碎念)
哇,这几天太折磨人了,作为一个不看球的人,世界杯的氛围我是真的感受不来,比如昨天半夜隔壁看球学狗叫…
你欢呼或者说话我都能理解,你学狗叫是咋回事,我是半夜睡觉跑秦岭了?
早上要做核酸,晚上还要在动物园边上听狗叫请添加图片描述

我是真的会谢🙃
现在的我be like
请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值