Unity的学习笔记(摇杆制作)
最近看到了一个很新颖的摇杆,就是按下后,会出现在按下的位置,并且拖着走的时候,到一定距离整个摇杆也会跟着走,于是自己测试做了一下这种摇杆
首先,先说一下我的摇杆预设体结构
代码挂在哪里都无所谓,关键是需要知道我写的publice出去的GameObject对应的是哪些,用拖动或者代码查找都可以
到时候代码中会出现这些
public GameObject rockerOnOff;
public GameObject rockerStick;
public GameObject rockerFather;
public GameObject rockerControlGo;
RockerPosition其实是一张图片,这张图片透明度被我设置成了0,所以看不见,我为了将摇杆激活时候范围控制在这个图片里面
Rocker这个其实才是摇杆,通常状态下将它失活的,但是只要点击在RockerPosition图片范围内,就会被激活,所以rockerOnOff是场景中的Rocker
rockerStick是摇杆移动的那个杆,添加到 public 出来的rockerStick
rockerFather这个public出来的,添加的是场景中的RockerPosition,因为后面有个移动定位需要这个物体
好了,接下来就是代码
using UnityEngine;
using UnityEngine.EventSystems; public class BarGroundMove : MonoBehaviour,IPointerDownHandler, IPointerUpHandler,
IDragHandler
{ public GameObject rockerOnOff; //控制摇杆开关
public GameObject rockerStick; //摇杆的杆
public GameObject rockerFather; //摇杆父对象
public GameObject rockerControlGo; //摇杆需要控制的对象 float radius = ; //摇杆的杆,和摇杆底图的距离 Vector2 dirV2;
Vector3 dirV3; public void OnPointerDown(PointerEventData eventData) //点击事件的函数 IPointerDownHandler接口生成
{
rockerOnOff.SetActive(true); //点击时候,将摇杆激活
Vector2 localPos; //这个Api:public static bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);
//rockerFather.transform as RectTransform,rockerFather为父类的本地坐标
//eventData.position这个事件触发的坐标点
//eventData.pressEventCamera这个事件触发时候的相机
//out localPos 这个参数就是相对于 RectTransform rect的Vector2坐标 RectTransformUtility.ScreenPointToLocalPointInRectangle(
rockerFather.transform as RectTransform,
eventData.position,
eventData.pressEventCamera,
out localPos
); rockerOnOff.transform.localPosition = localPos; //激活摇杆的位置,就是相对rockerFather的位置
} public void OnDrag(PointerEventData eventData) //拖拽事件的函数 IDragHandler 接口生成
{
Vector2 localPos; //相对于摇杆的拖拽位置
RectTransformUtility.ScreenPointToLocalPointInRectangle(
rockerOnOff.transform as RectTransform,
eventData.position,
eventData.pressEventCamera,
out localPos
); Vector2 groundPos; //相对于摇杆父类的拖拽位置
RectTransformUtility.ScreenPointToLocalPointInRectangle(
rockerFather.transform as RectTransform,
eventData.position,
eventData.pressEventCamera,
out groundPos
); //得到杆相对摇杆的向量,写全的话是rockerOnOff.transform.localPositio - Vecter2.zero(对于杆,相当于父类摇杆本地坐标是(,))
Vector2 grV2 = rockerOnOff.transform.localPosition; dirV2 = localPos.normalized; //这里是记录拖动得到的单位向量,方便下面移动计算计算 if (localPos.magnitude > radius) //当长度大于半径的时候,则整个摇杆会跟着杆移动
{
rockerOnOff.transform.localPosition = (grV2 - groundPos).normalized * radius + groundPos;
rockerStick.transform.localPosition = localPos.normalized * radius;
}
else
{
rockerStick.transform.localPosition = localPos;
} } public void OnPointerUp(PointerEventData eventData) //松开事件的函数 IPointerUpHandler 接口生成
{
rockerStick.transform.localPosition = Vector3.zero;
dirV2 = Vector2.zero; //这里是抬起时候,将单位向量置0,这样才能使得下面物体也不会根据向量进行移动
rockerOnOff.SetActive(false);
}
void Start()
{ } void Update()
{
dirV3.x = dirV2.x;
dirV3.z = dirV2.y;
dirV3.y = ; rockerControlGo.transform.Translate(new Vector3(, , dirV3.magnitude*Time.deltaTime*.5f)); if (dirV3 != Vector3.zero)
{
rockerControlGo.transform.rotation = Quaternion.Lerp(rockerControlGo.transform.rotation, Quaternion.LookRotation(dirV3),.05f);
} } }
Unity的学习笔记(摇杆制作)的更多相关文章
- Unity Shader学习笔记-1
本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...
- NGUI 学习笔记实战——制作商城UI界面
http://www.cnblogs.com/chongxin/p/3876575.html Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我 ...
- AngularJs学习笔记(制作留言板)
原文地址:http://www.jmingzi.cn/?post=13 初学Anjularjs两天了,一边学一边写的留言板,只有一级回复嵌套.演示地址 这里总结一下学习的过程和笔记.另外,看看这篇文章 ...
- 从0开始学习Unity的学习笔记(I 界面学习和简单模型拼装)
先给一个大致今天学习的图,然后后面是细节 1.下载Unity :官网下载需要版本 2.Unity安装:一定不要有中文路径:一台电脑可以安装不同版本的Unity,但是要安装在不同的文件夹下: 3. 新建 ...
- 【Unity Shader学习笔记】Unity基础纹理-单张纹理
1 单张纹理 1.1 纹理 使用纹理映射(Texture Mapping)技术,我们把一张图片逐纹素(Texel)地控制模型的颜色. 美术人员建模时,会在建模软件中利用纹理展开技术把纹理映射坐标(Te ...
- Unity3D学习笔记-------小地图制作
制作小地图首先需要两个贴图:第一个贴图是小地图的背景贴图,它应当是从y轴向下俯视截取的贴图:第二个贴图是主角位置贴图,它应当是在背景贴图之上的小型矩形. 1 using UnityEngine; 2 ...
- Unity sqlite学习笔记一
1.SQLITE的常识 SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它. sqlite的主要优点:零配置(Zero Configur ...
- unity 3D 学习笔记
1.父对象的初始位置设,即刚开始的空对象的根节点位置应当设置成(0,0,0) 这样设置可以避免以后出现奇怪的坐标. GameObject实际上就是一些组件的容器. unity 使用公用变量原因是,在U ...
- Unity Shader学习笔记 - 用UV动画实现沙滩上的泡沫
这个泡沫效果来自远古时代的Unity官方海岛Demo, 原效果直接复制3个材质球在js脚本中做UV动画偏移,这里尝试在shader中做动画并且一个pass中完成: // Upgrade NOTE: r ...
随机推荐
- vue-cli使用笔记
安装nodejs 安装vue-clinpm install -g vue-cli 使用vue-cli初始化项目vue init webpack my-project 进到目录cd my-project ...
- 洛谷P1270 访问美术馆
题目 树形DP,首先考虑递归建图,类似于线段树的中序遍历.然后取状态dp[i][j]表示i点花费j时间所偷到的最多的画,有方程: \(dp[now][nwt] = max(dp[now][nwt], ...
- 原创:Spark中GraphX图运算pregel详解
由于本人文字表达能力不足,还是多多以代码形式表述,首先展示测试代码,然后解释: package com.txq.spark.test import org.apache.spark.graphx.ut ...
- 「ZJOI2019」开关
传送门 Description 有一些一开始全都是关的开关,每次随机选择一个(每个开关概率不同)开关并改变它的状态,问达到目标状态的期望步数 Solution \(P=\sum_{i=1}^{n}p ...
- Ajax:修改了项目的ajax相关代码,点击运行没有效果
在运行ajax代码的时候发现这个问题,无论是重启浏览器还是IDE依旧不能解决. 原因: 浏览器调试的缓存 措施: 浏览器启用开发者模式,以Chrome.IDEA为例 1.浏览器设置disable ca ...
- Scala函数柯里化(Currying or Curry)
柯里化(Currying) 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术. 简单的实现如下: scala> def ...
- [BUAA软工]团队任务拆解
团队任务分解 本次博客为项目alpha的任务拆解 WBS 任务估计 任务 时长(h) 语音模块:监听部分 5h 语音模块:消息处理:api 4h 语音模块:消息处理:内部数据结构 3h 语音模块:消息 ...
- mac上使用sips命令快速裁剪、旋转、翻转图片
mac上使用sips命令快速裁剪.旋转.翻转图片 日常开发工作中,经常碰到要对图片进行一些简单的处理,不需要动用PS,在mac上就有一个很好的命令行工具:sips 这里我们不具体展开讲,仅贴出几个常用 ...
- 在Nginx容器安装Keepalived后端项目双机热备
docker exec -it n1 bash apt-get update apt-get install keepalived apt-get install vim 再次之前要配置VIP虚拟IP ...
- 关于H5项目开发中TS(或JS)文件按照顺序编译成一个文件的记录
由于js的执行特性,多个js文件合成一个文件或者进行多个js文件加载时,时需要按照指定的顺序进行的,否则会出现报错的情况. 我们看一下目前几个主流H5引擎的做法. 白鹭的做法 当前版本的做法 在tsc ...