Unity游戏开发第三人称摄像机跟随

  在第三人称游戏开发中,因为我们的人物是会不断移动的,所以我们的相机需要保持合适的角度跟随我们的人物进行移动,最简单的一种实现方法是先在unity场景中将摄像机调整到合适的位置,然后将它放到我们的人物下面,让他成为人物的子物体,这样做也可以达到摄像机跟随的目的。如果对摄像机跟随的要求不高的话可以临时采用这种方法

  为了实现第三人称摄像机跟随的功能,大部分情况先我们都是采用编写代码的方法来实现的。下面是本人实现的一种摄像机跟随的方法,仅供参考,实现的功能是按住键盘AD键可以让摄像机视野围绕人物左右移动,按住键盘ws键可以让摄像机视野围绕人物上下移动,滑动鼠标滚轮能够实现视野的拉近远离功能。如图我创建了几层空物体空物体leftandright-->Upanddown-->zoomconter-->conter,摄像机放在conter下面,我们知道在Unity中如果存在父子级关系,子物体会跟随父物体进行运动的,所以我用代码分别对leftandright-->Upanddown-->zoomconter进行旋转控制,也就实现了对其子物体摄像机的控制(操作时要首先摆好层级的相对位置leftandright始终与人物坐标保持一致),脚本如下是挂在leftangright上的,采用的是单例模式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
    //1,知道自己要做什么
    //2,用什么API可以实现功能
    //3,写出来,验证,改错
public class CamerControl : MonoBehaviour {

    public static CamerControl instance;
    void Awake()
    {
        instance = this;
    }
    [SerializeField]
    private Transform Upanddown;
    [SerializeField]
    private Transform Zoomconter;
    [SerializeField]
    private Transform conter;

    //控制视野左右移动的方法
    public void SetRotate(int type)
    {
        transform.Rotate(0,Time.deltaTime*(type==1?1:-1)*30,0);

    }
    //控制视野上下移动的方法
    public void SetUp(int type)
    {
        Upanddown.Rotate(0,0,Time.deltaTime*(type==1?1:-1)*30);
        //Upanddown.transform.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(Upanddown.transform.localEulerAngles.z,-90f,0f));
    }
    //控制视野远近的方法
    public void SetScale(int type)
    {
        conter.Translate(Vector3.forward*(type==1?1:-1));
    }
}

之后在人物控制脚本的Update函数中调用CameraFllow函数

//控制摄像机移动的方法
    void CameraFllow()
    {
        if (CamerControl.instance == null) return;
        CamerControl.instance.transform.position = transform.position;
        if (Input.GetKey(KeyCode.A))
        {
            CamerControl.instance.SetRotate(1);
        }
        else if (Input.GetKey(KeyCode.D))
        {
            CamerControl.instance.SetRotate(-1);
        }
        if (Input.GetKey(KeyCode.W))
        {
            CamerControl.instance.SetUp(-1);
        }
        else if (Input.GetKey(KeyCode.S))
        {
            CamerControl.instance.SetUp(1);
        }
        if (Input.GetAxis("Mouse ScrollWheel")>0)
        {
            CamerControl.instance.SetScale(1);
        }
        else if (Input.GetAxis("Mouse ScrollWheel")<0)
        {
            CamerControl.instance.SetScale(-1);
        }
    }

原文地址:https://www.cnblogs.com/linkshow/p/9716070.html

时间: 2024-10-09 19:49:45

Unity游戏开发第三人称摄像机跟随的相关文章

Unity 中简单的第三人称摄像机跟随

先说较为简单的一种: 一.将摄像机作为人物角色的子对象,设置好相对距离和偏移量即可,但这种方法弊端较多,一般不采用. 二. 设置好摄像机跟物体的相对距离,之后利用插值让摄像机平滑跟随. 原理:摄像机与player以向量(有大小,有方向)相连,这样就可以确定摄像机与player的相对距离了,这样人物走动,摄像机也会跟随移动. 将下列代码与camera绑定就可以实现第三人称摄像机跟随.代码: public class CameraFollow : MonoBehaviour { // 摄像机跟随的对

Unity3d中第三人称摄像机跟随的实现

最简单的一种就是先设置好摄像机跟物体的相对距离, 在脚本里就可以由物体的位置,跟相对距离,就可以求出摄像机的位置, 用插值的方法可以让摄像机平滑跟随. 1 public class CamFollow1 : MonoBehaviour 2 { 3 4 private Vector3 offset; 5 public Transform player; 6 7 void Start() 8 { 9 offset = player.position - transform.position; 10

【Unity笔记】第三人称相机跟随

第三人称,摄像机跟在角色后上方. void Update () { myCamera.position = transform.position + new Vector3(0, 1.5f, 5); myCamera.LookAt(transform); //if(Input.anyKeyDown) { // for (int i = 0; i < keys.Length; i++) { // if (Input.GetKeyDown(keys[i])) { // animator.SetFlo

Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机

Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机 Unity中制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大:当不再按下的时候,会慢慢缩小成原来的视图.游戏中时常出现的狙击手就是使用望远镜的一个例子,如图2-22所示.   图2-22  游戏中狙击手所看到的视图 制作望远镜的过程如下: (1)在Project视图里,创建一个C#脚本文件,命名为TelescopicView.打开这个脚本文件,并在里面添加下面的代码: 01     using UnityEngine

Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动

Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动 使用cookie类型的纹理模拟云层的移动 现实生活中,当阳光直射大地,而天空中又有很多云时,云层的影子总是会投射在大地上,风吹着云层移动,影子也跟着运动,如图3-28所示. 图3-28  天空中的云朵与大地上的影子 要在游戏中,模拟与之类似的大气现象时,就需要使用cookie类型的纹理. 制作云层效果的纹理 本小节将使用PhotoShop绘制有云层效果的纹理图,然后为其添加透明度信息.具体操作过程如下: (1)使用Photo

unity游戏开发看什么书?

Unity游戏引擎集合了开发一个游戏所需要的大部分工具.组件.环境等内容.就像拍一部电影,我们需要摄像机.摇臂.灯光.挑干等基础工具.做游戏也需要摄像机.灯光.地形.人物控制器等组件.unity游戏开发看什么书?这里给大家推荐两本:一.<3D 数学基础>这本有趣的书介绍了模拟和渲染3D世界所需的基本数学知识,涵盖了理论知识和C++实现代码.理论部分解释3D中数学和几何之间的关系,列出的技巧与公式可以当做参考手册以方便查找.实现部分演示了怎样用代码来实现这些理论概念.编程示例语言使用的是C++,

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中应用很广泛的序列化技术Google的ProtoBuf,所以本文也是按照ProtoBuf的方式来操作的.ProtoBuf是一个开源库,简单来说ProtoBuf就是一个能使序列化的数据变得更小的类库,当然这里指的更小是相对的.好了ProtBuf的东西就不在多说,以后会专门写一篇帖子的.本帖其实就相当于上

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其实这样到游戏中还是不能用的.主要有两个方面,1.bin文件的后缀使我们随便取的名字,但是这种文件Unity不买账.因为Unity中的二进制文件必须是以.bytes命名的.2.在写文件之前其实还可以对二进制进行压缩,这样可以最大化节省设备空间.也就是说我们在生成数据实例后还需要做以下几件事:序列化 -

Unity 游戏开发技巧集锦之创建透明的材质

Unity 游戏开发技巧集锦之创建透明的材质 Unity创建透明的材质 生活中不乏透明或者半透明的事物.例如,擦的十分干净的玻璃,看起来就是透明的:一些塑料卡片,看起来就是半透明的,如图3-23所示.在Unity中,可以创建模拟了透明效果的材质,这也是本节主要讲解的内容. 图3-23  半透明的卡片 Unity创建并配置材质 在Project视图里,创建一个材质,并命名为TransMaterial,选中它然后在Inspector视图里修改Shader属性为Transparent/Diffuse,