栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity3D--武器可视化窗口(支持移动和电脑设备)

Unity3D 更新时间:发布时间: 百科书网 趣学号

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

Unity3D--武器可视化窗口
  • 前言
  • 一、准备工作
  • 二、点击事件(切换物品,显示隐藏Canvas)
    • 1.新创建一个ItemMenu脚本
    • 2.效果图
  • 三、浏览物品(点击拖拽)
    • 1.新创建一个ItemView脚本
    • 2.效果图
  • 总结


前言

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


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

一、准备工作

示例:

  • 新建场景
  • 在Hierarchy面板下新建一个Cube用作背景(可自行选择其他)
  • 新建一个GameObject用作放置要展示的物品,命名Container
  • 新建两个Button,用作切换物品,
二、点击事件(切换物品,显示隐藏Canvas) 1.新创建一个ItemMenu脚本
  • 把脚本挂在Container上,把其子物体拖到Items里,

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
2.效果图

示例:

三、浏览物品(点击拖拽) 1.新创建一个ItemView脚本
  • 把ItemView脚本挂在Container下的每个物品身上

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商店–免费资源
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1068829.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号