Unity与iOS交互设计:打造流畅的用户体验

使用Tigger触发器来制作靠近后出现交互图标的方法

本文基于Unity2019.3.2f1版本

最近想做一个第一人称的游戏出来,关于人物与物体的交互想做成很多游戏都采用的,人物靠近到一定的距离就会在物体上方出现一个提示图标,然后根据提示按下某键来与物体交互。所以有了这篇文章,记录一下自己的学习历程。

第一步:制作要交互的物体

因为算是一个功能,所以实体的物体就用普通的正方体来尝试。

首先创建一个Cube和一个有Box Collider的空物体Tigger,将空物体拖拽到Cube上,让空物体属于Cube的子物体。记得将空物体的is Tigger勾上。

ios 和unity交互 unity做交互_触发器

第二步:制作提示图标

随便创建一个plane凑活一下,然后在文件栏中右键->Create->Material新建一个材质球,挂上自己选的图片,然后调整大小后挂在加了触发器的空物体上,这里我是自己P了个字母E上去,毕竟老滚之类的玩多了就习惯这样的方式。这里我为了以后使用方便就将它制作成预制件了。

ios 和unity交互 unity做交互_触发器_02

第三步:代码

关于触发器的代码很好写,有专门的方法。这里借用一下大佬们的代码。将其挂在Tigger那个空物体上面。

登录后复制


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

public class TiggerTest : MonoBehaviour
{
    public GameObject prompt;

    public void Show(GameObject prompt){
        //用来将某个物体激活或是禁用(这里是prompt,也就是那个图标
        //禁用时这个物体和其子物体都会禁用,包括上面的脚本,在这里很方便
        prompt.SetActive(true);
    }
    public void Hide(GameObject prompt){
        prompt.SetActive(false);
    }
    void OnTriggerEnter(Collider other)//接触时触发,无需调用
    {
        Debug.Log(Time.time + ":进入该触发器的对象是:" + other.gameObject.name);
        Show(prompt);
    }
    void OnTriggerStay(Collider other)    //每帧调用一次OnTriggerStay()函数
    {
        Debug.Log(Time.time + "留在触发器的对象是:" + other.gameObject.name);
    }
    void OnTriggerExit(Collider other)
    {
        Debug.Log(Time.time + "离开触发器的对象是:" + other.gameObject.name);
        Hide(prompt);
    }
    
    // Start is called before the first frame update
    void Start()
    {
        Hide(prompt);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

可以看到,这个脚本实现了当有对象进入触发器时,图标会出现,离开后消失。

但是当调试时又出现了一个问题:图标毕竟只是一个plane,2d的纸片图标在人物进行3d移动时观感很不好。

ios 和unity交互 unity做交互_游戏开发_03


所以要在写一个让图标一直面对摄像机的脚本。

登录后复制


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

public class FaceToCamera : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //当前对象始终面向摄像机。
        this.transform.LookAt(Camera.main.transform.position);
        this.transform.Rotate(90,0,0);
    }
}

然后将该脚本挂在对象plane图标上面就行了。

最后,因为光照的原因,图标在旋转时会出现背光的时候,这时要将图标所用材质球的属性修改一下,将Shader选为Unlit/Texture就大功告成了。

ios 和unity交互 unity做交互_游戏开发_04

成果

为了实验一下是否成功,我将Fungus插件做了一个简单对话挂了上去。

ios 和unity交互 unity做交互_游戏开发_05

加强版

上面虽然解决了靠近物体后可以交互的问题,但是如果想要做出小物体交互,比如在桌子上面拿走或是检查一个钥匙杯子之类的小物体就很难实现了,所以要想一个新的方法触发Tigger。

方法其实很简单,只需要将一个去掉了Mash Renderer组件的Cube放在摄像机上就行了。

ios 和unity交互 unity做交互_unity3d_06


适当的调整位置

ios 和unity交互 unity做交互_游戏开发_07

然后就大功告成了!

此时随着镜头的移动,这个Cube也会随之移动,然后当触碰到触发器后就会触发脚本实现与物体交互的功能。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空