Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码

时间:2022-10-08 09:53:40

目录

物理学移动

实现角色移动

C# 代码

Unity中操作

实现小怪追主角

C#代码

Unity操作

通过组件的方式去移动

C#代码


物理学移动

我们使用的是刚体受力会移动的物理学观点去实现角色的移动的。

当物体受力时就会向某一个方向移动其中的Time.fixedDeltaTime是物理引擎的渲染时间间隔为0.02s即每秒50帧

实现角色移动

C# 代码

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

public class PlayMovementController : MonoBehaviour
{
    public float moveSpeed = 3.0f;
    private Vector2 movDir = new Vector2();
    //物理引擎方式采用的参数
    public Transform target;
    private Rigidbody2D rb2D;
    // Start is called before the first frame update
    void Start()
    {
        rb2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        MoveCharacter();
    }

    private void MoveCharacter()
    {
        movDir.x = Input.GetAxisRaw("Horizontal");
        movDir.y = Input.GetAxisRaw("Vertical");

        //防止角色斜向运动过快,我们让斜方向距离也为1,原来是根号2
        //归一化处理
        movDir.Normalize();

        //角色移动,要在Unity页面的target栏拖入需要移动的物体。
        rb2D.position += movDir * moveSpeed * Time.fixedDeltaTime;

//这句代码也行!! rb2D.MovePosition(new Vector2(transform.position.x, transform.position.y)+movDir*moveSpeed*Time.fixedDeltaTime);
 
    }
}

防止角色斜向运动过快,我们让斜方向距离也为1,原来是根号2
归一化处理

角色移动,要在Unity页面的target栏拖入需要移动的物体

Unity中操作

Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码

Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码 

 Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码

 Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码

实现小怪追主角

就是一个物体追随另一个物体,这里演示主角追建筑

C#代码

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

public class PlayMovementController : MonoBehaviour
{
    public float moveSpeed = 3.0f;
    private Vector2 movDir = new Vector2();
    //物理引擎方式采用的参数
    public Transform target;
    private Rigidbody2D rb2D;
    // Start is called before the first frame update
    void Start()
    {
        rb2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        MoveCharacter();
    }

    private void MoveCharacter()
    {
        movDir.x = Input.GetAxisRaw("Horizontal");
        movDir.y = Input.GetAxisRaw("Vertical");

        //防止角色斜向运动过快,我们让斜方向距离也为1,原来是根号2
        //归一化处理
        movDir.Normalize();
        

        //角色向某个位置移动(不是受控制的移动)可以实现跟随或小怪追主角
        transform.position = Vector2.MoveTowards(transform.position,target.position,Time.deltaTime);

    }
}

防止角色斜向运动过快,我们让斜方向距离也为1,原来是根号2
归一化处理
角色向某个位置移动(不是受控制的移动)可以实现跟随或小怪追主角

Unity操作

选中角色并上锁 Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码

 

Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码

Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码

通过组件的方式去移动

这个最简单的,我们通过获取当前位置直接计算出下一帧的位置,然后直接更改角色在下一个位置即可。

C#代码

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

public class PlayMovementController : MonoBehaviour
{
    public float moveSpeed = 3.0f;
    private Vector2 movDir = new Vector2();
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        MoveCharacter();
    }

    private void MoveCharacter()
    {
        movDir.x = Input.GetAxisRaw("Horizontal");
        movDir.y = Input.GetAxisRaw("Vertical");

        //防止角色斜向运动过快,我们让斜方向距离也为1,原来是根号2
        //归一化处理
        movDir.Normalize();
        //角色移动,Time.deltaTime表示渲染每帧的时间约等于(1/FPS)为了适配不同帧率的电脑,moveSpeed是角色移动的速度
        transform.position += new Vector3(movDir.x,movDir.y,0.0f)*moveSpeed*Time.deltaTime;



    }
}

 public class Transform : Component, IEnumerable
    {
        private class Enumerator : IEnumerator
        {
            private Transform outer;

            private int currentIndex = -1;

            public object Current => outer.GetChild(currentIndex);

            internal Enumerator(Transform outer)
            {
                this.outer = outer;
            }

            public bool MoveNext()
            {
                int childCount = outer.childCount;
                return ++currentIndex < childCount;
            }

            public void Reset()
            {
                currentIndex = -1;
            }
        }

        //
        // 摘要:
        //     The world space position of the Transform.