热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

射线,克隆,画线

1,射线(1)Ray射线Arayisaninfinitelinestartingatoriginandgoinginsomedirection.Ray是具有开始点和方向的无穷

1,射线

(1)Ray射线

A ray is an infinite line starting at origin and going in some direction.

Ray是具有开始点和方向的无穷线。

构造:

Ray ray = new Ray(transform.position, transform.forward);
transform.position为起点, transform.forward为方向。
(2)Raycast射线投射
C# => public static bool Raycast(Vector3 sourcePosition, Vector3 targetPosition, out NavMeshHit hit, int areaMask); 
sourcePosition:射线起点
targetPosition:射线终点
hit:保存射线投射位置的属性
areaMask:绘制路径时,位掩码指定NavMesh区域中可以被通过的地方。
(3)RaycastHit射线投射碰撞信息

 

barycentricCoordinate The barycentric coordinate of the triangle we hit.
碰到的三角形的重心坐标。
collider The Collider that was hit.
碰到的碰撞器。
distance The distance from the ray's origin to the impact point.
从射线的原点到触碰点的距离。
lightmapCoord The uv lightmap coordinate at the impact point.
在触碰点的UV光照贴图的坐标。
normal The normal of the surface the ray hit.
射线触碰表面的法线。
point The impact point in world space where the ray hit the collider.
在世界坐标空间,射线碰到碰撞器的接触点。
rigidbody The Rigidbody of the collider that was hit. If the collider is not attached to a rigidbody then it is null.
碰到的该碰撞器上的刚体。如果碰撞器上没有附加刚体,那么返回null。
textureCoord The uv texture coordinate at the impact point.
在触碰点的UV纹理坐标。
textureCoord2 The secondary uv texture coordinate at the impact point.
在接触点处的第二套UV纹理坐标。
transform The Transform of the rigidbody or collider that was hit.
碰到的该刚体或碰撞器的变换。
triangleIndex The index of the triangle that was hit.
碰到的三角形的索引。 
2,克隆

C# => static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
C# => static Object Instantiate(Object original);


Parameters

original An existing object that you want to make a copy of. 你想要拷贝的已有对象
position Position for the new object. 新对象的位置
rotation Orientation of the new object. 新对象的方向
 

Clones the object original and returns the clone. cl


克隆原始物体并返回克隆物体。


 以上引自Unity圣典。
 3,画线
 
using UnityEngine;
using System.Collections;

public class Drawwarnline : MonoBehaviour {

// Use this for initialization
private Vector3 pos1;//第一个点的位置
private Vector3 pos2;//第二个点的位置
private RaycastHit hit;
private Ray ray;
private int num = 0;

public bool ischoose;//是否开始画线
public GameObject warnline;//线模型
void Update()
{

if (Input.GetMouseButtonDown(0))//按下鼠标左键
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从主相机投射一条射线到鼠标位置
if (Physics.Raycast(ray,out hit))//在场景中投下可与所有碰撞器碰撞的一条光线。
{
if (hit.collider != null)//碰撞到碰撞器
{
if (!ischoose)
{
pos1 = new Vector3(hit.point.x, hit.point.y, hit.point.z);//记录第一个点坐标
//Debug.Log(pos1);
ischoose = true;
}
else
{
num++;
pos2 = new Vector3(hit.point.x, hit.point.y, hit.point.z);//第二个点坐标
//Debug.Log(pos2);
var distance = Vector3.Distance(pos2, pos1);//两点之间距离,这里var为float类型,使用var,var会自动检测类型
Vector3 direction = (pos2 - pos1).normalized;//要花的线的方向单位向量
GameObject warnobj = GameObject.Instantiate(warnline, (pos2 - pos1) / 2, Quaternion.identity) as GameObject;//克隆警戒线
warnobj.name = "warnline" + num;

warnobj.transform.localScale = new Vector3(100f, 10f, distance * 70);//根据父对象调整大小
warnobj.transform.position = warnobj.transform.position + pos1;//位置
warnobj.transform.forward = direction;
warnobj.transform.parent = GameObject.Find("pwarnline").transform;
//Debug.Log(direction);
ischoose = false;
}
}
}

}

}
}

  

 

推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
author-avatar
励志要成为明星的张佳楠
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有