Unity 人物跟谁手指的移动(第一种方式)
长夜漫漫无心睡眠,敲敲代码,越敲越来劲! 我发现好多小朋友都在玩熊出没之xxxx这个游戏,居然打了一下午都没玩通第2关,我把测试也叫来陪我一起玩!
结果他也打不通,我再去叫策划,他也没打过,我去叫主管,他还是没打过,我再回去叫测试使用游戏修改大师,修改宝石买完全部的装备!结果他还是没打过!
(这款游戏,让我人生都变得没有了意义!)
人物跟随手指的移动而移动:
第一种方式: 手指移动了多少,主角就移动多少!(我使用的这种方式,存在问题,手指过快滑动,主角会慢慢跟手指有了距离!)
第二种方式: 手指移动到哪里,主角就慢慢移动到手指所在的位置!(还没写代码,理论上不会出现第一种问题),建议采用这种方式实现
第一种方式的部分代码实现:
using UnityEngine;
using System.Collections; /// <summary>
/// 人物的移动
/// </summary>
public class PlayerMove : MonoBehaviour
{ private bool isMove;
private Vector3 recordMouseDownPosition; //记录鼠标单击的位子
public float speed = ;
public UISprite gameBackground;
public UI2DSprite player;
public UI2DSpriteAnimation playerAnimation;
public Sprite playerLeftState;
public Sprite playerRightState; private float areaWidth;
private float areaHeight; //角色移动的边界 void Awake()
{
//获取到背景Sprite的宽度和高度
areaWidth = gameBackground.drawingDimensions.z - player.drawingDimensions.z;
areaHeight = gameBackground.drawingDimensions.w - player.drawingDimensions.w;
} //开始移动
public void PlayerStartMove()
{
isMove = true;
recordMouseDownPosition = Input.mousePosition;
} //结束移动
public void PlayerEndMove()
{
isMove = false;
} void LateUpdate()
{
if (isMove)
{
//鼠标当前坐标-单击被记录的坐标
Vector3 dir = Input.mousePosition - recordMouseDownPosition; //切换左右人物图片状态
if (dir.x > )
{
Debug.Log("切换成左");
playerAnimation.enabled = false;
player.nextSprite = playerRightState;
}
else if (dir.x < )
{
Debug.Log("右转弯图片");
playerAnimation.enabled = false;
player.nextSprite = playerLeftState; }
else if (dir.x == )
{
playerAnimation.enabled = true;
} //让人物跟随手指的方向移动
this.transform.localPosition = new Vector3(
transform.localPosition.x + dir.x * 0.7f,
transform.localPosition.y + dir.y * 0.7f,
transform.localPosition.z); //防止跑出右边界
if (transform.localPosition.x > areaWidth && dir.x > )
{
this.transform.localPosition = new Vector3(
areaWidth,
transform.localPosition.y,
transform.localPosition.z);
} //防止跑出左边界
if (transform.localPosition.x < -areaWidth && dir.x < )
{
this.transform.localPosition = new Vector3(
-areaWidth,
transform.localPosition.y,
transform.localPosition.z);
} //防止跑出上边界
if (transform.localPosition.y > areaHeight && dir.y > )
{
this.transform.localPosition = new Vector3(
transform.localPosition.x,
areaHeight,
transform.localPosition.z);
} //防止跑出下边界
if (transform.localPosition.y < -areaHeight && dir.y < )
{
this.transform.localPosition = new Vector3(
transform.localPosition.x,
-areaHeight,
transform.localPosition.z);
} recordMouseDownPosition = Input.mousePosition;
}
}
}
Unity 人物跟谁手指的移动(第一种方式)的更多相关文章
- 【转】【Unity】实现全局管理类的几种方式
本文原作者未知,转载自:http://blog.csdn.net/ycl295644/article/details/42458477 如何在Unity中实现全局管理类?由于Unity脚本的运行机制和 ...
- Unity中实现全局管理类的几种方式
(搬运自我在SegmentFault的博客) 如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合 ...
- UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现
UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import ...
- 创建多线程的第一种方式——创建Thread子类和重写run方法
创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...
- Struts2框架的数据封装一之属性封装(属性封装的第一种方式:对参数进行封装)
request带着参数来,aciton对其进行处理.在学习action之前,使用的是servlet对request进行处理.request请求时会带有参数,所以我们要对这些参数进行封装. 1. 为什么 ...
- Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。
1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...
- 创建多线程程序的第一种方式_创建Thread类的子类
创建多线程程序的第一种方式:创建Thread类的子类java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类 实现步骤: 1.创建一个Thread类的子类 ...
- throws关键字_异常处理的第一种方式(交给别人处理)和try_catch_异常处理的第二种方式(自己处理)
throws关键字:异常处理的第一种方式,交给别人处理 作用: 当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象 可以使用throws关键字处理异常对象, 会把异常对象声明抛出给方法的调用 ...
- 主线程和创建多线程程序的第一种方式_创建Thread类的子类
/** * 主线程:执行主方法的线程(main) * 单线程程序:在java程序中只有一个线程 * 执行从main方法开始,从上倒下依次执行 */ public class Demo01MainThr ...
随机推荐
- Hive 11、Hive嵌入Python
Hive嵌入Python Python的输入输出都是\t为分隔符,否则会出错,python脚本输入print出规定格式的数据 用法为先add file,使用语法为TRANSFORM (name, it ...
- ListView之BaseAdapter
BaseAdapter可以实现自定义的丰富子项视图,本文实现如下所示结果: 实现代码: /* ListView :列表 BaseAdapter 通用的基础适配器 * * */ public class ...
- Chosen 基本使用
点击下载Chosen 引入文件 chosen.css jquery-1.7.1.min.js chosen.jquery.js 绑定数据: for (var i = 0; i < data.le ...
- Lua Interface基础使用
Lua是一种可爱的脚本语言,由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发. 其设计目的 ...
- UVA 536 (13.08.17)
Tree Recovery Little Valentine liked playing with binary trees very much. Her favoritegame was con ...
- Linux正則表達式-反复出现的字符
星号(*)元字符表示它前面的正則表達式能够出现零次或多次.也就是说,假设它改动了单个字符.那么该字符能够在那里也能够不在那里,而且假设它在那里,那可能会不止出现一个.能够使用星号元字符匹配出如今引號中 ...
- [Javascript] property function && Enumeration
var vehicle3 = { type: "Submarine", capacity: 8, storedAt: "Underwater Outpost", ...
- Objective-C(十八、谓语使用及实例说明)——iOS开发基础
结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,仅仅是作为參考,以苹果官方文档为准~ 十八.谓语的使用及 ...
- android——仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中
转载请注明出处: www.cnblogs.com/shoneworn 我这里只是简单的用了两个listview来实现的,先上效果图.比较粗糙.预留了自定义的空间. 思路: 从上图应该可以看的出来.就是 ...
- Android--Toast时间
/** * * 显示toast,自己定义显示长短. * param1:activity 传入context * param2:word 我们需要显示的toast的内容 * param3:time le ...