Unity 第一人称 使照相机跟随主角移动

using UnityEngine;
using System.Collections;
//应把物机添加Character Controller组件.
public class Cubet : 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;

	float rotationY = 0F;

	public Transform cam_transform;
	public Transform per_transform;
	// Use this for initialization
	void Start () {
		per_transform = this.transform;   //获取对象的transform,包括有旋转角度,位置等。此处已相当于指针指向了
		GameObject cobj = GameObject.Find ("mainCamera");   //获取照相机
		cam_transform = cobj.transform;	//照相机的transform
		camStart ();
		if (GetComponent<Rigidbody>())	//旋转冻结。作用是用于使旋转角度不因物理模拟而改变。
			GetComponent<Rigidbody>().freezeRotation = true;
	}

	void camStart(){
		Vector3 perpos = per_transform.position;
		perpos.y += 0.5f;
		perpos.x += 1f;
		perpos.z += 1f;
		cam_transform.position = perpos;	//设置照相机的位置、角度
		cam_transform.eulerAngles = per_transform.eulerAngles;
	}

	// Update is called once per frame
	void Update () {	//官方的代码
		if (axes == RotationAxes.MouseXAndY)
		{
			float rotationX = cam_transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;

			rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
			rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

			cam_transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
		}
		else if (axes == RotationAxes.MouseX)
		{
			cam_transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
		}
		else
		{
			rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
			rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

			cam_transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
		}
		per_transform.localEulerAngles = cam_transform.transform.localEulerAngles;	//设置对象的面向始终与照相机的面向保持一致。
	}
}
时间: 2024-10-05 19:42:20

Unity 第一人称 使照相机跟随主角移动的相关文章

unity中制作模拟第一人称视角下的指南针

private int zRotation; public GameObject obj; public void Update() { //obj = GameObject.Find("Camera");   //获取名为Camera的相机对象 zRotation = player.transform.eulerAngles.y; //player是unity第一人称 compass.transform.eulerAngles = new Vector3(0, 0, zRotatio

u3d5第一人称射击游戏(C#脚本)完整版并在iOS9.3系统上真机运行

参考资料:<Unity3D\2D手机游戏开发>(第二版) +   百度 涉及U3D的功能有:摄像机控制.物理.动画.智能寻路等. 开发工具:Unity3D5.3.4,VS2015,VMplayer12+MacOSX10.11+XCode7.3(我是Windos笔记本用的是苹果虚拟机,MAC真机不需要虚拟机,直接在appstore下载XCode最新版本就可以了,MAC最新版+Xcode最新版本可以直接真机调试运行)+OS9.3系统iphone 说一下U3D,想要在ios上调试的话就要在下载的时候

关于Unity中FPS第一人称射击类游戏制作(专题十)

当前Unity最新版本5.6.3f1,我使用的是5.5.1f1 FPS第一人称射击类游戏实例 场景搭建 1.创建Unity项目工程和文件目录,保存场景 2.导入人物模型和子弹碎片的资源包charactor.unitypackage(第74) 3.创建一个平面plane,X和Z拉长10倍,把主角模型Assets\Prefabs\person拉近Hierarchy视图中 4.把走路的声音Step.mp3,射击的声音Shot.mp3,平面贴图Ground.jpg,瞄准的准心贴图Crosshairs.p

改造u3d第一人称控制器,使之适合Cardboard+蓝牙手柄控制

一.在u3d编辑器中删除FPSController游戏对像中自带的Camera: 二.在u3d编辑器中将CardBoardMain游戏对像添加到FPSController的子物体: 三.修改脚本: 1.删除FirstPersonController脚本中的RotateView方法调用: 2.在CardboardHead中的UpdateHead中,修改FPSController对像的transform的Y轴上的转向: 以上,即可以完成使用cardboard追踪到的头部转向数据来控制第一人称游戏对像

自制Unity小游戏TankHero-2D(1)制作主角坦克

我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的.仅为学习Unity之用.图片大部分是自己画的,少数是从网上搜来的.您可以到我的github页面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源码. 本篇主要记录制作主角坦克(TankHero)的一些重点. 2D游戏布局 如上图所示,红色矩形围起来的是主角坦克,白色的一圈是围墙,坦克和围墙在同一平面上.地面背景放到

第一人称射击游戏总结概览

这个游戏小项目为第一人称射击游戏 大概分为几个步骤: 一:主角的制作 1.控制主角移动的实现 要点: character Controller组件的理解 rigidbody组件的理解 colider与rigidbody的理解 用代码控制主角的移动——键盘交互的实现 //操作主角移动 //定义3个值控制移动 float xm = 0, ym = 0, zm = 0; //上下左右运动 if (Input.GetKey(KeyCode.W)) { zm += m_movSpeed * Time.de

unity3d游戏开发之第一人称射击游戏

简介 这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧. 前提 这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念. 创建新工程 下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件. 从Unity安装目录导入Standard Assets资源包. 导入工程后,你会在Unity工程面板中的"Standard Assets"文件夹下看见这些资源内容

(连载)边喝咖啡边学Unity——第一章 Unity概述

作为本书的第一句正文,在这个醒目的位置再次想告诉大家,我的想法是大家把这本书当做一本闲书来读,同时也希望启发读者,因此目录结构只保留章节,不会再细分.重要的概念会特殊地提出来. 本章其实应该是枯燥无味的,对于Unity已经有所了解的读者可以自行跳过.鉴于本书的完整性不得不废话一章.         Unity是什么? 首先读者需要清楚地知道,Unity是一种工具或者说软件,至目前成书之时已退出5.0版本.也可以说Unity是一款优秀的3D游戏引擎,其对于底层图形接口的封装为开发者省了不少事,极大

Unity3D发布到虚拟机(WindowsXp虚拟机),使用第一人称鼠标失灵的解决方法

昨晚,将自己做的第一个完全不成形的Demo发布了,在安装的VMWare里运行,VMWare中安装的是纯净版的XP(Sp3),Demo的场景中使用了第一人称(First Person Controller),并修改了其中的MouseLook.cs 文件,在其代码中加入了一条语句,使得在行走时,只有按住右键(具体的是“Fire2”)才可以晃动视角,这样就实现了在场景中左键可以去点击一些物体而产生相应的功能事件.代码如下: public class MouseLook : MonoBehaviour