项目场景:
提示:这里简述项目相关背景:
本文介绍将一个物体模型放置到另一个物体表面的方法。实现效果是使用鼠标指定物体表面的某一个点,目标物体就会放置到所指定位置上。
问题描述
实现思路:通过鼠标发射射线,与一个物体碰撞,检测碰撞点的法线,确定目标物体的放置方向。
using UnityEngine;
using System.Collections;
public class SetModel : MonoBehaviour
{
public GameObject target;
void Update()
{
if (Input.GetMouseButtonDown(1))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
{
if (hit.transform.tag == "cube")
{
Debug.DrawLine(ray.origin, hit.point);
Debug.Log("碰撞位置:" + hit.normal);
target.transform.position = hit.point;
target.transform.up = hit.normal;
target.transform.Translate(Vector3.up * 0.5f * target.transform.localScale.y, Space.Self);
}
}
}
}
}
原因分析:
提示:这里填写问题的分析:
例如:Handler
发送消息有两种方式,分别是 Handler.obtainMessage()
和 Handler.sendMessage()
,其中 obtainMessage
方式当数据量过大时,由于 MessageQuene
大小也有限,所以当 message
处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
解决方案:
提示:这里填写该问题的具体解决方案:
例如:新建一个 Message
对象,并将读取到的数据存入 Message
,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
换成 mHandler.sendMessage()
。