今天完善成了虚拟3D汽车展示项目的部分功能,虽然用的汽车模型有点粗糙,但感觉还不错,下面我就贴下源码供初学者学习!

项目展示地址:http://114.92.242.208/aspnet_client/system_web/carshow/dxw2.html,说明:浏览器必须要安装unityplayer插件。

项目操作说明:

1.鼠标左击可以点击左右车门,控制它的开关,还可以点击前后盖控制打开和关闭。

2.鼠标滚轮可以缩放,达到一个远近的效果。

3.按住键盘s键可以显示menu,h键可以隐藏menu菜单。

源码:

using UnityEngine;
using System.Collections;public class NewBehaviourScript : MonoBehaviour
{public GameObject cube;public GameObject car;public GameObject light;Vector2 p1, p2;//用来记录鼠标的位置,以便计算旋转幅度Vector3 originalPosition;float target = 0;public Texture2D redbtnTexture;private bool bOpenMenu = false; //是否打开功能框private Rect myWindow = new Rect(10, 10, 470, 300); //功能选项框架public GUISkin customSkin;//自定义皮肤private Rect closeButton = new Rect(415, 0, 26, 22);//关闭按钮public Texture2D tHero;private Rect rHero = new Rect(0, 40, 180, 230); //人物的位置//图像框private Rect stateBox = new Rect(157,50,280,210);private string[] functionStr ; //功能选项数组public Texture2D redBtn;public Texture2D greenBtn;public Texture2D blueBtn;public Texture2D orangeBtn;public Texture2D whiteBtn;public Texture2D blackBtn;private Texture2D[] iBtn;//iBtn= new Texture2D[6]{redBtn,greenBtn,blueBtn,orangeBtn,whiteBtn,blackBtn};private Rect[] pBtn = new Rect[6];//车轮更换private bool selectToggleWheel = false;//雨刷器private bool selectToogleWiper = false;//转向灯private bool selectToogleLeftTurningLight = false;private bool selectToogleRightTurningLight = false;//前照灯private bool selectToogleFarLight = false;private bool selectToogleNearLight = false;private GUIContent[] guiCon = new GUIContent[4]; //接受字符串public Rect[] strPosition = new Rect[4];// 鼠标中间键int MouseWheelSensitivity = 5;int MouseZoomMin = 18;int MouseZoomMax = 90;float normalDistance = 32;public GameObject doorL;// Use this for initializationvoid Start(){iBtn= new Texture2D[6]{redBtn,greenBtn,blueBtn,orangeBtn,whiteBtn,blackBtn};originalPosition = transform.position;doorL = GameObject.Find("doorL");cube = GameObject.Find("Main Camera");for (int i=0;i<6;i++){pBtn[i] =  new Rect(170+i*43, 65,40,30);}functionStr= new string[4]{"车轮更换","雨刷器","转向灯","前照灯"};for (int i = 0; i < 4; i++){guiCon[i] = new GUIContent(functionStr[i]);}strPosition[0] = new Rect();}// Update is called once per framevoid Update(){//如果为s键则打开弹出框if (Input.GetKey(KeyCode.S)){bOpenMenu = true;}else if (Input.GetKey(KeyCode.H)){bOpenMenu = false;}//开门//if (target < 20)//{//    doorL.transform.Rotate(transform.forward, 2);//    target = target + 1;//}//旋转if (Input.GetMouseButtonDown(0)){p1 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);//鼠标右键按下时记录鼠标位置p1}if (Input.GetMouseButton(0)){p2 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);//鼠标右键拖动时记录鼠标位置p2//下面开始旋转,仅在水平方向上进行旋转float dx = p2.x - p1.x;float dy = (float)0.1*(p2.y - p1.y);transform.RotateAround(car.transform.position, Vector3.up, dx * Time.deltaTime);//鼠标上下移动//transform.Translate(dy*Vector3.up * Time.deltaTime);light.transform.RotateAround(car.transform.position, Vector3.up, dx*Time.deltaTime);}//鼠标滚轮控制场景大小// 如果按住滑轮if (Input.GetAxis("Mouse ScrollWheel") > 0){Debug.Log(1);Debug.Log(Input.GetAxis("Mouse ScrollWheel"));if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax){normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;}if (normalDistance < MouseZoomMin){normalDistance = MouseZoomMin;}if (normalDistance > MouseZoomMax){normalDistance = MouseZoomMax;}// transform.Translate(transform.forward * normalDistance);transform.camera.fieldOfView = normalDistance;}//后滚else if (Input.GetAxis("Mouse ScrollWheel") < 0){Debug.Log(-1);if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax){normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;}if (normalDistance < MouseZoomMin){normalDistance = MouseZoomMin;}if (normalDistance > MouseZoomMax){normalDistance = MouseZoomMax;}// transform.Translate(-transform.forward * normalDistance);transform.camera.fieldOfView = normalDistance;}//按返回键退出程序    //if (Input.GetKey(KeyCode.Escape))//{//    print(1);//    Application.Quit();//}  }void OnGUI(){GUI.skin = customSkin;//赋值个性化皮肤//弹出功能选项框if (bOpenMenu){myWindow = GUI.Window(0, myWindow, DoMyWindow, "");//限制移动的横纵向坐标//myWindow.x = Mathf.Clamp((float)myWindow.x,(float)0.0,(float)Screen.width-myWindow.width);//myWindow.y = Mathf.Clamp((float)myWindow.y, (float)0.0, (float)Screen.height - myWindow.height);}string s = "作者:丁小未";GUIStyle bb = new GUIStyle();bb.normal.background = null;//设置背景bb.normal.textColor = new Color(1,0,0);//设置颜色bb.fontSize = 40;GUI.Label(new Rect(40, 20, 100, 50), s, bb);}private bool flagLight1 = false; //方向灯private bool flagLight2 = false; //远近灯void DoMyWindow(int windowsId){GUI.BeginGroup(new Rect(10, 10, 500, 400));GUI.Box(stateBox, "");
//
//
//        //点击关闭按钮if (GUI.Button(closeButton,"",GUI.skin.GetStyle("ExitButton"))){bOpenMenu = false;}// GUI.DragWindow();GUI.DrawTexture(rHero, tHero);for (int i = 0; i < 6;i++ ){GUI.DrawTexture(pBtn[i], iBtn[i]);}//写文字//GUI.Label(new Rect(170, 100, functionStr[0].Length, 20),guiCon[0],"TextItem");for (int i = 0; i < 4; i++){GUI.Label(new Rect(174,108+i*38,functionStr[i].Length,20),guiCon[i],"TextItem");}//车轮更换//绿色开状态if (selectToggleWheel){//加选择框selectToggleWheel = GUI.Toggle(new Rect(255, 110, 15, 15), selectToggleWheel, "", "TrueCheckItem");}//红色关闭状态else{selectToggleWheel = GUI.Toggle(new Rect(255, 110, 15, 15), selectToggleWheel, "", "FalseCheckItem");}//雨刷器if (selectToogleWiper){//加选择框selectToogleWiper = GUI.Toggle(new Rect(255, 148, 15, 15), selectToogleWiper, "", "TrueCheckItem");}//红色关闭状态else{selectToogleWiper = GUI.Toggle(new Rect(255, 148, 15, 15), selectToogleWiper, "", "FalseCheckItem");}//转向灯//左转if (selectToogleLeftTurningLight){if (flagLight1&&selectToogleRightTurningLight) //右边打开{selectToogleRightTurningLight = false; //关闭右边}//加选择框selectToogleLeftTurningLight = GUI.Toggle(new Rect(255, 186, 15, 15), selectToogleLeftTurningLight, "", "TrueCheckItem");flagLight1 = true;}//红色关闭状态else{selectToogleLeftTurningLight = GUI.Toggle(new Rect(255, 186, 15, 15), selectToogleLeftTurningLight, "", "FalseCheckItem");flagLight1 = false;}//右转if (selectToogleRightTurningLight){if (flagLight1 && selectToogleLeftTurningLight) //左边打开{selectToogleLeftTurningLight = false; //关闭右边}//加选择框selectToogleRightTurningLight = GUI.Toggle(new Rect(285, 186, 15, 15), selectToogleRightTurningLight, "", "TrueCheckItem");flagLight1 = true;}//红色关闭状态else{selectToogleRightTurningLight = GUI.Toggle(new Rect(285, 186, 15, 15), selectToogleRightTurningLight, "", "FalseCheckItem");flagLight1 = false;}//前照灯//近if (selectToogleNearLight){if (flagLight2 && selectToogleFarLight) //远灯打开{selectToogleFarLight = false; //关闭远灯}//加选择框selectToogleNearLight = GUI.Toggle(new Rect(255, 224, 15, 15), selectToogleNearLight, "", "TrueCheckItem");flagLight2 = true;}//红色关闭状态else{selectToogleNearLight = GUI.Toggle(new Rect(255, 224, 15, 15), selectToogleNearLight, "", "FalseCheckItem");flagLight2 = false;}//远if (selectToogleFarLight){if (flagLight2 && selectToogleNearLight) //近灯打开{selectToogleNearLight = false;}//加选择框selectToogleFarLight = GUI.Toggle(new Rect(285, 224, 15, 15), selectToogleFarLight, "", "TrueCheckItem");flagLight2 = true;}//红色关闭状态else{selectToogleFarLight = GUI.Toggle(new Rect(285, 224, 15, 15), selectToogleFarLight, "", "FalseCheckItem");flagLight2 = false;}GUI.EndGroup();}}

门盖控制:

private bool isOpenDoor = false;
private bool openDoor = false;
private bool closeDoor = false;private int target = 0;int flag = 0;Ray ray;
RaycastHit hitobj;
private GameObject doorl; //左门// Use this for initializationvoid Start () {doorl = GameObject.Find("doorL");//左门}// Update is called once per framevoid Update () {//画出射线ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Input.GetMouseButtonDown(0)){//鼠标点击车门if (Physics.Raycast(ray,out hitobj,1000)){print("ddd");Debug.DrawLine(ray.origin, hitobj.point);//左车门if (hitobj.collider.name == "doorL"){print("111");if (flag == 0){openDoor = true;closeDoor = false;}else{closeDoor = true;openDoor = false;}flag++;flag %= 2;}
}//开左门if (openDoor){//开门if (target < 40 && !isOpenDoor){doorl.transform.Rotate(Vector3.forward, 1);target = target + 1;}else{isOpenDoor = true;}}if(closeDoor){//关门if (isOpenDoor && target > 0){doorl.transform.Rotate(-Vector3.forward, 1);target -= 1;}else{isOpenDoor = false;}}
}

效果图:

关于Unity3D,我们有个专门技术讨论的大群,可以进行技术交流和咨询,群号:858550 欢迎进行技术讨论,里面有不少大牛

[Unity3d]虚拟3D汽车展示项目相关推荐

  1. Unity 3D模型展示框架篇之项目整理

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 1. ...

  2. 从二维到三维,可见Web3D技术的重要性,让线上3D产品展示所见即所得

    原文地址:Web3D技术|从二维到三维,所见即所得 导读: 从2D到3D图像展示,从二维平面到三维立体,为我们实现了所见即所得.你是否想过有一天,我们能在网购时看到真实产品的每一个细节,仿佛产品就在你 ...

  3. Unity 3D模型展示框架篇之自由观察(Cinemachine)

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 在U ...

  4. Unity 3D模型展示框架篇之框架运用

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 效果 ...

  5. Unity 3D模型展示框架篇之ILRuntime快速入门

    系列文章目录 Unity 3D模型展示框架篇之项目整理 Unity 3D模型展示框架篇之框架运用 Unity 3D模型展示框架篇之自由观察(Cinemachine) Unity 3D模型展示框架篇之资 ...

  6. VR虚拟现实3D可视化建模汽车3D在线展示

    H5三维实景建模汽车线上3D展示结合了三维实景全景建模技术.VR虚拟现实3D可视化技术.WebGL技术.计算机互联网物联网等综合技术.商迪3D以三维实景建模技术与VR全景展示技术和汽车产业结合,可为汽 ...

  7. Three.js--》实现3D汽车展厅效果展示

    目录 项目搭建 初始化three.js基础代码 加载汽车模型 设置展厅效果 设置GUI面板动态控制车身操作 车门操作与车身视角展示 设置手动点击打开关闭车门 设置图片背景 今天简单实现一个three. ...

  8. 3d可视化虚拟建模vr展示三维模型方案

    产品3D展示是一种新型的商品展示方式,它是指在互联网上通过VR虚拟现实技术呈现现实中商品的展示方式,商迪3D可以将各种类型商品.机器.设备通过三维展示技术将其展示在H5三维展示页面中,并且可以通过程序 ...

  9. Unity3D制作3D虚拟漫游场景(二)

    传送门: Unity3D制作3D虚拟漫游场景(一) -------------------------------------------------------------------------- ...

最新文章

  1. 高通APQ8074 spi 接口配置
  2. 可能是目前轻量级弹幕控件中功能最强大的一款
  3. 面试官问我如何做产品分析
  4. 数组元素替换_Linux Shell 通俗简要的讲解数组操作
  5. Core Graphics 定制UIVIew 处理图片
  6. java 线程局部存储,转载boost::thread简要分析(3):线程局部存储及其它
  7. 算法优化策略之“中途相遇”算法思想
  8. Atitit 代码复用的理解attilax总结
  9. 10.3. TUI (Text User Interface)
  10. 顶级论文创新点怎么找?中国高校首次获CVPR最佳学生论文奖有感
  11. python+django+mysql教室实验室预约系统毕业设计毕设开题报告
  12. linux 如何添加用户,Linux 怎么添加用户(adduser)
  13. 《大数据时代》读后感(一)
  14. larval-admin
  15. 127.0.0.1、192.168.0.111、本机地址、URL
  16. 强化云原生基础服务,焱融科技 YRCloudFile 与秒云完成产品兼容性互认证
  17. dpdk介绍系列之ring
  18. 吴国忠先生谈郑曼青太极拳之思路
  19. 浅析wifidog认证流程以及数据交互格式
  20. 量化交易 实战第七课 单因子 IC 分析

热门文章

  1. JVM:高效并发机制——内存模型、线程、锁
  2. IDEA2021 开启内存指示器与解决内存不足问题
  3. 关于脑电弱形式分部积分的推导
  4. 2020年Java面试复盘,收获Offer,金三银四程序员面试精装版pdf,分享给跳槽面试的程序员
  5. 英语四级作文计算机,2021年6月英语四级写作高分范文60篇:计算机翻译
  6. 提升工作效率技巧——360桌面美化-整理凌乱的桌面-Chinar
  7. 几类单波束和多波束声呐的区别
  8. 步步高S1W(家教机)上手体验
  9. Android优秀开源项目汇总
  10. ElasticSearch入门——环境搭建