unity3d--武器可视化窗口(支持移动和电脑设备)(代码片段)

穿迷彩服的鲨鱼 穿迷彩服的鲨鱼     2023-02-02     441

关键词:

提示:素材来源网络,侵权必删


前言

在UI界面控制3D物体,进行无死角浏览


提示:以下是本篇文章正文内容,下面案例可供参考

一、准备工作

示例:

  • 新建场景
  • 在Hierarchy面板下新建一个Cube用作背景(可自行选择其他)
  • 新建一个GameObject用作放置要展示的物品,命名Container
  • 新建两个Button,用作切换物品,

二、点击事件(切换物品,显示隐藏Canvas)

1.新创建一个ItemMenu脚本

  • 把脚本挂在Container上,把其子物体拖到Items里,
/****************************************************
    文件:ItemMenu.cs
	作者:HKZ
    邮箱: 3046916186@qq.com
    日期:2021/11/15 15:35:27
	功能:点击事件(切换物品,显示隐藏Canvas)
*****************************************************/

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

namespace HKZ

    public class ItemMenu : MonoBehaviour
    
        private GameObject Canvas;          //当点击物品想要浏览时,隐藏UI界面
        private Button btnNext;             //点击浏览下一个
        private Button btnPrevious;         //点击浏览上一个
        private int currentIndex = 0;       //当前物品下标

        public GameObject[] Items;         //要展示的物品集合


        private void Awake()
        
            Canvas = GameObject.Find("Canvas");

            btnNext = GameObject.Find("btnNext").GetComponent<Button>();
            btnNext.onClick.AddListener(OnNextItemClick);

            btnPrevious = GameObject.Find("btnPrevious").GetComponent<Button>();
            btnPrevious.onClick.AddListener(OnPreviousItemClick);

            Items[0].SetActive(true);        //为了方便这里就不查找了,可自行查找
        
        private void OnNextItemClick()
        
            Items[currentIndex].SetActive(false);
            currentIndex++;
            if (currentIndex >= Items.Length)
            
                currentIndex = 0;
            
            Items[currentIndex].SetActive(true);
        
        private void OnPreviousItemClick()
        
            Items[currentIndex].SetActive(false);
            currentIndex--;
            if (currentIndex < 0)
            
                currentIndex = Items.Length - 1;
            
            Items[currentIndex].SetActive(true);
        
        private void Update()
        
            if ((Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
                || (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began
                && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)))
            
                Canvas.SetActive(false);
            
            else if (!Input.GetMouseButton(0))
            
                Canvas.SetActive(true);
            
        
    

2.效果图

示例:

三、浏览物品(点击拖拽)

1.新创建一个ItemView脚本

  • 把ItemView脚本挂在Container下的每个物品身上
/****************************************************
    文件:ItemView.cs
	作者:HKZ
    邮箱: 3046916186@qq.com
    日期:2021/11/15 16:8:6
	功能:浏览物品(支持电脑和移动设备)
*****************************************************/

using UnityEngine;

namespace HKZ

    public class ItemView : MonoBehaviour
    
        private Vector3 baseScale = new Vector3(0.7f, 0.7f, 0.7f);
        private bool isPhone = false, isFirst = true;
        private float zRot = 0, yRot = 0;
        private Vector3 startPos;
        private void OnEnable()
        
            transform.localScale = baseScale;
            if (SystemInfo.deviceType == DeviceType.Handheld)//移动设备
            
                isPhone = true;
            
            isFirst = true;
        
        private void Update()
        
            if (isPhone)
            
                if (Input.touchCount > 0)
                
                    if (isFirst)
                    
                        isFirst = false;
                        startPos = Input.GetTouch(0).position;
                        return;
                    
                    else
                    
                        zRot += (Input.GetTouch(0).position.y - startPos.y) * 0.09f;
                        zRot = Mathf.Clamp(zRot, -55, 55);
                        yRot += (Input.GetTouch(0).position.x - startPos.x) * 0.25f;
                        startPos = Input.GetTouch(0).position;
                    
                    ScaleUp();
                
                else
                
                    isFirst = true;
                    zRot = Mathf.Lerp(zRot, 0, 0.08f);
                    yRot = Mathf.Lerp(yRot, 0, 0.08f);
                    ScaleDown();
                
                transform.eulerAngles = new Vector3(0, 90 + yRot, zRot);
            
            else
            
                if (Input.GetMouseButton(0))
                
                    if (isFirst)
                    
                        isFirst = false;
                        startPos = Input.mousePosition;
                        return;
                    
                    else
                    
                        zRot += (Input.mousePosition.y - startPos.y) * 0.1f;
                        zRot = Mathf.Clamp(zRot, -55, 55);
                        yRot += (Input.mousePosition.x - startPos.x) * 0.3f;
                        //yRot = Mathf.Clamp(yRot, -55, 55);
                        startPos = Input.mousePosition;
                    
                    ScaleUp();
                
                else
                
                    isFirst = true;
                    zRot = Mathf.Lerp(zRot, 0, 0.2f);
                    yRot = Mathf.Lerp(yRot, 0, 0.2f);
                    ScaleDown();
                
                transform.eulerAngles = new Vector3(0, 90 + yRot, zRot);
            
        
        private void ScaleUp()
        
            transform.localScale = Vector3.Lerp(transform.localScale, Vector3.one, 0.075f);
        
        private void ScaleDown()
        
            transform.localScale = Vector3.Lerp(transform.localScale, baseScale, 0.075f);
        
    

2.效果图

示例:

总结

  • 素材来自Unity商店–免费资源

unity3d--武器可视化窗口(支持移动和电脑设备)(代码片段)

提示:素材来源网络,侵权必删Unity3D--武器可视化窗口前言一、准备工作二、点击事件(切换物品,显示隐藏Canvas)1.新创建一个ItemMenu脚本2.效果图三、浏览物品(点击拖拽)1.新创建一个ItemView脚本2.... 查看详情

unity3d--武器可视化窗口

Unity3D--武器可视化窗口前言总结代码明天及时奉上前言来了来了—>Unity3D–武器可视化窗口总结代码明天及时奉上来了来了------>Unity3D–武器可视化窗口 查看详情

unity3d--武器可视化窗口

Unity3D--武器可视化窗口前言总结代码明天及时奉上前言来了来了—>Unity3D–武器可视化窗口总结代码明天及时奉上来了来了------>Unity3D–武器可视化窗口 查看详情

unity3d常用插件都有哪些

...,可以让开发者在Unity中进行2D开发,8.PlayerMaker,是一个可视化脚本工具,开发者可以使用它很快的完成游戏原型制作,能够大大的提高开发效率,让你的游戏更加完美,9.PathologicalGames,用于绝大多数的曲线操作10.FxMaker,侧重... 查看详情

unity3d如何做到用鼠标点击一个物品可以在屏幕上出来设定好的文字

...logies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互... 查看详情

unity3d中常规移动的四种方法分别是啥?

...MoveTowards。Unity3D是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型创作工具。Unity类似于Director,Blender,Virtools或TorqueGameBuilder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在... 查看详情

unity武器拖尾效果

...RPGWeaponTrails武器拖尾效果AssetStore地址:https://www.assetstore.unity3d.com/en/#!/content/2458CSDN资源地址:http://download.csdn.net/detail/akof1314/7610241截图:由于这个插件提供的AnimationController.cs仅对Animation动画进行支持,对Animator动画支持的话需... 查看详情

unity武器拖尾效果

...RPGWeaponTrails武器拖尾效果AssetStore地址:https://www.assetstore.unity3d.com/en/#!/content/2458CSDN资源地址:http://download.csdn.net/detail/akof1314/7610241截图:由于这个插件提供的AnimationController.cs仅对Animation动画进行支持,对Animator动画支持的话需... 查看详情

unity3d中的game窗口和scene窗口显示的不一样怎么解决

工作中遇到unity3dgame窗口比scene窗口暗,亮度不一样。此情况发生在unity3d2018.4中解决办法:需要开启useHDR功能。打开unity3dProjctSettings设置面板菜单位置:Edit->ProjectSettings。见下图Graphics项,2018.4UseHDR默认没勾上,打上勾亮度就... 查看详情

unity3d插件是啥

...logies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。    Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等... 查看详情

问题和任务包003.使用报告.数据可视化.powerbi.微软的新武器

据说R语言的功能内嵌,可以直接使用,可以做出很复杂的图,同时,对数据的清洗整理比excel强了n倍.收集10片相关文章资料下载试用版,使用注意验证细节考虑和R语言.excel的异同最好使用其全部重要功能截图,吐槽组织成文章,总结心得... 查看详情

什么是unity3d?

...logies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互... 查看详情

unity3d都有哪些优势和劣势

1、智能界面设计,可视化编程界面完成各种开发工作,高效脚本编辑,实现高效率开发2、面向组件开发,不同的游戏项目,整个逻辑需要用C#重新写,但是资源都是可以沿用原来项目的。3、跨平台性,只需一键即可完成作品的... 查看详情

unity3d的介绍

...logies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互... 查看详情

支持移动端展示,数据源新增对db2的支持,dataease开源数据可视化分析平台v1.6.0发布

1月10日,DataEase开源数据可视化分析平台正式发布v1.6.0版本。在该版本中,平台支持了移动端展示;数据源方面,新增了对IBMDB2数据源的支持;视图方面,支持同比/环比快速计算方式,过滤器支持and和o... 查看详情

在unity3d里无法移动物体

我在unity3d里通过transform.Translate(Vector3(0,0,1)和transform.position.z+=1来移动物体,但有些物休能动,另一些从UNITY3D官网上下载的物体却不能移动,通过属性窗口能看到物体的POSITION值是在变化,但视图窗口中物体是不动的,只有物体... 查看详情

unity3d是啥东西

...logies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互... 查看详情

如何在移动端数据可视化大屏实现分析?

...开发工具、解决方案和服务,赋能开发者。项目想做数据可视化,想同时在PC端、手机端查看数据怎么办?业务主要关心的数据包括:销售数据、业绩达成、同比、环比,各产品销售情况及潜客商机、未来收入预测等数据,最好... 查看详情