关闭重力影响:gameObject.GetComponent().useGravity = false; 一般也适用于关闭其他组件中某一个。
提取屏幕的宽、高等元素 :float screenwidth = Screen.width;
获取物体绕某个轴的旋转量:float rotionz = this.transform.eulerAngles.z;
当用户触摸屏幕的数量大于零的一系列判断:
if(Input.touchCount > 0)
{
for(int i = 0; i < Input.touchCount; i++)
{
Touch touch = Input.touches[i];//实例化触摸点
if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)//判断点击的状态是移动或者静止的时候,即只要是点击的状态
{
touchPosition = touch.position;
if(touchPosition.x <= screenWeight/2)
{
m_transform.Rotate(new Vector3(0, -Time.deltaTime * 30, 0), Space.World);//如果点击的屏幕在整个屏幕的左侧,让它向左旋转
}
if(touchPosition.x > screenWeight/2)
{
m_transform.Rotate(new Vector3(0, Time.deltaTime * 30, 0), Space.World);
}
}
if(touch.phase == TouchPhase.Ended)
{
return ;
}
}
}
else
{
return ;
}
}
相机跟随升级版(更加平滑,不会再跟随的时候,让物体看上去在颤抖)
using UnityEngine;
using System.Collections;
public class SmoothFollow : MonoBehaviour
{
private GameObject target; //所要跟随的目标对象
public float distance = 10.0f; //与目标对象的距离
public float height = 5.0f; //与目标对象的高度差
public float heightDamping = 2.0f; //高度变化中的阻尼参数
public float rotationDamping = 3.0f;//绕y轴的旋转中的阻尼参数
void Start()
{
// 寻找标签为“AirPlane”的游戏对象并设置为要跟随的目标对象
target = GameObject.FindWithTag("airplane");
}
void LateUpdate()
{ // 如果目标对象不存在将跳出方法
if (!target)
{
Debug.Log("没找到飞机");
return;
}
// 摄像机期望的的旋转角度计高度
float wantedRotationAngle = target.transform.eulerAngles.y;
float wantedHeight = target.transform.position.y + height;
// 摄像机当前的旋转角度及高度
float currentRotationAngle = transform.eulerAngles.y;
float currentHeight = transform.position.y;
// 计算摄像机绕y轴的旋转中的阻尼
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
// 计算摄像机高度变化中的阻尼
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);
// 转换成旋转角度
var currentRotation =Quaternion.Euler(0, currentRotationAngle, 0) ;
// 摄像机距离目标背后的距离
transform.position = target.transform.position;
transform.position -= currentRotation * Vector3.forward * distance;
// 设置摄像机的高度
transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
// 摄像机一直注视目标
transform.LookAt(target.transform);
}
}
Quaternion.Euler(x,y,z) 返回一个绕x轴旋转x度再绕y轴旋转y度再绕z轴旋转z度的Quaternion,因此Quaternion.Euler(0, 90, 0)返回一个绕y轴旋转90度的旋转操作。
Quaternion作用于Vector3的右乘操作(*)返回一个将向量做旋转操作后的向量。
因此Quaternion.Euler(0, 90, 0)*Vector3(0.0, 0.0, -10)表示将向量Vector3(0.0, 0.0, -10)做绕y轴90度旋转后的结果。因该等于Vector3(-10,0,0)