unity基础移动功能和选中功能的简单实现和思路

  • 第二章
  • 一、Unity中的移动方式
  • Transform类
  • 通过物理引擎表现移动
  • 二、选中功能的实现
  • 1.射线选中
  • 总结


第二章


Unity 点位 unity位移_游戏引擎



一、Unity中的移动方式

首先是使用Transform进行移动

Transform类

1. Transform.position

Unity 点位 unity位移_Unity 点位_02


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来实现

通过物理引擎表现移动

使用物理引擎方法需要给物体添加刚体组件

Unity 点位 unity位移_unity_03


1. Rigidbody.AddForce()

通过对物体施加力来改变物体的运动状态,要求给定里的方向,施力模式可以根据需求选择2. Rigidbody.MovePosition()

Unity 点位 unity位移_物理引擎_04


MovePosition()移动的Kinematic类型刚体会不受其他物理因素影响的进行运动

3.Rigidbody.velocity

velocity是描述刚体速度的一个V3变量,是刚体的属性之一,可以通过修改它的值来表现移动行为

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

Unity 点位 unity位移_物理引擎_05

二、选中功能的实现

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游戏中的框选功能分享出来😁


总结

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

Unity 点位 unity位移_物理引擎_06


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

(碎碎念)

哇,这几天太折磨人了,作为一个不看球的人,世界杯的氛围我是真的感受不来,比如昨天半夜隔壁看球学狗叫…