unity3d射线控制移动
看看效果图

代码:
using UnityEngine;
using System.Collections; public class T2 : MonoBehaviour
{ // Use this for initialization
void Start()
{ } //定义射线
Ray ray;
RaycastHit hit;
//是否移动
bool isMove;
//移动方向
Vector3 dir;
Vector3 pos; // Update is called once per frame
void Update()
{
//float v = Input.GetAxis("Vertical");
//float h = Input.GetAxis("Horizontal");
//transform.Translate(transform.forward * v * Time.deltaTime); //transform.Rotate(Vector3.up * h); //鼠标左键按下的时候
if (Input.GetMouseButtonDown())
{
//从摄像机发一条射线
ray = Camera.main.ScreenPointToRay(Input.mousePosition); ;
//如果检测到物体(射线用来检测)
if (Physics.Raycast(ray, out hit))
{
//将碰撞点的Y值变为transform的Y值
pos = new Vector3(hit.point.x, transform.position.y, hit.point.z); //hit.point是物体的位置
transform.LookAt(hit.point);
//开始移动
isMove = true;
//求移动方向
//dir = (hit.point - transform.position).normalized; dir = (pos - transform.position).normalized; }
}
//如果开始移动
if (isMove)
{
//沿着世界坐标的某一个位置移动
transform.Translate(dir * Time.deltaTime * , Space.World);
//如果距离小于0.5m的时候,停止移动
if (Vector3.Distance(transform.position, hit.point) < 0.5f)
{
isMove = false;
}
} }
}
当然。出来用LookAt还可以用LookRotation
using UnityEngine;
using System.Collections; //加刚体
public class movee : MonoBehaviour
{ // Use this for initialization
void Start()
{ } bool isMove;
Vector3 dir; RaycastHit hit; Vector3 hitPoint; Quaternion rotation; Quaternion originRatation;
float timer; // Update is called once per frame
void FixedUpdate()
{
if (Input.GetMouseButtonDown())
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit))
{ hitPoint = new Vector3(hit.point.x, transform.position.y, hit.point.z); //transform.LookAt(hit.point); //dir = (hit.point - transform.position).normalized; dir = hitPoint - transform.position; rotation = Quaternion.LookRotation(dir); originRatation = transform.rotation; isMove = true; timer = ; }
}
if (isMove)
{
//transform.Translate(dir * Time.deltaTime * 5, Space.World); timer += Time.fixedDeltaTime; //if (Vector3.Distance(transform.position, hit.point) < 0.5) isMove = false; //慢慢旋转过去,这不是匀速的。
//transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.fixedDeltaTime*5); //既然想匀速的话,那么起点和终点不变。时间变化
transform.rotation = Quaternion.Lerp(originRatation, rotation, timer); //transform.rotation = rotation; //角度直接等于这个 if (Quaternion.Angle(transform.rotation, rotation) < )
{
transform.rotation = rotation;
isMove = false;
} }
} public void Update()
{ }
}
unity3d射线控制移动的更多相关文章
- 【转】Unity3D 射线Ray实现点击拾取
游戏中经常会有鼠标移动到某个对象上来拾取它的功能,我们可以用Unity3D中的射线Ray实现这一效果.原理是在我们鼠标的位置,从屏幕射出一条射向世界空间的射线,当这条射线碰撞到我们需要拾取的对象时,我 ...
- (转)在Unity3D中控制动画播放
用Unity3D也算是好久了,但是每次做项目总还是能学到新的东西.这次做一个TPS的项目就遇到了这样一个问题,如何同时在上下半身播放不同的动画?解决方法其实是很简单,但由于对于动画资源的了解不足导致问 ...
- Unity3D 射线指定层获取GameObject 注意 LayerMask
这一篇是纯技术讨论,看过我前面文章的童鞋应该清楚,我的奔跑是靠鼠标响应的,鼠标点到哪就跑到哪,后来又有了界面,麻烦就来了,我的界面居然能点 穿.我不希望点界面的时候还能点到界面后面的地面上,角色傻不拉 ...
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...
- unity3d 射线扫描 忽略图层
原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Ve ...
- unity3D射线检测敌人是否在前方
//发射一条射线,去检测玩家是否在自己面前,用来随后的发射炮弹 bool isForward = false; var TranformShootPoint = ai.WorkingMemory.Ge ...
- unity3d 射线的原理,基础用法
射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 . Ray射线类和RaycastHit射线投射信息类是射线中常用的两个工具类. 用途:射线多 ...
- Unity3D Animator控制参数和添加事件
Animator控制参数和添加事件 using UnityEngine; using System.Collections; public class AniControl : MonoBehavio ...
- unity3d之控制人物转向移动并播放动画
tip:transition 勾选Has Exit Time B动画播放完毕后就可以自己返回A不用代码控制.因为想做一个小人静止时 隔两秒会摆动小手的特效. 附上代码参考: using UnityEn ...
随机推荐
- ubuntu为文件添加可执行权限
为一个文件添加可执行权限 chmod +x filename 为一个文件夹下的所有文件添加可执行权限 chmod +x *
- ubuntu16.04 ROS环境下配置和运行SVO
ubuntu16.04 ROS环境下配置和运行SVO https://blog.csdn.net/nnUyi/article/details/78005552
- Prometheus的架构及持久化
原文: https://my.oschina.net/go4it/blog/855598 Prometheus是什么 Prometheus是一个开源的系统监控和报警工具,特点是 多维数据模型(时序列数 ...
- Codeforces 777C - Alyona and Spreadsheet - [DP]
题目链接:http://codeforces.com/problemset/problem/777/C 题意: 给定 $n \times m$ 的一个数字表格,给定 $k$ 次查询,要你回答是否存在某 ...
- pytorch的torch.utils.data.DataLoader认识
PyTorch中数据读取的一个重要接口是torch.utils.data.DataLoader,该接口定义在dataloader.py脚本中,只要是用PyTorch来训练模型基本都会用到该接口, 该接 ...
- NLP去特殊字符
在自然语言处理中,我们有时对文本进行处理,需要去除一些特殊符号,保留中文,这是在预处理过程中常用到的.分享给你,希望对你有帮助! import re def delete_sysbol(line): ...
- Django:模型model和数据库mysql(二)
上一篇把简单的模型与数据库的搭建写了一遍,但模型中有很多深入好用的写法补充一下. 同样的栗子,建立新的模型与数据库来写一写 1.依然是搭建环境 >>>django-admin sta ...
- 解决vshost32.exe已停止工作
VS2015,搞二次开发遇到这个问题,这个真的很坑,都没法找到问题.然后百度到答案,将调试中的"启用Visual Studio 承载进程"的√去掉: 一开始感觉是内存的问题,后来又 ...
- 关于linux特殊含义的转义符\033
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \033 ...
- linux内存不足,swap交换分区创建
为什么需要swap 根 据Redhat公司的建议,Linux系统swap分区最适合的大小是物理内存的1-2倍.不过Linux上有些软件对swap分区得需求较大,例如要顺 利执行Oracle数据库软件, ...