unity实现车方向盘转动效果

本文实例为大家分享了unity实现车方向盘转动效果的具体代码,供大家参考,具体内容如下

效果:

C#脚本如下:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class NewBehaviourScript : MonoBehaviour, IDragHandler,IBeginDragHandler,IEndDragHandler
{
  /// <summary>
  /// 需要旋转的模型
  /// </summary>
  public Transform model;
  /// <summary>
  /// 父物体的recttransform
  /// </summary>
  public RectTransform parentRect;
  /// <summary>
  /// 旋转的UI
  /// </summary>
  public RectTransform img;
  /// <summary>
  /// 摄像机
  /// </summary>
  public Camera cam;
  /// <summary>
  /// 是否在拖拽
  /// </summary>
  private bool drag = false;
  /// <summary>
  /// 初始角度
  /// </summary>
  private float originAngle = 0;
  /// <summary>
  /// 自身角度
  /// </summary>
  private float selfAngle1 = 0;
  /// <summary>
  /// 上一次和当前的角度
  /// </summary>
  private float lastAngle = 0f;
  private float currentAngle = 0f;
  /// <summary>
  /// 上一次和当前的位置
  /// </summary>
  private Vector2 currentPos;
  private Vector2 lastPos;

  public void OnBeginDrag(PointerEventData eventData)
  {
    drag = true;

    originAngle = GetAngle(eventData.position);

    selfAngle1 = (img.transform as RectTransform).eulerAngles.z;
  }

  public void OnDrag(PointerEventData eventData)
  {
    if (drag)
    {
      lastAngle = currentAngle;
      currentAngle = GetAngle(eventData.position);

      float val = TouchJudge(currentPos, ref lastPos, Vector2.zero);
      if (val > 0f && val <180f)
      {
        img.eulerAngles = new Vector3(0f,0f, -currentAngle + originAngle + selfAngle1);
        model.eulerAngles = new Vector3(0f, 0f, -currentAngle + originAngle + selfAngle1);
      }
    }
  }

  public void OnEndDrag(PointerEventData eventData)
  {
    drag = false;
  }
  /// <summary>
  /// 将屏幕坐标转成UI坐标
  /// </summary>
  /// <param name="pos1"></param>
  /// <returns></returns>
  float GetAngle(Vector2 pos1) {
    Vector2 pos;
    RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRect, pos1, cam, out pos);
    currentPos = pos;
    return Mathf.Atan2(pos.x, pos.y) * Mathf.Rad2Deg;
  }
  /// <summary>
  /// 判断顺时针还是逆时针旋转
  /// </summary>
  /// <param name="current"></param>
  /// <param name="last"></param>
  /// <param name="anchor"></param>
  /// <returns></returns>
  private float TouchJudge(Vector2 current, ref Vector2 last, Vector2 anchor)
  {
    Vector2 lastDir = (last - anchor).normalized;
    Vector2 currentDir = (current - anchor).normalized;

    float lastDot = Vector2.Dot(Vector2.right, lastDir);
    float currentDot = Vector2.Dot(Vector2.right, currentDir);

    float lastAngle = last.y < anchor.y
       ? Mathf.Acos(lastDot) * Mathf.Rad2Deg
       : -Mathf.Acos(lastDot) * Mathf.Rad2Deg;

    float currentAngle = current.y < anchor.y
      ? Mathf.Acos(currentDot) * Mathf.Rad2Deg
      : -Mathf.Acos(currentDot) * Mathf.Rad2Deg;

    last = current;
    return currentAngle - lastAngle;
  }
}

canvas设置如下:

脚本赋值如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • unity实现车方向盘转动效果

    本文实例为大家分享了unity实现车方向盘转动效果的具体代码,供大家参考,具体内容如下 效果: C#脚本如下: using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class NewBehaviourScript : MonoBehaviour, IDragHandler,IBeginD

  • unity实现方向盘转动效果

    本文实例为大家分享了unity实现方向盘转动效果的具体代码,供大家参考,具体内容如下 效果 手指或鼠标拖动方向盘旋转,有角度限制,松手后自动回转. 代码 将代码添加到方向盘Image上. 注意需要赋值Canvas. using UnityEngine; using UnityEngine.EventSystems; public class SteeringWheel : MonoBehaviour,IDragHandler,IEndDragHandler { public Canvas Can

  • unity实现屏幕上写字效果

    本文实例为大家分享了unity实现屏幕上写字效果的具体代码,供大家参考,具体内容如下 先建立一个RawImage,然后再在这个图片上加个LineRenderer组件,再建个材质球,把材质球的Shader改成Particles/Additive,把材质球拖给LineRenderer组件的Materials/Element 0(不拖也可以),最后再把代码拖给空物体即可,代码的Target是RawImage,下面的代码 using System.Collections; using System.Co

  • Unity实现物体左右移动效果

    本文实例为大家分享了Unity实现物体左右移动效果的具体代码,供大家参考,具体内容如下 效果如下 代码: using UnityEngine; using System.Collections; //Add this script to the platform you want to move. //左右移动的平台 public class MovingPlatform : MonoBehaviour { //Platform movement speed.平台移动速度 public floa

  • Unity实现3D循环滚动效果

    本文实例为大家分享了Unity实现3D循环滚动效果展示的具体代码,供大家参考,具体内容如下 然后通过SetDepthAndPosition这个方法,实现图片的空间空间展开 Z轴和Y轴,系数是一样的 经过上面设置,空间就摆开了 using UnityEngine; using System.Collections; using System.Collections.Generic; public class SelectRole : MonoBehaviour { public GameObjec

  • Unity实现卡牌翻动效果

    本文实例为大家分享了Unity实现卡牌翻动效果展示的具体代码,供大家参考,具体内容如下 事实上这是项目需要,我改的一个代码,实际上就是利用unity的一些基础属性实现其效果.啥也不多说了,先上原代码: /// Credit Mrs. YakaYocha /// Sourced from - https://www.youtube.com/channel/UCHp8LZ_0-iCvl-5pjHATsgw /// Please donate: https://www.paypal.com/cgi-b

  • Unity使用摄像机实现望远镜效果

    本文实例为大家分享了Unity使用摄像机实现望远镜效果的具体代码,供大家参考,具体内容如下 听起来挺酷炫,其实超简单,就是控制摄像机的fieldOfView: using UnityEngine; using System.Collections; public class TelesopicView : MonoBehaviour { public float zoomLevel = 2.0f; public float zoomInSpeed = 100.0f; public float z

  • Unity Shader实现描边OutLine效果

    本文实例为大家分享了Unity Shader实现描边OutLine效果的具体代码,供大家参考,具体内容如下 Shader实现描边流程大致为:对模型进行2遍(2个pass)绘制,第一遍(描边pass)在vertex shader中对模型沿顶点法线方向放大,fragment shader设置输出颜色为描边颜色:第二遍正常绘制模型,除被放大的部分外,其余被覆盖,这样就有了描边的效果. 实现代码如下: Shader "Custom/OutlineShader" { Properties { _

  • Unity实现老虎机滚动抽奖效果的示例代码

    直接看下效果图吧: 制作思路: 设计四张图片,五个点,每个图片同时向下一个点移动,到最后一个就回到0号点,以此循环. 场景搭建: 创建Image命名为Bg作为电视框背景: 创建Image命名Mask并添加Mask组件作为电视框内容显示遮罩框: 创建四个Image作为滚动图片: 创建开始抽奖按钮: PS:实际项目中可以根据需求来动态修改图片显示,以达到的控制每次抽奖奖品内容. 源码分享: using System.Collections; using UnityEngine; using Unit

  • Unity使用DoTween实现抛物线效果

    Unity使用DoTween实现抛物线效果,供大家参考,具体内容如下 概要 public partial class EMath { public static Vector3 Parabola(Vector3 start, Vector3 end, float height, float t) { float Func(float x) => 4 * (-height * x * x + height * x); var mid = Vector3.Lerp(start, end, t); r

随机推荐