unity⾓度限制_Unity实现⾓度限制
sofina
在Unity(C#)中实现⾓度限制,有⼀个坑点(⾓度换算),相信⼤多数⼈都遇到过,本⽂会对其探究,同时补充点相机⾓度控制的算法。
1. 通过⾓度换算来实现⾓度限制普京获诺贝尔奖提名
peg假设世界空间中存在⼀游戏物体Object,左⼿坐标系,以Z轴为朝向,如果属性⾯板中Rotator的z值为30,则逆时针旋转30度,如果-30则顺时针选择30度。
z = 30
z= -30
很多⼈受到这个属性⾯板的影响,在写⾓度限制代码的时候(假设将⾓度限制在-30
if (transform.localEulerAngles.z<30f && transform.localEulerAngles.z>-30f){...}
看着是没啥⽑病,运⾏程序,看属性⾯板,当z开始为负数(0
public float CheckAngle(float value) // 将⼤于180度⾓进⾏以负数形式输出
{
float angle = value - 180;
if (angle > 0)
{
return angle - 180;
}
if (value == 0)
{
return 0;
}
return angle + 180;
}
这样问题就解决了!下⾯给出完整代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class c001 : MonoBehaviour {
private bool isrotatorA;
private bool isrotatorD;
// U this for initialization
void Start () {
isrotatorA = true;
isrotatorD = true;
}
中班家长会发言稿
// Update is called once per frame
void Update () {
if (Input.GetKey(KeyCode.A)&&isrotatorA) {
transform.Rotate (0, 0, 30 * Time.deltaTime);
isrotatorD = true;
}
if (Input.GetKey(KeyCode.D) &&isrotatorD) {
transform.Rotate (0, 0, -30 * Time.deltaTime);
isrotatorA = true;
}
fivedays
if (CheckAngle(transform.localEulerAngles.z)>30f)
isrotatorA = fal;
if (CheckAngle(transform.localEulerAngles.z)
isrotatorD = fal;
}
public float CheckAngle(float value) // 将⼤于180度⾓进⾏以负数形式输出{ignore什么意思
float angle = value - 180;
if (angle > 0)
{
return angle - 180;
}
if (value == 0)
{
return 0;
4级准考证号
}
return angle + 180;
}
}
在Unity把代码⽂件添加到物体运⾏即可。
2. 相机⾓度控制
在玩第⼀⼈称游戏的时候可以通过调整相机⾓度看到不同位置,假设Y轴是没有限制的,X轴,限制⼀下好了,你也可以⾃⼰定义,核⼼代码如下:
//根据⿏标移动的快慢(增量), 获得相机左右旋转的⾓度(处理X)
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mou X") * nsitivityX;
//根据⿏标移动的快慢(增量), 获得相机上下旋转的⾓度(处理Y)
rotationY += Input.GetAxis("Mou Y") * nsitivityY;
//⾓度限制. rotationY⼩于min,返回min. ⼤于max,返回max. 否则返回value
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
//总体设置⼀下相机⾓度
transform.localEulerAngles = new Vector3(-rotationY,rotationX, 0);
如果是第三⼈称的话,还可以添加⼀个⾓⾊与相机距离的代码:
void tdistance()//⽅法(函数),⽤于设置镜头与⾓⾊距离
{
if (Distance >= minDistance && Distance <= maxDistance)//如果距离数据在最⼤距离和最⼩距离之间
{
//距离等于⾃⾝减去⿏标滚轮反馈乘以灵敏度的值(此处加与减同样根据需求来定)
Distance -= Input.GetAxis("Mou ScrollWheel")*MouWheel_nsitivity;
analogy}
el if (Distance < minDistance)//若距离数据⼩于最⼩值,则等于最⼩值
{
Distance = minDistance;
}
el if (Distance > maxDistance)//若距离数据⼤于最⼩值,则等于最⼤值
fomc{
Distance = maxDistance;
}
//完成镜头距离设置
// transform.Translate(Vector3.back * Distance );
//transform.position = new Vector3 (transform.position.x, transform.position.y + 1f, transform.position.z);
}
苹果发布会2019秋季最后
本⼈⽔平不⾜,如果⽂章有问题请在评论区指出,谢谢。