unity3d俯视角简易移动控制脚本及其易错点小分享

涉及方法:

  1. 本文分别采用了 ‘collider+rigidbody’ / ‘character controller’ 两种方式共四种情况来分享

  2. 在代码中input采用unity基本的“Horizontal”+“Vertical”输入获取(unity新的那个input system用过包但还没自己实际了解过嘿嘿(●ˇ∀ˇ●))

  3. 如果是collider+rigidbody的话,使用的是rigidbody的MovePosition()方法

    如果是character controller的话使用的是该控制器的simplemove函数(对应还有一个move函数,区别在于simplemove在被调用时将使物体具备重力,move函数则和translate相似。)

  4. 对于鼠标控制方向的情况通过raycast+getpoint方法获取当前主摄像机与鼠标产生的射线找到与平面的交点,然后使用transform组件的LookAt方法调整朝向。

【使用character controller】准备:

  1. 在unity中创建好基本的平面和胶囊作为场景和角色(蓝色为z轴,代表transform.forward,即正面)
  2. 为平面添加collider(带2d的是2D项目使用的组件),为胶囊(角色)添加character controller(新建的胶囊会自带一个collider1,在添加character controller后会自带另一个collider2,所以可以将collider1删掉)

【使用character controller】编写move脚本:

第一种情况:角色移动方向与角色朝向一致:

{一些细节和注意事项都写在代码注释中辣~}

using UnityEngine;

/**
 * 功能:角色移动控制[角色移动时永远朝正面]
 * 
 */
public class move : MonoBehaviour
{
   
    //速度变量
    public float speed;
    //定义角色控制器
    public CharacterController cc;
    void Start()
    {
   
        //组件cc变量
        cc = transform.GetComponent<CharacterController>();

        //速度赋值
        speed = 10;
    }

    void Update()
    {
   
        //调用移动方法
        move_by_cc();
    }
    
    void move_by_cc()
    {
   
        //水平方向的输入获取(即A-D键或←→键)
        float x = Input.GetAxisRaw("Horizontal");
        //垂直方面的输入获取
        float z = Input.GetAxisRaw("Vertical");

        /* GetAxis()的返回值初始为0,在-1到1之间变化,对应的GetAxisRaw()则不会变化,直接返回1或-1 */

        /*上面的input使用GetAxis()时在松开按键后角色会继续移动一小部分距离,会产生一种“冰面滑动”的效果,
        使用GetAxisRaw()的话则即按即动,即松即停*/
        if (Mathf.Abs(x)>0.1f || Mathf.Abs(z) > 0.1f)
        {
   
            //移动方向
            Vector3 toward_dir = new Vector3(x, 0, z);

            //角色朝向与移动方向一致
            transform.LookAt(transform.position + toward_dir);

            
  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值