赞
踩
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;
}
在需要进行拖拽功能的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;
}
}
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;
}
}
1:将canvas的UIScaleMode设为ScaleWithScreenSize,并设定好分辨率。
2:UI设置好锚点后,然后将此面板的四个锚点分别设置在面板的四个顶点上,将面板包裹住,如下图所示:
1:如果一个父物体下有多个子物体,比如说背包系统按钮这种,那么可以通过给父物体添加GridLayoutGroup组件,然后设置其对应参数,实现排版自由:
重要参数
Padding:内边距(子物体与父物体的间隔距离)
CellSize:控制子物体的宽高尺寸
StartCornor:第一个元素的位置锚点
StartAxis:元素排列的一个轴向,水平排列还是竖直排列。
Spqcing:元素之间的间隔距离
ChildAlignment:对齐方式
Constraint:对行数和列数的要求
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。