【unity】小白向---简单的物品拾取到手上

    前情提要,本人一个unity初学者,对于如何将物品拾取到手上这一个问题研究了近三天,都仍未明白如何实现。网络上出现的要么是将物品删除,要么就是对物品进行鼠标拾取拖动。

    先来看看实现效果

    对准所要拾取的物品(注意必须是刚体rigidbody组件,且加了colider组件,且要有sphere碰撞域),当摄像机/人物进到碰撞域里面后,可以按下特定的键触发拾取。

拾取对象为图中的绷带

 

显示碰撞域

 

检查器页面(要拾取的必须加上sphere box 和rigidbody!)

   创建物体后,在主相机 main-camara或者说你的人物下建立一个空对象,将空对象移动到你觉得合适的位置(此为“手”,或者物体所要转移的位置)

如图:

建立空对象GameObject后, 创建C#脚本

我这里命名为tack脚本

代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class tack : MonoBehaviour
{

    private bool canCollect = false;
    //判断是否进入碰撞域
    private GameObject target;
    //对象target
    [SerializeField] Transform ItemSlot;
    //“手”
    void Update()
    {
        //一旦检测到按下f且符合能拾取条件,就拾取
        if (Input.GetKeyDown(KeyCode.F))
        {
            if (canCollect)
            {
                target.transform.SetParent(ItemSlot);             //设立父对象
                target.transform.localEulerAngles = Vector3.zero; //设置相对于父对象的角度为0
                target.transform.localPosition = Vector3.zero;    //设置相对于父对象的位置为0
            }
        }
    }

    private void OnTriggerEnter(Collider other)    //碰撞域进入判断
    {
        // 判断名称,设置可拾取状态,并将目前碰撞到的对象引用给予target
        if (other.gameObject.tag == "item")
        {
            canCollect = true;
            target = other.gameObject;
        }
    }

    private void OnTriggerExit(Collider other)    //碰撞域退出判断
    {
        // 退出碰撞箱范围,禁用拾取,解除target的引用
        if (other.gameObject.tag == "Item")
        {
            canCollect = false;
            target = null;
        }
    }
}

结束脚本的代码编写后,将其挂载到主相机或者人物上面。

再将之前创建的空对象GameObject挂载到这个Item Slot上

 

而后运行代码

 

 完成

-----===================================================================-----

  第一次写博,且自学unity时间并不是很长,所以有些专业名字讲述可能不是很到位,欢迎各位批评指正,交流学习!!!