Unity 3D基本的移动操作

一、使用transform组件进行移动

transform组件是每一个游戏物体自带的组件,它表示的是Object的外在改变,里面的属性如图所示:

 Position-->Object的位置.  Rotation-->对Object进行旋转. Scale-->对Object进行缩放

而且Transform组件有很多内置方法,比如这次移动用到的就是--Translate方法.

实例代码如下:

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

public class move2 : MonoBehaviour
{

    public float moveSpeed;
    private float x_direction;
    private float z_direction;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        x_direction = Input.GetAxis("Horizontal");
        z_direction = Input.GetAxis("Vertical");
        this.transform.Translate(x_direction * moveSpeed, 0, z_direction * moveSpeed);
    }
}

这样就可以实现一个简单的Object移动.Translate里面的可以是一个三维向量当作参数.

二、使用Rigidbody组件进行移动

Mass-->质量.   Drag-->阻力.   Angular Drag-->角阻力.   Use Gravity-->重力模式.  

Is Kinematic --> 是一种很自由的运动,抛开重力 

关于Interpolate和Collision Detection 笔者也没有用过,所以无法告知大家了.有大佬会的麻烦在评论区告诉我一声呗..

Constraints-->约束...下面分别是冻结位置和冻结旋转.

那么我们怎么使用Rigidbody来控制物体移动呢?    简单!!!!!

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

public class move2 : MonoBehaviour
{
    private Rigidbody rb;
    public float moveSpeed;
    private float x_direction;
    private float z_direction;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>(); 
    }

    // Update is called once per frame
    void Update()
    {
        x_direction = Input.GetAxis("Horizontal");
        z_direction = Input.GetAxis("Vertical");
        rb.velocity = new Vector3(x_direction * moveSpeed, 0, z_direction * moveSpeed);        
    }
}

我们利用的是Rigidbody.velocity这个属性,这个属性可以获取当前Object的速度.只需要创建一个矢量单位,并且根据输入操作判断方向,就可以实现Object在这个方向移动.

三、利用鼠标控制移动

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

public class move2 : MonoBehaviour
{

    Vector3 tempPoint = new Vector3(0, 0, 0);

    // Start is called before the first frame update
   

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

    private void PlayerMove_FollowMouse()
    {
        if(Input.GetMouseButtonDown(1))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo))
            {
                tempPoint = hitInfo.point;
            }
        }
        float step = 10 * Time.deltaTime;
        this.transform.localPosition = Vector3.MoveTowards(this.transform.localPosition, tempPoint, step);
        this.transform.LookAt(tempPoint);

        

    }
}

 行啦,笔者不才.目前还是一个新手会的移动控制只有这么多了

如果对您有所帮助,请关注一下吧........

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要实现鼠标控制角色移动,可以按照以下步骤进行: 1. 获取鼠标在屏幕上的位置。可以使用Input.mousePosition来获取鼠标位置信息。 2. 将鼠标位置转换为世界坐标系中的位置。可以使用Camera.ScreenToWorldPoint将屏幕坐标转化为世界坐标。 3. 计算人物朝向,可以使用Quaternion.LookRotation方法来计算人物的朝向。 4. 让人物朝向鼠标所在的位置,可以使用Transform.rotation属性来设置人物的旋转。 5. 让人物向鼠标所在的位置移动,可以使用Transform.Translate方法来移动人物。 下面是示例代码,可以放在Update函数中实现人物跟随鼠标移动: ```csharp void Update() { // 获取鼠标在屏幕上的位置 Vector3 mousePos = Input.mousePosition; // 将鼠标位置转换为世界坐标系中的位置 Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, transform.position.y - Camera.main.transform.position.y)); // 计算人物朝向 Quaternion rotation = Quaternion.LookRotation(worldPos - transform.position); // 让人物朝向鼠标所在的位置 transform.rotation = rotation; // 让人物向鼠标所在的位置移动 transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed); } ``` 其中,moveSpeed为人物移动速度,可以自行调整。 ### 回答2: 在Unity3D中,要实现人物动画跟随鼠标移动的效果,可以按照以下步骤进行操作: 1. 创建一个3D人物模型并添加动画组件,确保人物模型已经设置好基本的动画动作。 2. 创建一个脚本,并将其附加到人物模型上。这个脚本将负责处理鼠标移动相关的逻辑。 3. 在脚本中,首先需要获取鼠标的屏幕坐标。可以使用Input类提供的鼠标相关的方法来获取。 4. 接下来,将鼠标的屏幕坐标转换为世界坐标。可以使用Camera类提供的ScreenToWorldPoint方法来完成转换。 5. 然后,将人物的位置设置为鼠标的世界坐标。可以使用Transform组件的position属性来设置。 6. 最后,根据人物的移动方向和速度,播放相应的移动动画。可以使用Animator组件来控制人物的动画播放。 需要注意的是,以上只是基本的实现思路,具体的代码细节还需要根据项目的需求进行相应的调整。另外,为了使人物移动更加平滑,可以使用插值算法来处理人物的位置更新。 ### 回答3: 在Unity3D中,要实现人物动画跟随鼠标移动,可以按照以下步骤进行操作: 1. 首先,先确保人物模型已经导入到场景中,并且已经添加好动画控制器。 2. 在脚本中,在Update()函数中获取鼠标的位置。可以使用Input类的鼠标输入函数来获取鼠标的X和Y坐标。 3. 将鼠标的X和Y坐标转换为世界坐标系中的位置。可以使用Camera类的ScreenToWorldPoint()函数,将屏幕上的坐标转换为世界坐标。 4. 接下来,需要将人物的朝向设置为鼠标的位置。可以使用Quaternion.LookRotation()函数来计算人物的朝向。 5. 将计算出的朝向应用到人物模型上,可以通过设置人物模型的transform.rotation属性实现。 6. 最后,根据人物的朝向,选择合适的动画状态进行播放。可以在动画控制器中设置不同朝向下对应的动画状态,并根据计算出的朝向来切换动画状态。 这样,在每一帧更新的时候,就能够根据鼠标的位置进行人物的朝向和动画状态的切换,实现人物动画跟随鼠标移动的效果。 需要注意的是,以上仅为实现基本的鼠标跟随移动和动画切换的逻辑,具体的实现方式可能有所不同,可以根据具体的场景需求和人物模型的动画设置进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值