当前位置:   article > 正文

【unity】小白向---简单的物品拾取到手上_unity使用刚体来抓取模型

unity使用刚体来抓取模型

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

    先来看看实现效果

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

拾取对象为图中的绷带

 

显示碰撞域

 

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

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

如图:

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

我这里命名为tack脚本

代码如下

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class tack : MonoBehaviour
  5. {
  6. private bool canCollect = false;
  7. //判断是否进入碰撞域
  8. private GameObject target;
  9. //对象target
  10. [SerializeField] Transform ItemSlot;
  11. //“手”
  12. void Update()
  13. {
  14. //一旦检测到按下f且符合能拾取条件,就拾取
  15. if (Input.GetKeyDown(KeyCode.F))
  16. {
  17. if (canCollect)
  18. {
  19. target.transform.SetParent(ItemSlot); //设立父对象
  20. target.transform.localEulerAngles = Vector3.zero; //设置相对于父对象的角度为0
  21. target.transform.localPosition = Vector3.zero; //设置相对于父对象的位置为0
  22. }
  23. }
  24. }
  25. private void OnTriggerEnter(Collider other) //碰撞域进入判断
  26. {
  27. // 判断名称,设置可拾取状态,并将目前碰撞到的对象引用给予target
  28. if (other.gameObject.tag == "item")
  29. {
  30. canCollect = true;
  31. target = other.gameObject;
  32. }
  33. }
  34. private void OnTriggerExit(Collider other) //碰撞域退出判断
  35. {
  36. // 退出碰撞箱范围,禁用拾取,解除target的引用
  37. if (other.gameObject.tag == "Item")
  38. {
  39. canCollect = false;
  40. target = null;
  41. }
  42. }
  43. }

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

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

 

而后运行代码

 

 完成

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/720320
推荐阅读
相关标签
  

闽ICP备14008679号