Différentes méthodes de mise en œuvre et effets des objets de notes d'apprentissage Unity suivent le mouvement

Il existe de nombreuses façons d'implémenter le mouvement d'objets dans Unity. Cet article présentera 7 méthodes d'implémentation différentes, vous pouvez vous référer à l'effet vous-même

1. Définir la méthode Position

public Transform targetTansform;

In Update/FixedUpdate:
this.transform.position = targetTansform.position;

2. Méthode Vector3.Lerp()

public Transform targetTansform;
public float lerpSpeed = 5f;
In Update/FixedUpdate:
this.transform.position = Vector3.Lerp(this.transform.position,targetTansform.position, lerpSpeed * Time.fixedDeltaTime);

3. Méthode Vector3.MoveTowards()

public Transform targetTansform;
public float moveSpeed = 5f;
In Update/FixedUpdate:
this.transform.position = Vector3.MoveTowards(this.transform.position,targetTansform.position, moveSpeed * Time.fixedDeltaTime);

4. Vector3.MoveTowards() combiné avec la méthode Vector3.Lerp()

public Transform targetTansform;
public float lerpSpeed = 5f;
public float moveSpeed = 5f;
In Update/FixedUpdate:
this.transform.position = Vector3.MoveTowards(this.transform.position,Vector3.Lerp(this.transform.position,targetTansform.position, lerpSpeed * Time.fixedDeltaTime), moveSpeed * Time.fixedDeltaTime);

5. Méthode Vector3.SmoothDamp()

public Transform targetTansform;
public float dampSpeed = 100f;
In Update/FixedUpdate:
this.transform.position = Vector3.SmoothDamp(this.transform.position,targetTansform.position, ref velocity,dampSpeed * Time.fixedDeltaTime);

6. Méthode AddForce()

public Transform targetTansform;
private Vector3 velocity = Vector3.zero;
In Update/FixedUpdate:
Vector3 force = targetTansform.position - transform.position;
force = force.normalized;
force = force * forceSpeed;
this.transform.GetComponent<Rigidbody>().AddForce(force);

7. méthode transform.Translate ()

public Transform targetTansform;
In Update/FixedUpdate:
Vector3 moveDirection = targetTansform.position - transform.position;
transform.Translate(moveDirection,Space.World);

Comparaison d'effet :

insérez la description de l'image ici

insérez la description de l'image ici

Code complet :

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

public enum FollowType
{
    
    
    SetPosition,
    Lerp,
    MoveTowards,
    MoveTowardsAndLerp,
    SmoothDamp,
    RigibodyAddForce,
    Translate
}

public class AutoFollow : MonoBehaviour
{
    
    
    public Transform targetTansform;
    public FollowType myFollowType;
    public float lerpSpeed = 5f;
    public float moveSpeed = 5f;
    public float dampSpeed = 100f;
    private Vector3 velocity = Vector3.zero;
    public float forceSpeed = 50;
  
    private void FixedUpdate()
    {
    
    

        switch (myFollowType)
        {
    
    
            case FollowType.SetPosition:
                this.transform.position = targetTansform.position;
                break;
            case FollowType.Lerp:
                this.transform.position = Vector3.Lerp(this.transform.position,targetTansform.position, lerpSpeed * Time.fixedDeltaTime);
                break;
            case FollowType.MoveTowards:
                this.transform.position = Vector3.MoveTowards(this.transform.position,targetTansform.position, moveSpeed * Time.fixedDeltaTime);
                break;
            case FollowType.MoveTowardsAndLerp:
                this.transform.position = Vector3.MoveTowards(this.transform.position,Vector3.Lerp(this.transform.position,targetTansform.position, lerpSpeed * Time.fixedDeltaTime), moveSpeed * Time.fixedDeltaTime);
                break;
            case FollowType.SmoothDamp:
                this.transform.position = Vector3.SmoothDamp(this.transform.position,targetTansform.position, ref velocity,dampSpeed * Time.fixedDeltaTime);
                break;
            case FollowType.RigibodyAddForce:
                Vector3 force = targetTansform.position - transform.position;
                force = force.normalized;
                force = force * forceSpeed;
                transform.GetComponent<Rigidbody>().AddForce(force);
                break;
            case FollowType.Translate:
                Vector3 moveDirection = targetTansform.position - transform.position;
                transform.Translate(moveDirection,Space.World);
                break;
            
        }
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42358083/article/details/122753421
conseillé
Classement