人物移动以及摄像机跟随脚本(完善中)

本文详细介绍了Unity中使用C#编写的CharacterMove和CameraController脚本,涉及角色的移动、转向、跳跃、奔跑控制以及摄像机跟随玩家并限制旋转角度的实现方法。
摘要由CSDN通过智能技术生成

具体操作内容

人物脚本

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

public class CharacterMove : MonoBehaviour
{
    private Rigidbody rigid;//玩家刚体
    public Transform mCamera;//相机组件

    private Vector3 moveDir;//人物移动方向
    private float currentVelocity = 1;//目前的转向速度(SmoothDampAngle函数的返还参数)
    private float smoothTime = 0.1f;//完成平滑的时间(SmoothDampAngle函数的参数)
    public float moveSpeed;//移动速度
    public float rotateSpeed;//旋转速度
    public float jPower;//跳跃力度
    private float inputH;//水平移动参数
    private float inputV;//垂直移动参数
    private bool isMove;//是否移动
    private bool isRun;//是否奔跑
    private bool isGround;//是否在地面上

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
        //animator = GetComponent<Animator>();
    }

    private void Update()
    {
        inputH = Input.GetAxis("Horizontal");//获取水平/垂直移动参数
        inputV = Input.GetAxis("Vertical");
        if (Input.GetKeyDown(KeyCode.Space) && isGround)
        {
            isGround = false;
            rigid.AddForce(0, jPower, 0);//给刚体向上的力
        }//更新跳跃动画

        if (inputH != 0 || inputV != 0)
        {
            isMove = true;
            transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, (Mathf.Atan2(inputH, inputV) * Mathf.Rad2Deg + mCamera.eulerAngles.y), ref currentVelocity, smoothTime, rotateSpeed, Time.deltaTime);
        }//改变人物朝向
        else
        {
            isMove = false;
        }//更新移动状态

        if (Input.GetKey(KeyCode.LeftShift))
        {
            moveSpeed = 6;
            isRun = true;
        }//更新奔跑状态
        else
        {
            moveSpeed = 3;
            isRun = false;
        }

        moveDir = mCamera.TransformDirection(inputH, 0, inputV);
        rigid.MovePosition(transform.position + new Vector3(moveDir.x, 0, moveDir.z) * moveSpeed * Time.fixedDeltaTime);//移动人物
    }

    private void OnCollisionEnter(Collision collision)
    {
        //需要给地面添加Tag标签  Ground
        //当接触到地面时将isGround设置为True
        if (!isGround)
        {
            if (collision.gameObject.CompareTag("Ground"))
            {
                isGround = true;
            }
        }//判断是否接地
    }
}

摄像机脚本

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

public class CameraController : MonoBehaviour
{
    public Transform body;//玩家人物组件

    public float maxY = 40;//相机旋转上界限
    public float minY = -10;//相机旋转下界限
    public float xSpeed = 250;//相机纵向旋转速度
    public float ySpeed = 125;//相机横向旋转速度
    private float mouseX;//鼠标水平移动参数
    private float mouseY;//鼠标垂直移动参数

    void Update()
    {
        mouseX += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;//更新鼠标水平/垂直移动参数
        mouseY += Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;
        mouseY = clampAngle(mouseY);
        transform.position = body.position;//相机跟随人物移动
        transform.rotation = Quaternion.Euler(mouseY, mouseX, 0);//相机旋转
    }

    private float clampAngle(float angle)
    {
        if (angle < -360)
        {
            angle += 360;
        }
        if (angle > 360)
        {
            angle -= 360;
        }
        return Mathf.Clamp(angle, minY, maxY);
    }//控制相机上下旋转角度
}

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值