unity3d射线控制移动

看看效果图

代码:

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class T2 : MonoBehaviour
 5 {
 6
 7     // Use this for initialization
 8     void Start()
 9     {
10
11     }
12
13     //定义射线
14     Ray ray;
15     RaycastHit hit;
16     //是否移动
17     bool isMove;
18     //移动方向
19     Vector3 dir;
20     Vector3 pos;
21
22     // Update is called once per frame
23     void Update()
24     {
25         //float v = Input.GetAxis("Vertical");
26         //float h = Input.GetAxis("Horizontal");
27         //transform.Translate(transform.forward * v * Time.deltaTime);
28
29
30         //transform.Rotate(Vector3.up * h);
31
32
33         //鼠标左键按下的时候
34         if (Input.GetMouseButtonDown(0))
35         {
36             //从摄像机发一条射线
37             ray = Camera.main.ScreenPointToRay(Input.mousePosition); ;
38             //如果检测到物体(射线用来检测)
39             if (Physics.Raycast(ray, out hit))
40             {
41                 //将碰撞点的Y值变为transform的Y值
42                 pos = new Vector3(hit.point.x, transform.position.y, hit.point.z);
43
44
45                 //hit.point是物体的位置
46                 transform.LookAt(hit.point);
47                 //开始移动
48                 isMove = true;
49                 //求移动方向
50                 //dir = (hit.point - transform.position).normalized;
51
52                 dir = (pos - transform.position).normalized;
53
54             }
55         }
56         //如果开始移动
57         if (isMove)
58         {
59             //沿着世界坐标的某一个位置移动
60             transform.Translate(dir * Time.deltaTime * 3, Space.World);
61             //如果距离小于0.5m的时候,停止移动
62             if (Vector3.Distance(transform.position, hit.point) < 0.5f)
63             {
64                 isMove = false;
65             }
66         }
67
68
69
70     }
71 }
时间: 2024-10-14 13:22:31

unity3d射线控制移动的相关文章

unity3d 射线扫描 忽略图层

原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Vector2origin,Vector2direction,float distance = Mathf.Infinity,int layerMask = DefaultRaycastLayers,float minDepth = -Mathf.Infinity,float maxDepth = Ma

Unity3D鼠标控制角色移动

一直都有一颗文学逗比的心,很中二和玛丽苏的想写那种龙傲天的小说.所以这个寒假就非常想敲出个RPG游戏来抒发心中的这份狂热.一开始是想用Three.js来做,后来转用Unity3D来做了,毕竟相对简单一点.好多东西不用自己去写,也可以避免心中这份狂热不至于还没把基础框架搭建好就降为0度了. 角色移动的例子 控制角色移动,对于PC端而言就是键盘或者鼠标.其中键盘控制角色移动的是经典的fps游戏中wasd四个方向按键.而鼠标控制角色移动一般常见于MMORPG.我比较倾向于MMORPG风格控制角色移动,

【转】Unity3D 射线Ray实现点击拾取

游戏中经常会有鼠标移动到某个对象上来拾取它的功能,我们可以用Unity3D中的射线Ray实现这一效果.原理是在我们鼠标的位置,从屏幕射出一条射向世界空间的射线,当这条射线碰撞到我们需要拾取的对象时,我们就销毁对象,把它添加到我们的背包中. 我们来做一个简单的Demo,我们在场景中添加一个方块Cube,一个小球Sphere,当我们鼠标放在方块上时没有任何反应,而当我们把鼠标放在小球上时,小球会消失. 新建一个项目,我们命名为"RayTest",然后在场景中新建一个小球,方块,和添加灯光,

Unity3D Kinect 控制人物模型

两个参考地址: 结合Kinect游戏开发 yuyuyouer工作室 我使用的是unity3D 4.X,kinect SDK为1.7,Kinect1.7UnityPackage.unitypackage(插件包) KinectModelControllerV2 - 你需要将这个脚本拖放到你想要应用kinect控制的模型上.为了让模型能够跟上人的节奏,你需要将模型上控制模型动作的关键骨骼拖放到这个脚本暴漏的合 适的变量中 ,也就是将模型中的骨骼与kincet识别到的人的骨骼绑定起来.另外这个脚本暴漏

Unity3D Animator控制参数和添加事件

Animator控制参数和添加事件 using UnityEngine; using System.Collections; public class AniControl : MonoBehaviour { public bool IsRolling = false; public bool IsDead = false; public bool IsJump = false; public float Direction = 0.5f; public Animator Anitor; pub

unity3d实现控制摄像机放大缩小视野加左右可旋转视角角度

using UnityEngine;using System.Collections; //摄像机跟随public class FollowPlayer : MonoBehaviour { private Transform player;//角色    private  Vector3 offsetPosition;//位置便宜    private bool isRotating=false;//是否有在滑动 public float distance;//向量长度    public fl

Unity3d Animator控制动画按帧运行

昨天同事想控制一个角色射箭动画,在拉弓的时候想用代码控制人物拉弓的整个过程,查了一下API,方法很简单Animator.StartPlay()(http://wiki.ceeger.com/script:unityengine:classes:animator:animator.startplayback),使用Animator.StopPlayback()停止动画器播放模式.当播放停止时,Avatar恢复从游戏逻辑获得控制权 Example: 1 using UnityEngine; 2 us

【unity实用技能】unity3d 陀螺仪控制camera移动旋转

https://docs.unity3d.com/ScriptReference/Gyroscope.html unity 官方文档就很清楚,只有一点要注意: 所有教程都教你怎么用 input.gyro.attitude 但是这个表示的是空间中的位置,首先你是想做像王者荣耀开头晃动摄像机的效果,需要把上个位置记录下来,每次相减获得偏移值. 而更大的问题是,这个空间值可能会有突然转成负数的情况 所以其实一点都不好用. 建议用 m_gyro.rotationRateUnbiased 这个直接给你偏移

Unity3D射线检测。

int groundLayerIndex = LayerMask.GetMask (Tags.Ground); Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hitInfo; if(Physics.Raycast (ray, out hitInfo, 200, groundLayerIndex)) { Vector3 target = hitInfo.point; target.y = trans