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 ...
随机推荐
- 查看线程的进程id
import os from threading import Thread def f1(n): print(n) print('%d号线程的id是%s'%(n,os.getpid())) if _ ...
- hadoop历史版本,包括大名鼎鼎的hadoop 0.20.2
http://archive.apache.org/dist/hadoop/core/ 大名鼎鼎的hadoop 0.20.2在此: http://archive.apache.org/dist/had ...
- 启用hive hwi方法
hive启动hwi: ./hive --service hwi ls: cannot access /opt/cdh-5.3.6/hive-0.13.1/lib/hive-hwi-*.war: No ...
- iOS调用第三方导航和线路规划
线路规划: https://blog.csdn.net/qq_19979539/article/details/51938995 百度地图:baidumap: 高德地图:iosamap: 腾讯地图:q ...
- Improved SEO with mod_rewrite
PHP Advanced and Object-Oriented Programming Third Edition <?php //D:\wamp64\www\0613pm\w_wwwroot ...
- Delphi IdHTTP 设置cookie 和访问后读取Cookie 值
procedure TForm1.btn1Click(Sender: TObject); var IdHTTP: TIdHTTP; mstrCookie: string; Cookies ...
- 树和二叉树->线索二叉树
文字描述 从二叉树的遍历可知,遍历二叉树的输出结果可看成一个线性队列,使得每个结点(除第一个和最后一个外)在这个线形队列中有且仅有一个前驱和一个后继.但是当采用二叉链表作为二叉树的存储结构时,只能得到 ...
- 《linux 计划任务》- cron
一:什么是计划任务 - 你给手机定了一个闹钟,每天的 7:00 会准时响铃叫你起床,这实际上就是一个计划任务 - 所谓定时任务,就是在已经定好的特定时间去执行的事情. - Cron是一个[守护程序]用 ...
- Appium入门(7)__Appium Desired Capabilities
Desired Capabilities 是由多个键值对组成,代表移动设备相关信息.由Appium Client向Appium Server发送. 但无论Appium Client使用何种语言,最终是 ...
- 【PyQt5-Qt Designer】QLineEdit 文本输入
QLineEdit 文本输入 一.QlineEdit 基本方法 setAlignment() 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右 ...