Unity實(shí)現(xiàn)弧形移動(dòng)效果
本文實(shí)例為大家分享了Unity實(shí)現(xiàn)弧形移動(dòng)效果的具體代碼,供大家參考,具體內(nèi)容如下
一、實(shí)現(xiàn)效果

二、第一種實(shí)現(xiàn)方法——弧形插值
using UnityEngine;
public class ArcMove : MonoBehaviour
{
public GameObject curGo;//當(dāng)前物體
public GameObject targetGo;//目標(biāo)物體
public float value;
private void Update()
{
//計(jì)算中心點(diǎn)
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;
//判定是否到達(dá)目標(biāo)點(diǎn)
float dis = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
if (dis <= 1)
{
Debug.Log("到達(dá)目標(biāo)點(diǎn)");
}
}
}
三、第二種實(shí)現(xiàn)方法——計(jì)算弧線中的夾角
using UnityEngine;
using System.Collections;
public class ArcMove : MonoBehaviour
{
public GameObject curGo;//當(dāng)前物體
public GameObject targetGo;//目標(biāo)物體
public float speed = 2;//速度
public int rotationAngle = 60;//旋轉(zhuǎn)的角度
private float distanceToTarget;//兩者之間的距離
private bool move = true;//是否移動(dòng)
void Start()
{
//計(jì)算兩者之間的距離
distanceToTarget = Vector3.Distance(curGo.transform.position, targetGo.transform.position);
StartCoroutine(Move());
}
/// <summary>
/// 移動(dòng)
/// </summary>
private IEnumerator Move()
{
//移動(dòng)到目標(biāo)點(diǎn)停止移動(dòng)
while (move)
{
Vector3 targetPos = targetGo.transform.position;
targetPos.z = 0;
//讓它始終朝著目標(biāo)
curGo.transform.LookAt(targetPos);
//計(jì)算弧線中的夾角
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("到達(dá)目標(biāo)點(diǎn)");
}
curGo.transform.Translate(Vector3.forward * Mathf.Min(speed * Time.deltaTime, currentDist));
yield return null;
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Unity3D實(shí)現(xiàn)控制攝像機(jī)移動(dòng)
- Unity鍵盤WASD實(shí)現(xiàn)物體移動(dòng)
- Unity3D實(shí)現(xiàn)虛擬按鈕控制人物移動(dòng)效果
- Unity3D實(shí)現(xiàn)物體旋轉(zhuǎn)縮放移動(dòng)效果
- Unity實(shí)現(xiàn)物體左右移動(dòng)效果
- Unity3D控件Easytouch控制主角移動(dòng)
- Unity3D實(shí)現(xiàn)人物轉(zhuǎn)向與移動(dòng)
- Unity調(diào)取移動(dòng)端的麥克風(fēng)進(jìn)行錄音并播放
- Unity3D實(shí)現(xiàn)人物移動(dòng)示例
- Unity實(shí)現(xiàn)人物旋轉(zhuǎn)和移動(dòng)效果
相關(guān)文章
C#使用Socket實(shí)現(xiàn)發(fā)送和接收圖片的方法
這篇文章主要介紹了C#使用Socket實(shí)現(xiàn)發(fā)送和接收圖片的方法,涉及C#操作socket發(fā)送與接收文件的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
C#實(shí)現(xiàn)提取Word中插入的多媒體文件(視頻,音頻)
在Word中可將文件通過OLE對象嵌入的方式插入到文檔,包括Word、excel、PDF、PPT、圖片、宏文件、文件包等在內(nèi)的多種文件類型。本文將利用C#實(shí)現(xiàn)提取插入在Word文件中的這些多媒體文件,感興趣的可以了解一下2022-02-02
c#遍歷System.drawing.Color下面的所有顏色以及名稱以查看
c#遍歷System.drawing.Color下面的所有顏色以及名稱以查看,需要的朋友可以參考一下2013-02-02
C#計(jì)算輸入漢字GBK編碼后十六進(jìn)制數(shù)輸出的方法
這篇文章主要介紹了C#計(jì)算輸入漢字GBK編碼后十六進(jìn)制數(shù)輸出的方法,涉及C#編碼操作相關(guān)技巧,需要的朋友可以參考下2015-04-04
使用C#自制一個(gè)Windows安裝包的詳細(xì)過程
這篇文章主要介紹了如何使用C#自制一個(gè)Windows安裝包,文中通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-07-07

