Unity 漫游相机脚本

1.修改unity3d的Mouse Look相机脚本:按住右键控制前进方向,方向键改变位置

2.给场景相机添加系统自带的fpswalker脚本

3.指定fpswalker里transform指定场景相机

PS:Mouse Look.cs修改部分:

 

001

void Update ()


002

{


003

if (Input.GetMouseButton(1) && axes == RotationAxes.MouseXAndY)


004

{


005

// Read the mouse input axis


006

rotationX += Input.GetAxis("Mouse X") * sensitivityX;


007

rotationY += Input.GetAxis("Mouse Y") * sensitivityY;


008


009

rotationX = ClampAngle(rotationX, minimumX, maximumX);


010

rotationY = ClampAngle(rotationY, minimumY, maximumY);


011


012

Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);


013

Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, Vector3.left);


014


015

transform.localRotation = originalRotation * xQuaternion * yQuaternion;


016

}


017

else if (Input.GetMouseButton(1) && axes == RotationAxes.MouseX)


018

{


019

rotationX += Input.GetAxis("Mouse X") * sensitivityX;


020

rotationX = ClampAngle(rotationX, minimumX, maximumX);


021


022

Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);


023

transform.localRotation = originalRotation * xQuaternion;


024

}


025

}


026


027

当然也可以,直接用以下脚本:


028

using UnityEngine;


029

using System.Collections;


030

public class MouseLook : MonoBehaviour {


031


032

public enum   RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }


033

public   RotationAxes axes = RotationAxes.MouseXAndY;


034


035

public float   sensitivityX = 15F;


036

public float   sensitivityY = 15F;


037


038

public float minimumX = -360F;


039

public float maximumX = 360F;


040


041

public float minimumY = -60F;


042

public float maximumY = 60F;


043


044

float   moveSensitivity = 1.0f;


045

public float speed = 6.0f;


046


047

float rotationX = 0F;


048

float rotationY = 0F;


049


050

Quaternion originalRotation;


051


052

void Update ()


053

{//Unity3D教程手册:www.unitymanual.com


054


055

CharacterController controller = gameObject.GetComponent<CharacterController>();


056

if (Input.GetMouseButton(1) && axes == RotationAxes.MouseXAndY)


057

{


058

// Read the mouse input axis


059

rotationX += Input.GetAxis("Mouse X") * sensitivityX;


060

rotationY += Input.GetAxis("Mouse Y") * sensitivityY;


061


062

rotationX = ClampAngle(rotationX, minimumX, maximumX);


063

rotationY = ClampAngle(rotationY, minimumY, maximumY);


064


065

Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);


066

Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, Vector3.left);


067


068

transform.localRotation = originalRotation * xQuaternion * yQuaternion;


069

}


070

else if (Input.GetMouseButton(1) && axes == RotationAxes.MouseX)


071

{


072

rotationX += Input.GetAxis("Mouse X") * sensitivityX;


073

rotationX = ClampAngle(rotationX, minimumX, maximumX);


074


075

Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);


076

transform.localRotation = originalRotation * xQuaternion;


077

}


078

//Unity3D教程手册:www.unitymanual.com


079

Vector3   moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));


080

moveDirection = transform.TransformDirection(moveDirection);


081

moveDirection *= speed;


082

controller.Move(moveDirection * Time.deltaTime);


083

}


084

void Start ()


085

{


086

// Make the rigid body not change rotation


087

if (rigidbody)


088

rigidbody.freezeRotation = true;


089

originalRotation = transform.localRotation;


090

}


091

public static float ClampAngle   (float angle, float min, float max)


092

{


093

if (angle < -360F)


094

angle += 360F;


095

if (angle > 360F)


096

angle -= 360F;


097

return Mathf.Clamp (angle, min, max);


098

}


099

}


100

 
时间: 2024-09-30 19:28:09

Unity 漫游相机脚本的相关文章

unity中js脚本与c#脚本互相调用

unity中js脚本与c#脚本互相调用 test1.js function OnGUI() { if(GUI.Button(Rect(25,25,100,30),"JS Call CS" )) { var c = gameObject.GetComponent("test2"); c.PrintTest(); } } function testPrint() { print("CS Call JS"); } test2.cs using Unit

写给VR手游开发小白的教程:(四)补充篇,详细介绍Unity中相机的投影矩阵

这篇作为上一篇的补充介绍,主要讲Unity里面的投影矩阵的问题: 上篇的链接写给VR手游开发小白的教程:(三)UnityVR插件CardboardSDKForUnity解析(二) 关于Unity中的Camera,圣典里面对每一项属性都做了简要的介绍,没看过的小伙伴传送门在下面 http://www.ceeger.com/Components/class-Camera.html 一.裁剪面 先从这个专业的词汇开始,以下是圣典对裁剪面的介绍: The Near and Far Clip Plane

【Unity】常用脚本类的继承关系(入门篇)

前言 学习Unity开发引擎的初学者会接触大量的脚本类,而这些类之间的关系往往容易被忽略. 本文对Unity引擎开发中的一些常用类及其关系进行了简单的归纳总结. 博文首发地址:http://blog.csdn.net/duzixi Unity常用脚本类继承关系图 对Unity开发稍有了解的朋友都知道,在Unity开发框架中有4个基本层次:工程(应用程序).场景.游戏对象和组件. 在脚本中,整个应用程序和场景由Application类控制:而游戏对象和组件类均继承于Object类. 在Object

【Unity】2.10 利用VS2015编辑Unity的C#脚本

分类:Unity.C#.VS2015 创建日期:2016-03-31 一.简介 用VS2015编辑C#脚本时,如果让其"显示所有文件",就会看到VS2015解决方案资源管理器中项目的文件夹结构和Unity的Project下的文件夹结构完全相同: 这样一来,你就可以在VS2015中直接打开编辑不同的C# 脚本文件了,而且还可以直接创建新的C# 脚本,而不必在Unity和VS2015间来回切换. 1.与Unity的深度集成 如果你仍然不得不一直在Unity编辑器和VS2015之间来回切换,

(五)Unity5.0新特性------unity中编写脚本

?? 出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.32 之前的Unity脚本 我们利用Mono(WinRT 在Windows Store Apps 和Windows Phone上) 使用 C# ,获得第三方库和接近本机性能的易用性.然而,有一些挑战: C# 运行时性能仍然落后于 C/c + + 最新和最好的.NET 语言和运行时功能在Unity's current version of Mono并不支持. 大约 23

Unity中CS脚本于JS脚本交互

这里需要注意的是被调用的脚本必须放在 "Standard Assets". "Pro Standard Assets" 和"Plugins" 这三个文件夹中的任何一个里,而调用它的脚本不能在一个目录文件夹中,否则无法编译通过,原因是Unity会最先编译这三个文件夹,"Editor"目录里的脚本稍后编译,其他的脚本最后编译(既 CS调用JS,CS脚本放在其他文件家中,JS脚本要放在 如上三个文件夹中先编译:JS调用CS,JS脚本

iPhone 6及以前型号,unity部分相机无法渲染的问题

最近遇到一个很尴尬的问题,iPhone 6,iPhone 5s及iPad Air 2这些设备里(其他设备没有= =),unity生成的ipa中,有些相机没有被渲染. 其实网上找了一圈基本上很多人也遇到这个问题了,应该是6以后有了重大的渲染API的更新,导致6及6以前的设备不支持. 我这边使用了UGUI,UI显示的方案是Screen Space - Camera,UI相机为投影相机,Clear Flags:Depth Only. 在主城中,只有一个UI相机和一个3D相机拍摄主城和3D角色的时候是完

转一篇Unity的相机动画控制

最近真是忙,连研究细看的时间都没有了,原帖地址:https://alastaira.wordpress.com/2013/11/08/smooth-unity-camera-transitions-with-animation-curves/ 先贴到这里 I’m creating a game in which I want to transition between two camera views – a top-down, overhead camera that gives a zoom

Unity学习-相机的拉伸、跟随、旋转

原创,转载请注明出处@JeroChan 学习了siki的黑暗之光,在学习老师的实现代码之余自己网上还查找了其他的实现方法,为了以后项目方便自己独立封装了旋转.拉伸的方法,使耦合度尽量降低. 定义 private GameObject playerObject;private Camera cameraObject;private Vector3 offSetPos; //偏移(相机与目标的差)public float fieldViewMax = 90f; //拉伸距离最远距离public fl