前言
游戏准心跳动在FPS也是比较常用的功能,可以增强游戏反馈
和打击感
,丰富游戏内容,实现准心跳动的方式五花八门,我不知道别人是怎么做的,但是我自认为我这种应该是最简单
的,继续看下去你就知道了。
绘制简单的准心UI
注意不同位置的准心都进行了边缘定位,这样可以方便的控制父类尺寸大小变化来控制整个准心的变化
实现不同状态准心大小变化
新增CrossHair代码,挂载在准心父类上
MovementScript是控制角色移动的代码,具体可以查看之前的文章:
unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡,复制粘贴即用
public class CrossHair : MonoBehaviour { public MovementScript movementScript; [Header("UI")] public float smoothness = 10f;//变变化平滑值 private RectTransform crossQuarter; //准心UI Vector2 crossQuarterSize;//保存准心初始尺寸 [Header("判断")] bool isMove;//是否在移动 bool isWalking;//是否正在行走 bool isRuning; //是否正在奔跑 bool isCrouching; //是否正在下蹲 private void Start() { crossQuarter = GetComponent<RectTransform>(); crossQuarterSize = crossQuarter.sizeDelta; } void Update() { isMove = Vector3.SqrMagnitude(new Vector3(movementScript.moveDirection.x, 0, movementScript.moveDirection.z)) > 0; isRuning = movementScript.isRun && isMove; isCrouching = movementScript.isCrouching; isWalking = !isRuning && !isCrouching && isMove; if (isWalking) { //行走时的准心开合度 ExpandCrossUpdate(1.5f); } else if (isRuning) { //奔跑时候的准心开合度(2倍) ExpandCrossUpdate(2f); } else if (isCrouching) { //下蹲时候的准心开合度(-2倍) ExpandCrossUpdate(0.6f); } else { //站立时,不调整准心开合度 ExpandCrossUpdate(1f); } } //根据指定大小,来增加或减小准心的开合度 public void ExpandCrossUpdate(float expandDegree) { Vector2 targetSize = crossQuarterSize * expandDegree; crossQuarter.sizeDelta = Vector2.Lerp(crossQuarter.sizeDelta, targetSize, Time.deltaTime * smoothness); } }
效果
射击准心跳动的效果
修改代码
if (Input.GetKey(KeyCode.Mouse0)) { Invoke("Shoot", 0.1f);//模拟射击间隔0.1s } void Shoot(){ ExpandCrossUpdate(2.5f); }
效果
好了,就是这么简单!