【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时间并不是很长,所以有些专业名字讲述可能不是很到位,欢迎各位批评指正,交流学习!!!