服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity实现弧形移动效果

Unity实现弧形移动效果

2022-09-16 13:31LLLLL__ C#

这篇文章主要为大家详细介绍了Unity实现弧形移动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Unity实现弧形移动效果的具体代码,供大家参考,具体内容如下

一、实现效果

Unity实现弧形移动效果

二、第一种实现方法——弧形插值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using UnityEngine;
 
public class ArcMove : MonoBehaviour
{
  public GameObject curGo;//当前物体
  public GameObject targetGo;//目标物体
 
  public float value;
 
  private void Update()
  {
    //计算中心点
    Vector3 center = (curGo.transform.position + targetGo.transform.position) / 2;
 
    center -= new Vector3(0, value, 0);
 
    Vector3 start = curGo.transform.position - center;
    Vector3 end = targetGo.transform.position - center;
 
    //弧形插值
    curGo.transform.position = Vector3.Slerp(start, end, Time.time / 200);
    curGo.transform.position += center;
 
    //判定是否到达目标点
    float dis = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
    if (dis <= 1)
    {
      Debug.Log("到达目标点");
    }
  }
}

三、第二种实现方法——计算弧线中的夹角

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using UnityEngine;
using System.Collections;
 
public class ArcMove : MonoBehaviour
{
  public GameObject curGo;//当前物体
  public GameObject targetGo;//目标物体
 
  public float speed = 2;//速度
  public int rotationAngle = 60;//旋转的角度
 
  private float distanceToTarget;//两者之间的距离
  private bool move = true;//是否移动
 
  void Start()
  {
    //计算两者之间的距离
    distanceToTarget = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
 
    StartCoroutine(Move());
  }
 
  /// <summary>
  /// 移动
  /// </summary>
  private IEnumerator Move()
  {
    //移动到目标点停止移动
    while (move)
    {
      Vector3 targetPos = targetGo.transform.position;
      targetPos.z = 0;
 
      //让它始终朝着目标
      curGo.transform.LookAt(targetPos);
 
      //计算弧线中的夹角
      float angle = Mathf.Min(1, Vector3.Distance(curGo.transform.position, targetPos) / distanceToTarget) * rotationAngle;
      curGo.transform.rotation = curGo.transform.rotation * Quaternion.Euler(Mathf.Clamp(-angle, -42, 42), 0, 0);
      float currentDist = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
      if (currentDist < 0.5f)
      {
        move = false;
        Debug.Log("到达目标点");
      }
      curGo.transform.Translate(Vector3.forward * Mathf.Min(speed * Time.deltaTime, currentDist));
      yield return null;
    }
  }
}

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

原文链接:https://blog.csdn.net/LLLLL__/article/details/106255689

延伸 · 阅读

精彩推荐
  • C#C#面向对象编程基础概念汇总

    C#面向对象编程基础概念汇总

    今天小编就为大家分享一篇关于C#面向对象编程基础概念汇总的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟...

    Czhenya4382022-03-03
  • C#WCF实现的计算器功能实例

    WCF实现的计算器功能实例

    这篇文章主要介绍了WCF实现的计算器功能,结合具体实例形式较为详细的分析了WCF实现计算器功能的具体步骤与相关操作技巧,需要的朋友可以参考下...

    傻丫头与科技10582022-01-10
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘7662021-12-28
  • C#C#实现FTP客户端的案例

    C#实现FTP客户端的案例

    这篇文章主要为大家详细介绍了C#实现FTP客户端的小案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    飞翔的月亮3992022-01-17
  • C#利用C#编写扫雷游戏(附源码)

    利用C#编写扫雷游戏(附源码)

    扫雷游戏相信不用给大家过多介绍,大家基本都玩过,下面这篇文章主要给大家介绍了关于如何利用C#编写扫雷游戏的相关资料,文中通过示例代码介绍的...

    江湖逍遥6472022-03-07
  • C#C#利用GDI+给图片添加文字(文字自适应矩形区域)

    C#利用GDI+给图片添加文字(文字自适应矩形区域)

    这篇文章主要给大家介绍了关于C#利用GDI+给图片添加文字(文字自适应矩形区域)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作...

    Dandelion_drq11912022-02-22
  • C#C# 中DateTime 的使用技巧汇总

    C# 中DateTime 的使用技巧汇总

    本文主要介绍了DateTime的使用技巧,包括获取本周、上周、下周、本月、上个月、下个月、本季度、上季度、下季度、本年度、上年度、下年度等多个方法...

    jerrylsxu10502021-11-19
  • C#C#项目中跨文件调用公共类的实例方法

    C#项目中跨文件调用公共类的实例方法

    在本篇文章里小编给大家整理的是关于C#项目中如何跨文件调用公共类的知识点内容,需要的朋友们学习下。...

    仙国小生5012022-07-31