千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:南京千锋IT培训  >  技术干货  >  Unity实现拾取物体的一种方法

Unity实现拾取物体的一种方法

来源:千锋教育
发布人:qyf
时间: 2023-01-10 16:07:36

  拾取物品是游戏中常见的一个动作,实现它的方法有很多种。今天介绍的方法将用到一个简单易懂的组件——父约束(Parent Constraint)。

  拾取物品是游戏中常见的一个动作,实现它的方法有很多种。今天介绍的方法将用到一个简单易懂的组件——父约束(Parent Constraint)。

  可能有些小伙伴会说,拾取物品还不简单嘛?只要用Transform.SetParent就万事大吉啦~但是,Transfrom.SetParent有一个缺点:父物体的缩放比例会影响子物体。试想,如果父物体的缩放比例是2,而子物体的缩放比例是0.5,那么在改变父级的那一刻,子物体就会突然变大!这肯定不是我们想要的效果。使用Parent Constraint就可以避免这个问题,而且它还有其他一些功能,现在就让我们来试试看吧!

  1. Parent Constraint组件的添加与设置

  在选中游戏对象(被拾取物品)的Inspector窗口点击“Add Component”添加组件,输入Parent Constraint,就可以添加该组件,它的面板如下所示:

图片 1

  当用于游戏角色拾取物品时,一般开始时应取消勾选Is Active,并通过脚本控制,让角色“拿起”物体时,再将该组件激活。

  Constraint Settings一栏用于调整被拾取物品的相对偏移量、偏移角度等等。当选中Lock时,这些参数将不可编辑。

  如果希望你设定的约束参数影响被拾取物品的位置或坐标轴,就要勾选Freeze Position Axes和Freeze Rotation Axes的相应选项。

  Source指的是影响物品位移和旋转的源物体,在我们的例子中,游戏角色要拾取一把剑,那么我们就把角色的右手作为源物体拖拽到这里。

  2. 基础脚本

  我们要用脚本来激活Parent Constraint组件。脚本内容非常简单,需要注意的一点是,在脚本最前面要用到UnityEngine.Animations这个命名空间。以下是我们的示例使用的脚本:

  using System.Collections;

  using System.Collections.Generic;

  using UnityEngine;

  using UnityEngine.Animations;

  public class FetchItem : MonoBehaviour

  {

  public GameObject item;

  ParentConstraint parentConstraint;

  void Start()

  {

  parentConstraint = item.GetComponent();

  if (parentConstraint == null)

  {

  parentConstraint = item.AddComponent();

  }

  }

  public void Fetch()

  {

  parentConstraint.constraintActive = true;

  }

  }

  3. 在动画片段中添加事件

  打开拾取物品动画的Animation面板,找到角色握住剑柄的那一帧,添加事件,如图:

图片 2

  然后,在事件的Inspector面板中,选择刚才我们在脚本中写好的函数。

图片 3

  到此为止,一个拾取物品动画就做好啦,是不是很简单?

  4. 扩展应用

  可能已经有小伙伴注意到了,Parent Constraint组件中可以添加多个Source。也就是说,目标物体可以受多个源物体控制。我们可以通过调整不同源物体的影响权重来实现更精细的效果。比如,双手控制悬浮的魔法球,等等。欢迎大家发挥想象,回复本帖写出你的创意。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

三元运算符是什么?三元运算符怎么用

2023-06-20

Java常量是什么?

2023-06-14

保证Servlet线程安全的方法有哪些?

2023-06-05

最新文章NEW

什么是javascript?

2023-06-12

javascript常用正则

2023-04-20

用c语言编写爱心的代码

2023-04-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>