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; } } } } } }

  

 
posted on 2017-03-22 11:25  懒人起烂名  阅读(817)  评论(0编辑  收藏  举报