- 浏览: 24590 次
- 性别:
- 来自: 上海
文章分类
最新评论
原文 http://blog.csdn.net/qinyuanpei/article/details/23464439
[Unity3D]Unity3D游戏开发之史上最简单的鼠标点击控制人物走动实现
今天呢,我们来一起实现一个在RPG中游戏中十分常见的功能,通过鼠标点击屏幕来控制人物的走动。首先来说一下原理,当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位置发射 一条经过该点的射线,则这条射线与大地平面的交点,就是我们的目标位置。那么确定了这个位置以后,我们需要做的就是让角色从原来的位置移动到这个位置,并在其间添加角色动画即可。对于角色移动的问题,如果复杂点的画我们可能要计算移动的方向向量,并针对起点和终点进行插值计算来实现,这里我们选择一种相对简单的办法,在Unity3D中,有一个LookAt()方法,该方法可以使物体发生旋转,使其z轴始终指向目标物体。再完成了旋转后,我们需要让物体沿着Z轴方向(forward)移动。这样就实现了鼠标点击控制人物走动这一功能。好了,下面我们来一起看今天的内容吧!
首先创建一个场景,我们准备一个地形Terrain和平行光Direction Light,并拖入我们事先准备好的人物模型,如图:
接下来为模型添加动画组件,并将动画的类型设置为Legacy模式,如图所示:
我们设置默认的动画为idle,接下来,我们来编写脚本代码:
using UnityEngine;
using System.Collections;
public class PeopleControl : MonoBehaviour {
//目标点坐标
private Vector3 mTargetPos;
void Start ()
{
}
void Update ()
{
//按下鼠标右键时
if(Input.GetMouseButton(1))
{
//获取屏幕坐标
Vector3 mScreenPos=Input.mousePosition;
//定义射线
Ray mRay=Camera.main.ScreenPointToRay(mScreenPos);
RaycastHit mHit;
//判断射线是否击中地面
if(Physics.Raycast(mRay,out mHit))
{
if(mHit.collider.gameObject.tag=="Terrain")
{
//获取目标坐标
mTargetPos=mHit.point;
//让主角面朝目标坐标并向目标移动
transform.LookAt(mTargetPos);
//播放奔跑动画
transform.gameObject.GetComponent<Animation>().Play("run");
transform.Translate(Vector3.forward * 0.5F);
}
}
}
//松开鼠标右键时
if(Input.GetMouseButtonUp(1))
{
transform.gameObject.GetComponent<Animation>().Play("idle");
}
}
}
将脚本绑定到角色上以后,我们就能看到下面的效果啦,哈哈:)
这就是今天的内容啦,当然我们还需要解决的问题还有如何在控制人物走动的时候避免和其它物体发生碰撞,以及后续的优化问题,这些内容我们会在后面的文章中为大家解答,谢谢大家!喜欢我请记住我的名字:秦元培,我的博客地址是: blog.csdn.net/qinyuanpei !
[Unity3D]Unity3D游戏开发之史上最简单的鼠标点击控制人物走动实现
今天呢,我们来一起实现一个在RPG中游戏中十分常见的功能,通过鼠标点击屏幕来控制人物的走动。首先来说一下原理,当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位置发射 一条经过该点的射线,则这条射线与大地平面的交点,就是我们的目标位置。那么确定了这个位置以后,我们需要做的就是让角色从原来的位置移动到这个位置,并在其间添加角色动画即可。对于角色移动的问题,如果复杂点的画我们可能要计算移动的方向向量,并针对起点和终点进行插值计算来实现,这里我们选择一种相对简单的办法,在Unity3D中,有一个LookAt()方法,该方法可以使物体发生旋转,使其z轴始终指向目标物体。再完成了旋转后,我们需要让物体沿着Z轴方向(forward)移动。这样就实现了鼠标点击控制人物走动这一功能。好了,下面我们来一起看今天的内容吧!
首先创建一个场景,我们准备一个地形Terrain和平行光Direction Light,并拖入我们事先准备好的人物模型,如图:
接下来为模型添加动画组件,并将动画的类型设置为Legacy模式,如图所示:
我们设置默认的动画为idle,接下来,我们来编写脚本代码:
using UnityEngine;
using System.Collections;
public class PeopleControl : MonoBehaviour {
//目标点坐标
private Vector3 mTargetPos;
void Start ()
{
}
void Update ()
{
//按下鼠标右键时
if(Input.GetMouseButton(1))
{
//获取屏幕坐标
Vector3 mScreenPos=Input.mousePosition;
//定义射线
Ray mRay=Camera.main.ScreenPointToRay(mScreenPos);
RaycastHit mHit;
//判断射线是否击中地面
if(Physics.Raycast(mRay,out mHit))
{
if(mHit.collider.gameObject.tag=="Terrain")
{
//获取目标坐标
mTargetPos=mHit.point;
//让主角面朝目标坐标并向目标移动
transform.LookAt(mTargetPos);
//播放奔跑动画
transform.gameObject.GetComponent<Animation>().Play("run");
transform.Translate(Vector3.forward * 0.5F);
}
}
}
//松开鼠标右键时
if(Input.GetMouseButtonUp(1))
{
transform.gameObject.GetComponent<Animation>().Play("idle");
}
}
}
将脚本绑定到角色上以后,我们就能看到下面的效果啦,哈哈:)
这就是今天的内容啦,当然我们还需要解决的问题还有如何在控制人物走动的时候避免和其它物体发生碰撞,以及后续的优化问题,这些内容我们会在后面的文章中为大家解答,谢谢大家!喜欢我请记住我的名字:秦元培,我的博客地址是: blog.csdn.net/qinyuanpei !
发表评论
-
Unity 3D 学习笔记
2015-06-25 14:45 0http://blog.csdn.net/huang9012/ ... -
如何在Unity3d中实现和网页数据的交互
2015-06-25 13:22 0http://game.ceeger.com/Componen ... -
unity3D 如何提取游戏资源(反编译 )+代码反编译
2015-06-25 12:26 0http://bbs.9ria.com/thread-4011 ... -
糖果爱消除
2015-06-25 12:22 0 糖果爱消除 [脚本] Candy Crash重点代 ... -
unity项目简单实例代码
2015-06-25 11:51 0基础入门 1、基础入门 ... -
帧动画
2015-06-25 11:39 0private float fps = 1000.0f; p ... -
Unity3d中制作Loading场景进度条所遇到的问题
2015-06-25 11:27 745http://www.58player.com/blog-25 ... -
【Unity】技巧集合
2015-03-19 14:42 0【Unity】技巧集合 转发,请保持地址:http://bl ... -
[Unity3D]Unity3D游戏开发之使用UniSky呼风唤雨
2015-02-11 10:52 0[Unity3D]Unity3D游戏开发之使用UniSky呼风 ... -
重要的学习教程!!!!加油,一定要多看多练
2015-02-07 22:43 0http://www.unitymanual.com/topi ... -
[Unity3D]Unity3D 游戏开发之碰撞检测
2015-02-06 17:53 0大家好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列 ... -
[Unity3D]Unity3D游戏开发之鼠标滚轮实现放大缩小
2015-02-06 17:51 0大家好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列 ... -
[Unity3D]Unity3D游戏开发之怪物AI
2015-02-06 17:35 0好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章 ... -
Unity3D游戏开发之使用Unity3D开发2D游戏 (一)
2015-02-06 17:23 0http://blog.csdn.net/qinyuanpei ... -
发射小球
2015-02-06 17:05 0using UnityEngine; using System ... -
【Unity技巧】制作一个简单的NPC
2015-02-06 15:26 1075http://blog.csdn.net/candycat19 ... -
Unity3D游戏中检测摄像机与人之间有无带碰撞器的遮挡物
2015-02-05 17:37 1863Unity3D游戏中检测摄像机与人之间有无带碰撞器的遮挡物。在 ... -
unity中三种调用其他脚本函数的方法
2015-02-02 16:16 1125unity中三种调用其他脚本函数的方法 第一种,被调用脚本函 ... -
CS0119 报错
2015-02-02 10:03 1439问题 :Assets/cudeCM.cs(26,36): er ...
相关推荐
//当controller处在空中间,grounded为false,即跳动和行走都无效///鼠标控制视角///// if (Input.GetMouseButt
本资源中的程序实现的是2D游戏效果:地图滚动以及鼠标控制人物走动 工程由VS2010创建,请用VS2010或更高版本编译运行 本资源是零积分下载,由CSDN博客专家BlueCoder(黎小华)倾力提供,你可以结合我的配套博文来...
一个canvas制作的人物移动,鼠标控制移动实例
Unity3d手机游戏开发经常用到的插件,easy touch5插件是非常实用的,可以很容易实现手游的虚拟摇杆功能控制游戏人物的走动方向。但此插件在Asset Store中是收费的,大约20美元,在这里我为同学们奉献出来了,记得...
NULL 博文链接:https://linshiquan.iteye.com/blog/292045
这个程序的设计目标:用Silverlight实现一个浮动在页面右下角的鼠标手势控制块,让用户用鼠标手势控制页面滚动,提供更好的用户浏览体验。 设计计划: 1.制作一个浮动DIV,承载Silverlight。 2.实现鼠标移动方向与...
MFC背景位图,可以用键盘上的上下左右控制人物的走动,不出现闪烁效果
cocos creato中一些控制人物的移动方式总结,键盘控制,触屏控制,摇杆控制等,注释详细,直接用
手机游戏开发图片素材之人物行走图,全套任务图片
在VS2013平台上利用C语言实现了游戏中的人物自动行走与按键控制移动【带BGM】,其中利用了easyX插件的图形库,需安装easyX插件。
jquery动画菜单鼠标悬停菜单列表动画卡通小人物走动
应用DX编写的一个小3D游戏 基本实现了人物走动等功能 并且可以多人联机
人物走动的位图资源 (主要用于我的博文资源下载)
VC人物走动特效,是上篇文章基础上的补充
为了获取积分,我翻找以前做过的小程序,偶发现这个挺好的,故而共享给大家。按动方向键,人物会随之移动……
Unity3D FPS演示使用Unity 3D游戏引擎创建的第一人称射击游戏演示入门在此处下载并安装Unity3D游戏引擎: : 资产免费提供所有图形资产,并由其各自的创建者“按原样”提供。 大多数模型和地形由以下网站提供: : ...
js+css3实现扁平化时钟走动动画效果
简单的游戏人物移动 没有键盘监听事件,只是运行后直接走两步 无聊的时候可以自己改代码玩,算是一个放松的小游戏吧
C#初学者 你喜欢游戏吗 这个是对游戏人物简单走动的控制
html5+js可以做很多动画 特效 游戏 ;欢迎大家下载