【菜菜丸的菜鸟教程】实现拾取物体的一种方法
拾取物品是游戏中常见的一个动作,实现它的方法有很多种。今天介绍的方法将用到一个简单易懂的组件——父约束(Parent Constraint)。可能有些小伙伴会说,拾取物品还不简单嘛?只要用Transform.SetParent就万事大吉啦~但是,Transfrom.SetParent有一个缺点:父物体的缩放比例会影响子物体。试想,如果父物体的缩放比例是2,而子物体的缩放比例是0.5,那么在改变父级
·
拾取物品是游戏中常见的一个动作,实现它的方法有很多种。今天介绍的方法将用到一个简单易懂的组件——父约束(Parent Constraint)。
可能有些小伙伴会说,拾取物品还不简单嘛?只要用Transform.SetParent就万事大吉啦~但是,Transfrom.SetParent有一个缺点:父物体的缩放比例会影响子物体。试想,如果父物体的缩放比例是2,而子物体的缩放比例是0.5,那么在改变父级的那一刻,子物体就会突然变大!这肯定不是我们想要的效果。使用Parent Constraint就可以避免这个问题,而且它还有其他一些功能,现在就让我们来试试看吧!
1. Parent Constraint组件的添加与设置
在选中游戏对象(被拾取物品)的Inspector窗口点击“Add Component”添加组件,输入Parent Constraint,就可以添加该组件,它的面板如下所示:
当用于游戏角色拾取物品时,一般开始时应取消勾选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
<
ParentConstraint
>
(
)
;
if
(
parentConstraint
==
null
)
{
parentConstraint
=
item
.
AddComponent
<
ParentConstraint
>
(
)
;
}
}
public
void
Fetch
(
)
{
parentConstraint
.
constraintActive
=
true
;
}
}
3. 在动画片段中添加事件
打开拾取物品动画的Animation面板,找到角色握住剑柄的那一帧,添加事件,如图:
然后,在事件的Inspector面板中,选择刚才我们在脚本中写好的函数。
到此为止,一个拾取物品动画就做好啦,是不是很简单?
4. 扩展应用
可能已经有小伙伴注意到了,Parent Constraint组件中可以添加多个Source。也就是说,目标物体可以受多个源物体控制。我们可以通过调整不同源物体的影响权重来实现更精细的效果。比如,双手控制悬浮的魔法球,等等。欢迎大家发挥想象,回复本帖写出你的创意~
附:示例视频
更多推荐
已为社区贡献717条内容
所有评论(0)