原神-孤云秘宝(unity实训案例)2——操控主角和摄像机架设

我们将角色导入后点击开始按钮就可以运行游戏

我们可以发现在游戏界面我们找不到角色,或者角色太小,这是因为我们还没有设置摄像机,接下来,我们对摄像机进行设置

  • 第三人称摄像机跟随

1.首先下载Cinemachine插件在Windos – Package Manage 中下载

之后我们可以在unity商店中下载Third Person Character Controller组件包

下载完成后点击Import导入组件(对于该插件的使用我们可能还需要安装Cinemachine插件)

这些完成之后,我就可以使用了,我们可以在菜单栏看见Cinemachine

2.设置摄像机

在菜单栏中选择Cinemachine之后点击Create Virtual Cinema,创建一个摄像机,在角色体下创建一个空的游戏体,这个游戏的作用是让摄像机追着和看着。

创建好之后点击创建好的摄像机,首先设置摄像机跟随的目标

调整摄像机参数如下

这样就设置好了一个追背的摄像机,摄像机水平抖动不为零,会导致角色转弯时,摄像机跟随不及时

  • 角色控制操作

这里利用Character controller实现角色的控制操作

Slope Limit :坡度限制

Step Offset :每步偏移量

Skin Width :皮肤厚度

Min Move Distance :最小移动距离

Center :中心

Radius :半径

Height :高度

Unity中可以使用character controller实现角色的控制,在unity中先创建一个需要被控制的角色,可以方块体等,为主角加入CharacterController组件

创建C#脚本,写入一下脚本

public Transform m_transform;

CharacterController m_ch;

void Start()

    {

        m_transform = this.transform;

        m_ch = this.GetComponent<CharacterController>();

    }

m_transfrom = this,transform; //的作用是获取主角的transform组件

m_ch = this.GetComponent<CharacterController>(); 

//的作用是获取主角的characterController组件

继续向脚本中添加代码

    float m_movSpeed = 5.0f;      //移动速度

    float m_rotSpeed = 1.0f;      //旋转速度

    float m_jumphight = 3f;       //跳跃高度

    float m_gravity = 9.8f;       //重力加速度

    private Vector3 Velocity = Vector3.zero;     //竖直方向上的一个向量

    public Transform m_groundcheck;   //与地面接触的检测器

    public float m_checkradius = 0.2f;      //地面检测器的范围

    private bool m_isground;          //一个判断是否与地面接触的bool值,接触则为true

public LayerMask layerMask;        //地面层

这里提到了一个地面检测器,地面检测器的做法为在,主角的底部添加一个空的游戏体,调整一个合适的大小,尽量小一些

添加结束之后,我们在脚本中继续添加如下代码

void Update()

    {

        m_isground = Physics.CheckSphere(m_groundcheck.position, m_checkradius, layerMask);

        if (m_isground && Velocity.y <0)

        {

            Velocity.y = 0;

        }

        if (m_isground && Input.GetButtonDown("Jump"))

        {

            Velocity.y += Mathf.Sqrt(m_jumphight * m_gravity);

        }

        //控制主角

        var vertical = Input.GetAxis("Vertical");  //键入ws

        var horizontal = Input.GetAxis("Horizontal"); //键入ad Horizontal

        var motion = transform.forward * vertical * m_movSpeed * Time.deltaTime;

        Velocity.y -= m_gravity * Time.deltaTime;    //重力加速度 a += g*时间

        m_ch.Move(Velocity * Time.deltaTime);  //竖直方向的移动

        m_ch.Move(motion); //水平方向的移动

        m_transform.Rotate(Vector3.up,horizontal * m_rotSpeed);  //旋转

}

m_isground = Physics.CheckSphere(m_groundcheck.position, m_checkradius, layerMask);这串代码为一个触碰检测,如果检测体m_groundcheck与layerMask接触后则返回一个true

Velocity.y += Mathf.Sqrt(m_jumphight * m_gravity);

计算跳跃的近似公式

回到unity,在scene窗口选择场景模型,添加一个ground的layer,并将场景模型的layer设置为ground。

点击角色脚本,将空的游戏体(检测体的大小要设置,可以在这个游戏体下加一个cube,来查看游戏的大小)关联到ground_check。然后将Lanyer Mask 设置为刚刚为地面创建的ground,就可以实现,地面检测

此时,运行游戏就可以,利用Charater Controller来实现角色的控制操作。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值