程序员必知:关于Unity中的道具拾取(专题六)

简介: 程序员必知:关于Unity中的道具拾取(专题六)

原理就是把道具做成触发器,触发器就是当我们有碰撞发生的时候,只会检测碰撞,而不会有任何改变物理运动状态的过程。

触发器非常适合道具拾取,因为它不会改变原本运动物体的任何物理属性,但是依然会检测碰撞,响应物理事件。

道具拾取实例

1.创建Unity项目和文件目录,保存场景

2.导入金币模型资源rc_fx_obj_04_mod.FBX和obj_04_tex.png,设置材质球的shader为Lagacy Shaders>Diffuse,颜色设置为255,255,255,255

3.创建一个平面Plane(拉长Z轴100倍)和一个胶囊体Capsule,创建一个空节点prop,把金币模型放在prop节点下作为子节点,如下图所示摆好各个节点的位置

4.给金币节点prop添加一个矩形碰撞器组件Box Collider,点击Edit Collider,手动调整碰撞器的区域,之后勾选碰撞器组件的Is Trigger设置为触发器,注意两个物体之间必须有一个是刚体才会发生碰撞检测,所以给胶囊体Capsule添加Rigidbody组件,不使用重力

5.编辑右上角的层,添加两个层,分别为player和prop,设置胶囊体Capsule为player层,节点prop为prop层

6.打开物理引擎设置Edit>Project Settings>Physics,设置层的碰撞矩阵,只有player层和prop层会发生碰撞检测

7.脚本方面,一般根据碰撞产生的结果而定,比如玩家碰到金币,金币的数值加到玩家节点上,所以玩家需要挂一个脚本来处理这个碰撞检测事件,而金币碰到玩家,删除自己,所以金币也需要挂载一个脚本来处理碰撞检测事件

8.创建两个脚本prop和recv_prop,prop挂载在prop节点下,recv_prop挂载在胶囊体Capsule下

 打开prop.cs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class prop : MonoBehaviour {

public int prop_type; // 道具的类型,不同的道具可以设置不同的类型

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}

void OnTriggerEnter(Collider c)//这里的c指的都是撞我的节点,不是自己

{

Debug.Log("道具说:" + c.gameObject.name + c.gameObject.layer);

if (c.gameObject.layer == 8)// 是player层的节点撞的我, 可以在这里写一些播放特效的代码

{

GameObject.Destroy(this.gameObject);

}

}

}//代码效果参考:http://www.ezhiqi.com/zx/art_3268.html

打开recv_prop.cs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class recv_prop : MonoBehaviour {

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}

void OnTriggerEnter(Collider c)//这里的c指的都是撞我的节点,不是自己

{

Debug.Log("玩家说:" + c.gameObject.name + c.gameObject.layer);

if (c.gameObject.layer == 9)//是prop层的节点撞的我

{

prop p = c.GetComponent

();//获得撞我的节点的prop组件

switch(p.prop_type)//判断道具类型

{

case 1:

Debug.Log("你捡到了金币!分数加1!");//不同的道具做不同的处理

break;

}

}

}

}

9.再创建一个脚本控制胶囊体Capsule自己往Z轴正方向运动,挂载一个脚本move都节点Capsule下

打开move.cs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class move : MonoBehaviour {

private float speed = 5.0f;//移动的速度

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

float s = this.speed * Time.deltaTime;//每秒移动的距离,单位米

this.transform.Translate(0, 0, s);//移动

}

}

10.运行结果

总结

(1) 做好道具,将道具的碰撞器设置为trigger模式,只检车碰撞,不改变运动

(2) 玩家也加上碰撞器,玩家还要有一个刚体,否则没有办法触发碰撞;

(3) 玩家和道具,进行分组,做好碰撞矩阵的设置;

(4) 编写碰撞的响应函数,OnTriggerEnter(Collider c), OnTriggerExit, OnTriggerStay; 判断当前碰的是那个类型的物体,gameObjct.layer;

(5) 每一个道具,都可以挂同一个脚本,然后,里面带上道具的类型;

(6) 玩家拾取到道具,获得道具的类型,并处理我们的游戏逻辑;

(7) 将道具,做成预制体,结合地图,或者是生成位置,在指定位置放置道具;

相关文章
|
3月前
|
图形学
【unity实战】FPS实现拾取和丢弃枪
【unity实战】FPS实现拾取和丢弃枪
25 0
|
图形学
unity案例入门(拾取游戏)
案例简述这个案例实现一个非常简单的拾取宝物游戏,主角是一个小球,玩家通过键盘控制小球拾取全部宝物。 键盘控制物体移动 Rigidbody rd;public int force = 10; void Start () {rd = GetComponent ();//获得物体的刚体组件}void Update () {float h = Input.
1594 0
|
28天前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
72 6
|
27天前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
44 4
|
28天前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
39 5
|
27天前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
64 3
|
27天前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
67 3
|
28天前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
58 3
|
28天前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
86 0
|
27天前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
45 0