Unity中射线碰撞试验分享:

Physics.Raycast:光线投射

参数:

origin:射线起始点

direction:射线方向

distance:射线长度

layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略。

Returns

bool - True when the ray intersects any collider,otherwise false.

当光线投射与任何碰撞器交叉时为真,否则为假。

下面通过实现这个小例子来试验一下:点击哪里就向哪里移动

using UnityEngine;

using System.Collections;

public class capsule : MonoBehaviour {

public CharacterController cc;

public float speed;

public Camera camera;

public Vector3 targetPosition;

void Start () {

targetPosition=this.transform.position;//把初始的位置赋值给当前坐标

cc=this.gameObject.GetComponent<CharacterController>();

}

//定义射线方法:

void getHitPoint(){

Ray ray;//创建一个新的射线,

RaycastHit hit;//光线投射碰撞qi

if(Input.GetMouseButtonDown(0)){//如果我点击了屏幕之后才能触发射线

ray=camera.ScreenPointToRay(Input.mousePosition);//屏幕位置转射线

if(Physics.Raycast(ray,out hit,100)){//光线投射--当光线投射与任何碰撞器交叉时为真,100射线距离

//                Debug.Log (hit.point);

if(hit.collider.gameObject.name=="Terrain"){

targetPosition=hit.point;

//Debug.Log(targetPosition);

}

}

}

}

void walk(){

Vector3 v= Vector3.Normalize(targetPosition-this.transform.position);

cc.SimpleMove(v*speed*Time.deltaTime);//简单移动方法。

}

void Update () {

//        Vector3 v=new Vector3(0,0,10*speed*Time.deltaTime);

//        if(Input.GetKey(KeyCode.A)){

//            cc.SimpleMove(v);

//        }

walk();

getHitPoint();

}

}

时间: 2024-11-05 16:11:53

Unity中射线碰撞试验分享:的相关文章

unity中射线碰撞检测总结

这阵子通过看视频,看书对unity中射线碰撞检测,有了一些了解,这里我把它总结一下写下来,希望能帮助到你们,也希望通过各位大神来指正不足之处: 射线碰撞检测,就是由某一物体发射出一道射线,射线碰撞到物体之后,可以得到该物体的相关信息,然后就可以对该物体进行一些操作的过程了.PS:个人见解: 射线的发射分为可见和不可见,可见的情况就是在游戏当中你可以看到射线,而不可见就是游戏运行时,你只可以在Scene试图下观察到它,而这到射线又是存在的: 而其实两者区别不大,关键是看你怎么用它了: 下面先看看不

Unity屏幕射线碰撞

Layers层: 从Layers设置看来,最多支持32层.  图层的值开始依次 0^2,1^2, 2^2, 3^3 依次增加. 当摄像机Culling Mask属性 Nothing= –1 Evening = 全部图层之和, 项目开始默认设置了7个图层. 值就是0^2,1^2, 2^2, 3^3 .. 6^2  = 279 如果我们选择Defulat图层,所在第0位置值 0^2 = 1 如果我们选择Defualt,Transparent,图层位置0,1 = 0^2+1^2 = 3 组合: 假设在

unity触发器和碰撞器

Unity中检测碰撞的方法有两种,一种是触发器一种是碰撞器,现在我来解释一下两种的区别. 触发器:有三种方法,分别是OnTriggerEnter,OnTriggerStay,OnTriggerExit 触发器一般是触发某种事物时使用,例如计分,过关什么的,不带有碰撞的物理效果. 碰撞器:有三种方法,分别是OnCollisionEnter,OnCollisionStay,OnCollisionExit 碰撞器一般是碰撞某种事物时使用,例如撞车,击中目标,带有碰撞的物理效果. 代码: 触发器: 1

在Unity中使用事件/委托机制(event/delegate)进行GameObject之

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 一对多的观察者模式机制有什么缺点? 如果你对如何在Unity中使用事件/委托机制还不太了解,建议您查看我的前一篇文章:[Unity3D技巧]在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 在前一篇博客里面,我们写到

(翻译)Unity中,在Terrain上绘制网格

Draw grid on the terrain in Unity Jan 23, 2015 Drawing grid on the terrain is used in lot of game genres – RTS, Simulation, Tower defense, etc. It can be done very easily in Unity. Here is some very simple extensible solution with following features:

unity中计算ugui中Text控件的所需长度

背景是这样的,我在unity中需要在我按下某个按键的时候,然后显示出被射线碰撞到的物体的信息.物体的信息之前已经整理好成txt文本了.读取一下就可以了.那么这时候就有一个问题,因为每个物体的介绍信息不是一样的长度,那么如果当text控件里面文字的长度超过显示的长度时,超过部分就不再显示.那么这该怎么办. 我是通过去便利txt文本中的所有文字和符号,然后将所有换行符也就是/n的个数记录下来,然后计算一下对应字体大小一行有几个字,比如我的是18号字体,那么一行可以写30个字,然后计算一下txt文本中

Unity中LayerMask的学习手记

Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31).LayerMask实际上是用Int32的32个位来表示每个层级,当这个位为1时表示使用这个层,为0时表示不用这个层. 代码释义: LayerMask mask = 1 << 你需要开启的Layers层. LayerMask mask = 0 << 你需要关闭的Layers层.   等价于  LayerMask mask = ~( 1 << 你需要关闭的Layers层.) p

unity中使用FingerGestures插件3.0

FingerGestures是一个unity3D插件,用来处理用户动作,手势. 译自FingerGestures官方文档 目录 FingerGestures包结构 FingerGestures例子列表 设置场景 教程:识别一个轻敲手势 教程:手势识别器 教程:轻击手势识别器 教程:拖拽手势识别器 教程:滑动手势识别器 教程:长按手势识别器 教程:缩放手势识别器 教程:旋转手势识别器 教程:自定义手势识别器 教程:识别手势事件 建议:使用.net代理事件 fingerGestures包结构 路径,

菜鸟学习 - Unity中的热更新 - Lua和C#通信

孙广东 2015-4-6 热更新我是个菜鸟,感谢网上的各位的奉献,这次又当一回搬运工. 准备: 1.了解Lua的语法 推荐书籍<Lua程序设计 第二版> 2.使用ULua插件进行通信 尽量早上真机.因为Bug问题特别多. 大杂烩: 更新LUa其实也是更新资源. Lua被看作一个资源么.Lua代码都是运行时才编译的,不运行的时候就如同一张图片.一段音频一样,都是文件资源:所以更新逻辑只需要更新脚本,不需要再编译,因而Lua能轻松实现"热更新".运行效率由于使用反射,所以成为它