Unity3d基础学习第13天

本文介绍Unity中使用Gizmos进行图形绘制的方法及射线检测的应用,包括不同图形的绘制代码示例和屏幕射线实现方式。通过具体实例展示了如何在场景中绘制辅助图形并进行射线碰撞检测。

绘图工具

    private Color beginColor; //系统初始颜色,方便用完返回

实例1

    void OnDrawGizmos()//绘图工具,挂在即可执行,不写逻辑代码,只写图案绘制
	{
		beginColor = Gizmos.color; //保存初始颜色
		//在原点,长度为1的蓝色的立方体
		Gizmos.color = Color.blue;
		Gizmos.DrawCube (Vector3.zero,Vector3.one);

		Gizmos.color = Color.red;
		Gizmos.DrawWireCube(Vector3.forward,Vector3.one);

		Gizmos.color = Color.green;
		Gizmos.DrawSphere (Vector3.back, 0.5f);

		Gizmos.color = Color.black;
		Gizmos.DrawWireSphere(Vector3.left, 0.5f);

		Gizmos.color = Color.white;
		Gizmos.DrawLine(new Vector3(1,1,1),new Vector3(1,1,2));
	
	}

实例2

   void OnDrawGizmosSelected()//只有选中挂在有脚本的游戏对象才会被执行
	{
		Debug.Log ("selected");
	}


注:
vector3.forward 自身坐标的前方
transform.forward 世界坐标系下的前方

实例3 射线

    ray = new Ray (transform.position, transform.forward);// 发射一条射线,起点和终点
	if (Physics.Raycast(ray,out hit ,10))
	{
			Debug.Log (hit.transform.name);
	}

屏幕射线

   if (Input.GetMouseButtonDown(0)) 
   {
			ray = Camera.main.ScreenPointToRay (Input.mousePosition); //画出射线,从摄像机发出,进过屏幕上鼠标点击的点
			if (Physics.Raycast(ray,out hit )) 
			{
				//if (hit.transform.name = "terrion") 
				//{
				//调用角色移动脚本
				//}
				Debug.Log (hit.transform.name);

			}
	}
    //予以辅助,看到射线
    void OnDrawGizmos()
	{
		Gizmos.color = Color.blue;
		Gizmos.DrawRay (ray.origin,ray.direction *1000);
	}

实例1

    public class SectorGizmos : MonoBehaviour
    {

	private Vector3  v1= new Vector3 (1,0,0);
	private Vector3  v2 = new Vector3 (2,2,2);

	private Color begincolor;
	[Range(0,360)]
	public int angle;
	private int radius = 10;
	private Vector3 v = Vector3.zero; //起始边

    //void Start () 
    //	{
    //		Vector3 v3 = v1 + v2;  //三维向量 +  三维向量 = 三维向量
    //		Debug.Log (v3);
    //Vector3 v4 = Quaternion.Euler (new Vector3(0,90,0)) * v1; //四元数 * 三维向量 = 三维向量
    //将三维向量进行旋转操作,四元素那一个轴有值,就在这个方向上旋转多少度
    //}
	void OnDrawGizmos()
	{
		begincolor = Handles.color;
		Handles.color = Color.red;
		int beginangle = angle / 2;
		v = Quaternion.Euler (new Vector3 (0, -beginangle, 0)) * transform.forward; //起始边

		Handles.DrawSolidArc (transform.position,Vector3.up,v,angle,radius);

	}
   }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

井队Tell

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值