Unity角色或摄像机移动和旋转的控制脚本

这篇具有很好参考价值的文章主要介绍了Unity角色或摄像机移动和旋转的控制脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该脚本挂载到需要被移动、旋转控制的物体身上,也可以之间挂在到摄像机上!

挂载到摄像机上可以实现第一人称视角控制!

挂载到物体身上,配合摄像机跟踪脚本可以实现,第三人称视角控制! 

第一人称视角

将角色控制脚本挂给摄像机即可!

Unity角色或摄像机移动和旋转的控制脚本,unity,游戏引擎

以下是角色控制脚本:

// 导入Unity的命名空间,以便我们可以使用Unity的类和方法
using System.Collections;

// 导入Unity的Generic Collections命名空间,以便我们可以使用Generic Collections类和方法
using System.Collections.Generic;

// 导入UnityEngine命名空间,这个命名空间包含了很多Unity的类和方法
using UnityEngine;

// 定义一个名为RotateControl的公共类,这个类继承自MonoBehaviour类
// MonoBehaviour类是Unity中的基础类,用于让游戏对象和其他组件进行交互
public class RotateControl : MonoBehaviour
{
    // 这个注释是对该脚本作用的简单描述
    // 这个脚本来通过鼠标左右滑动和上下滑动控制摄像机或者主角进行选择
    /*  
     * 下面的注释是对整个流程的描述,包括检测用户是否有滑动鼠标以及滑动后如何旋转的说明
     */
    // 定义一个浮点型变量RotionXX,这个变量用于存储旋转角度(在X轴上)
    float RotionXX;

    // 定义一个浮点型变量RotionYY,这个变量用于存储旋转角度(在Y轴上)
    float RotionYY;

    // 定义一个公共浮点型变量roatespeed,这个变量用于控制旋转的速度,默认值为10
    public float roatespeed = 10f;

    // Update方法在Unity中是每个帧都会调用的方法,类似于C++中的每帧都会执行一次的函数
    void Update()
    {
        // Input.GetAxis("Mouse X")获取鼠标在X轴上的移动量,这个值是-1(左),0(无移动)或1(右)
        float RotionY = Input.GetAxis("Mouse X");

        // Input.GetAxis("Mouse Y")获取鼠标在Y轴上的移动量,这个值是-1(上),0(无移动)或1(下)
        float RotionX = Input.GetAxis("Mouse Y");

        // 下面的代码是计算旋转角度并存储到RotionXX和RotionYY中
        // Time.deltaTime获取上一帧和当前帧之间的时间差,乘以roatespeed可以得到每帧旋转的角度
        // 因为每帧的时间可能不同,使用Time.deltaTime可以保证在不同帧率下旋转的速度是一致的
        //四元数
        RotionXX += -RotionX * Time.deltaTime * roatespeed;
        RotionYY += RotionY * Time.deltaTime * roatespeed;

        // 这行代码将RotionXX的值限制在-45和45之间,超过这个范围的数值会被调整到这个范围之内
        RotionXX = Mathf.Clamp(RotionXX, -45f, 45f);

        // 打印出当前的旋转角度RotionXX的值,帮助我们调试程序
        Debug.Log("角度" + RotionXX);

        // 这行代码将计算出来的旋转角度应用到对象的transform上,实现旋转效果
        this.transform.rotation = Quaternion.Euler(RotionXX, RotionYY, 0);
    }
}

第三人称

将上面, 角色控制脚本挂给模型,并添加一个摄像机追踪空物体,便于摄像机有一个追踪目标,然后把下面脚本挂给摄像机

Unity角色或摄像机移动和旋转的控制脚本,unity,游戏引擎

附赠摄像机跟踪脚本(如果你角色控制脚本给了摄像机,那么这个脚本就不需要了)

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

public class CameraFollow : MonoBehaviour
{
    public Transform target; // 跟踪目标
    public float smoothTime = 0.3f; // 平滑时间

    private Vector3 velocity = Vector3.zero;

    void Update()
    {
        计算新的位置
        Vector3 targetPosition = target.TransformPoint(new Vector3(0,1,-5));//本地坐标转世界坐标
        平滑移动到新的位置
        transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
        transform.LookAt(target);
    }
}

附上一个官方的摄像机视角控制脚本,这个脚本需要挂在到摄像机

using UnityEngine;

namespace Unity.AI.Navigation.Samples
{
    /// <summary>
    /// Manipulating the camera with standard inputs
    /// </summary>
    public class FreeCam : MonoBehaviour
    {
        public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
        public RotationAxes axes = RotationAxes.MouseXAndY;
        public float sensitivityX = 15F;
        public float sensitivityY = 15F;
    
        public float minimumX = -360F;
        public float maximumX = 360F;
    
        public float minimumY = -60F;
        public float maximumY = 60F;
    
        public float moveSpeed = 1.0f;
    
        public bool lockHeight = false;
    
        float rotationY = 0F;
    
        void Update()
        {
            if (axes == RotationAxes.MouseXAndY)
            {
                float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
    
                rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
                rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
    
                transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
            }
            else if (axes == RotationAxes.MouseX)
            {
                transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
            }
            else
            {
                rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
                rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
    
                transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
            }
    
            var xAxisValue = Input.GetAxis("Horizontal");
            var zAxisValue = Input.GetAxis("Vertical");
            if (lockHeight)
            {
                var dir = transform.TransformDirection(new Vector3(xAxisValue, 0.0f, zAxisValue) * moveSpeed);
                dir.y = 0.0f;
                transform.position += dir;
            }
            else
            {
                transform.Translate(new Vector3(xAxisValue, 0.0f, zAxisValue) * moveSpeed);
            }
        }
    }
}

 文章来源地址https://www.toymoban.com/news/detail-736190.html

到了这里,关于Unity角色或摄像机移动和旋转的控制脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity摄像机平滑移动旋转

    Unity中使用Vector3.SmoothDamp(平滑阻尼)方法进行跟随移动,可以使跟随看起来很平滑,而不显得突兀,最典型的示例就是相机平滑跟随角色移动。 SmoothDamp (current : Vector3, target : Vector3, ref currentVelocity : Vector3, smoothTime )  

    2024年02月11日
    浏览(51)
  • 【Unity】摄像机跟随鼠标移动以物体为中心旋转 物体根据视线方向移动

    描述 实现摄像机根据鼠标移动跟随物体旋转,以摄像机前物体为中心,摄像机围绕物体旋转,并使摄像机时刻指向物体 实现效果 Unity 组件设置 Camera 组件设置 Body 组件设置 实现代码 CameraRotateMove.cs 摄像机跟随和旋转 move_better.cs 物体根据按键移动

    2024年02月08日
    浏览(86)
  • unity-第三人称摄像机简单脚本(包括跟随、视角旋转、滚轮缩放)

    本菜鸟为了实现第三人称视角摄像机的主要功能,踩了很多意料之外的坑,终于搞出一份自觉完美的脚本,分享一下。 功能:摄像机跟随、鼠标滚轮缩放视野、长按鼠标右键左右旋转视野、长按鼠标中键上下旋转视野。 此脚本挂接在摄像机上,有详细注释,可直接运行。

    2024年02月08日
    浏览(60)
  • Unity制作射击游戏案例01(控制角色+发射子弹+摄像机跟踪)

    //【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、   2.发射子弹(空格键) //【程序逻辑2】 首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数    3.克隆子弹 4.让克隆的子弹往前跑 为子弹模板添加刚体,并且限制旋转 这个脚本需要挂在到摄像机,里面谈

    2024年02月06日
    浏览(52)
  • Unity 控制摄像机镜头的上下左右移动

            private float FollowPosx,FollowPosy;     private float moveAmount=5;   //控制镜头的移动速度     // Update is called once per frame     void Update()     {         if (Input.mousePosition.y Screen.height * 0.9)//如果鼠标位置在顶部,就向上移动         {             FollowPosy += moveAmount * Time.delta

    2024年02月11日
    浏览(46)
  • unity摄像机跟随鼠标旋转

     float vertical = Input.GetAxis(\\\"Mouse X\\\") float horizontal = Input.GetAxis(\\\"Mouse Y\\\") 第二种 通过 计算坐标时只需要通过 Quaternion.Euler 来取得旋转四元数,以玩家为原点衍生一条(0,0,-1)的向量并乘上四元数以旋转至 Player 指向摄像机的方向,最后乘上 Distance ,即可得到摄像机相对玩家的偏移

    2024年02月11日
    浏览(62)
  • Unity三种摄像机旋转方式

    1.按下鼠标右键可以实现摄像机上下左右旋转 2.按下鼠标右键可以实现摄像机围绕某个物体上下左右旋转 3.摄像头始终跟随在某个物体的正后方

    2024年02月13日
    浏览(44)
  • 【UE4】 通过按钮点击实现摄像机的切换 并通过鼠标控制新摄像机的旋转

    首先创建了4个Actor蓝图类 每个蓝图类内只拥有一个摄像机组件 将每个actor蓝图类摆放到场景的合适位置 在关卡蓝图中创建自定义事件,当该事件触发时切换摄像机 创建一个控件蓝图,在控件蓝图中创建如下5个按钮,并创建点击事件。按钮分别表示车上的4个镜头和车外自由

    2023年04月09日
    浏览(56)
  • Unity丨移动相机朝向目标并确定目标在摄像机可视范围内丨摄像机注释模型丨摄像机移动丨不同尺寸模型优化丨

    本文提供的功能是摄像机朝向目标移动,并确定整个目标出现在摄像机视角内,针对不同尺寸的模型优化。 提示:这里可以添加技术名词解释 直接上代码 后期可扩展功能:类似点击目标完成视角移动等。

    2024年02月07日
    浏览(53)
  • Unity实现2D游戏跟随摄像机(平滑移动)

    摄像机运行效果如下所示。 首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在Unity商店中购买的资源,可以点击Window菜单栏 Package Manager选项,来打开Package Manager窗口,如下所示,然后下载你需要的资源。 如果你没有在资源商店的精灵资产,可以在Hierarchy视图,右

    2024年02月19日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包