虚拟仿真项目部分常用方法总结

一:设备认知

1:先单独创建一个相机,对需要进行设备认知的模型进行单独渲染;然后创建一个RenderingTexture来接收其渲染结果。如下图所示:
在这里插入图片描述

2:创建一个RawImage来显示相机对模型的渲染结果,将上一步创建的RenderingTexture赋值给RawImage,
在这里插入图片描述
3:创建一个Image,位置、大小与RawImage一样,将其调成完全透明,再将控制模型的脚本挂在上面,以及添加EventTrigger组件,如下图所示:
在这里插入图片描述
控制模型脚本如下:

private float m_fDeltaX;
    private float m_fDeltaY;
    public float m_fSpeed = 0;
    public bool isClick = false;

    //初始旋转
    private Vector3 startRotate;
    public Vector3 startScale;
    /// 起始位置
    private Vector3 StartPosition;
    /// 鼠标按下的之前位置
    private Vector3 previousPosition;
    /// 鼠标按下之后的滑动距离
    private Vector3 offset;
    /// 鼠标抬起后距离初始位置的位置
    private Vector3 finalOffset;
    float scale = 1f;
    //需要控制的物体
    public GameObject obj;
     void Start()
    {
        m_fSpeed = 1000;
        startRotate = obj.transform.localEulerAngles;
      
    }


    void Update()
    {
       
        if (Input.GetMouseButton(0) && isClick)
        {
            if (Input.GetMouseButtonDown(0))    // Input.GetMouseButtonDown(0) 当0键被按下一次
            {
                StartPosition = Input.mousePosition;
                previousPosition = Input.mousePosition;
            }
            if (Input.GetMouseButton(0))       // Input.GetMouseButton(0) 当0键被按住持续侦测(包含down和up各一次)
            {
                offset = Input.mousePosition - previousPosition;
                previousPosition = Input.mousePosition;
                Vector3 Xoffset = new Vector3(offset.x, offset.y, 0);
                obj.transform.Rotate(Vector3.Cross(Xoffset, Vector3.forward).normalized, offset.magnitude * 0.5f, Space.World);
            }
        }
        if (isClick)
        {
            if (Input.GetAxis("Mouse ScrollWheel") != 0)//这个是鼠标滚轮响应函数
            {
                //滚轮响应一次就让scale自增或自减,注意,滚轮函数是有返回值的,
                //返回是float型的!这个由滚轮向前(正数)还是向后(负数)滚决定
                scale += Input.GetAxis("Mouse ScrollWheel");
                obj.transform.localScale = new Vector3(1 * scale, 1 * scale, 1 * scale);//改变物体大小
            }
        }
    }
    public void OnMouseDown()
    {
        isClick = true;
    }
    public void OnMouseUp()
    {
        isClick = false;
    }

二:2D鼠标拖拽

在需要进行拖拽功能的Image上添加BoxCollider,然后将控制拖拽的脚本挂载上去即可实现拖拽功能,如下图所示:
在这里插入图片描述
拖拽脚本如下:

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


public class DragPanel : MonoBehaviour, IDragHandler
{
    public void OnDrag(PointerEventData eventData)
    {
        float x = Input.mousePosition.x;
        float y = Input.mousePosition.y;
        //物体拖拽的一个范围  根据实际项目分辨率自行合理设置即可
        x = Mathf.Clamp(x, 100, 1800);
        y = Mathf.Clamp(y, 100, 900);

        transform.position = new Vector3(x, y);
    }

    private Vector3 StartPos;

    private void Start()
    {
        StartPos = transform.localPosition;
    }

    public void ChangePos()
    {
        transform.localPosition = StartPos;
    }
}

三:鼠标点击3D物体

    Ray ray;
    RaycastHit hit;
    GameObject obj;
    // Update is called once per frame
    void Update()
    {
        if (EventSystem.current.IsPointerOverGameObject()) return;

        Ray ray = Camera.main.GetComponent<Camera>().ScreenPointToRay(Input.mousePosition);
        if (Camera.main.gameObject.activeSelf == false) return;
        if (Physics.Raycast(ray, out hit, 1000, 1 << 9))//9代表检测的物体层级
        {
            obj = hit.collider.gameObject;
        }
    }

四:UI的自适应处理

1:将canvas的UIScaleMode设为ScaleWithScreenSize,并设定好分辨率。
2:UI设置好锚点后,然后将此面板的四个锚点分别设置在面板的四个顶点上,将面板包裹住,如下图所示:
在这里插入图片描述

五:UI的排版小技巧

1:如果一个父物体下有多个子物体,比如说背包系统按钮这种,那么可以通过给父物体添加GridLayoutGroup组件,然后设置其对应参数,实现排版自由:
重要参数
Padding:内边距(子物体与父物体的间隔距离)
CellSize:控制子物体的宽高尺寸
StartCornor:第一个元素的位置锚点
StartAxis:元素排列的一个轴向,水平排列还是竖直排列。
Spqcing:元素之间的间隔距离
ChildAlignment:对齐方式
Constraint:对行数和列数的要求

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity虚拟仿真项目是一种利用Unity引擎创建的虚拟仿真系统。该系统可以模拟现实世界中的各种场景和情况,例如机器人操作、航空飞行、车辆驾驶、医疗手术等。通过使用Unity虚拟仿真项目,用户可以在不受现实世界物理限制的情况下,进行各种试验和测试,从而提高效率和减少成本。同时,该系统还可以为教育和培训提供更加真实和生动的体验,使学习者更容易理解和掌握知识。 ### 回答2: Unity虚拟仿真项目是指利用Unity引擎来创建并实现虚拟现实(VR)或增强现实(AR)的仿真应用程序。在这个项目中,开发者可以使用Unity的工具和资源来构建虚拟世界,其中可以包含各种元素,如物体、场景、声音和动画等。 Unity虚拟仿真项目可以应用于各种领域和行业,例如教育、医疗、游戏和建筑等。在教育领域,可以使用Unity创建虚拟实验室或虚拟课堂,使学生能够进行实践操作,提高他们的学习效果和兴趣。在医疗领域,可以使用Unity来模拟手术过程,让医生和学生进行虚拟手术训练,从而提高手术技巧和安全性。 Unity虚拟仿真项目还可以应用于游戏开发领域。开发者可以使用Unity创建逼真的游戏世界和角色,提供沉浸式的游戏体验。同时,Unity还支持多人游戏开发,可以实现玩家之间的互动和合作。 在建筑领域,Unity虚拟仿真项目可以用于创建建筑模型和演示,使用户能够在虚拟环境中漫游,并进行建筑设计和展示。这可以帮助建筑师和客户更好地理解和评估设计方案,提高设计效率和准确性。 总之,Unity虚拟仿真项目能够以一种沉浸式的方式模拟和展示现实世界的各种场景和情境。通过使用Unity提供的工具和资源,开发者可以创造出互动性强、逼真度高的虚拟环境,从而提供更好的教育、训练、体验和展示效果。 ### 回答3: unity虚拟仿真项目是基于Unity引擎开发的虚拟现实模拟应用。它可以用于教育、培训、娱乐等各个领域。 首先,unity虚拟仿真项目可以应用于教育领域。通过虚拟仿真技术,学生可以在虚拟环境中进行实验操作,观察现象,掌握理论知识。比如,在物理学课程中,学生可以通过在虚拟环境中模拟实验来理解物理规律;在医学教育中,学生可以通过虚拟仿真来进行手术操作的训练,提高技能水平。 其次,unity虚拟仿真项目还可以用于职业培训。比如,在建筑行业,通过虚拟模拟可以让学员在虚拟环境中学习建筑设计、施工过程,提高其专业能力;在飞行员培训中,学员可以通过虚拟仿真模拟各种复杂情况来提升应对能力。 此外,unity虚拟仿真项目还可以应用于娱乐领域。比如,虚拟现实游戏可以带给玩家身临其境的游戏体验,增加游戏的趣味性和互动性。 总的来说,unity虚拟仿真项目的应用十分广泛。它可用于教育领域提高学习效果,帮助学生更好地理解和掌握知识;可用于职业培训提高工作技能;也可用于娱乐领域让人们享受沉浸式的游戏体验。随着技术的不断发展和应用的扩大,unity虚拟仿真项目将会有更广阔的前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值