让 Unity 移动平台输入雷竞技官网上ray666点vip CrossPlatformInput 在PC端可用的办法

Unity 的 CrossPlatformInput 在移动平台可以快速的实现控制,但是如果想在PC平台(导出exe)下也可以使用的话,就有点麻烦,查看源代码发现一个方法 CrossPlatformInputManager.SwitchActiveInputMethod,但是却无法事先完整功能:

CrossPlatformInputManager.SwitchActiveInputMethod(CrossPlatformInputManager.ActiveInputMethod.Touch);

上述代码虽然能够让控制器可见,并且按钮可用,但是十字键却无法使用。只能在类 CrossPlatformInputManager 修改:

#if MOBILE_INPUT
        activeInput = s_TouchInput;
#else
	activeInput = s_TouchInput;// 原值为 s_HardwareInput
#endif

修改 MobileControlRig:

		private void CheckEnableControlRig()
		{
			#if MOBILE_INPUT
			EnableControlRig(true);
			#else
			EnableControlRig(true);//原脚本为:EnableControlRig(false);
			#endif
		}


Unity WVParallax 2D 视差效果雷竞技官网上ray666点vip

文件:WVParallax.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// Weiva Parallax
/// 2D 视差效果
/// 本雷竞技官网上ray666点vip背景视差效果是根据背景雷竞技苹果下载地址的世界坐标z值来计算。默认参数中的背景数组第一个元素为最远平面,
/// 既与摄像机同步的平面,该雷竞技苹果下载地址之间的背景根据z值进行视差计算。也可以单独设置参数 synZ 强制设置最
/// 远平面。大于最远平面的 z 值将会反超摄像机移动。
/// weivain@qq.com
/// www.weiva.com
/// </summary>
public class WVParallax : MonoBehaviour {

    [Header("背景图片雷竞技苹果下载地址,Element 0 为与摄像机同步的背景层")]
    public Transform[] backgrounds;

    // 主摄像机
    private Transform cam;
    // 上一帧摄像机的位置
    private Vector3 previousCamPos;
    // 摄像机同步背景层的 z 值
    [Header("摄像机同步背景层Z值,若0为背景层0")]
    public float synZ=0f;
    [Header("偏移x系数")]
    public float parallaxScaleX=1f;
    [Header("偏移y系数")]
    public float parallaxScaleY=1f;


    // 初始化
    void Start ()
    {
        cam = Camera.main.transform;
        // 上一帧摄像机的位置
        previousCamPos = cam.position;
        if(synZ == 0 && null != backgrounds[0])
        {
            synZ = backgrounds[0].position.z;
        }
        if(synZ == 0)
        {
            synZ = 100f;
        }
        
    }
	
	// 每一帧执行
	void Update ()
    {
        // 获得摄像机和上一帧的偏移值
        float parallax = previousCamPos.x - cam.position.x;

        //摄像机偏移矢量
        Vector3 camMove = cam.position - previousCamPos;
        camMove.x *= parallaxScaleX;
        camMove.y *= parallaxScaleY;

        //同步背景
        for (int i = 0; i < backgrounds.Length; i++)
        {
            if (null == backgrounds[i]) continue;

            Vector3 targetToMove = backgrounds[i].position + camMove * (backgrounds[i].position.z/synZ);
            backgrounds[i].position = targetToMove;

        }

        // 更新上一帧摄像机的位置
        previousCamPos = cam.position;
    }
}


Unity 系统自带的 2D 角色资源预制体 CharacterRobotBoy 填坑日记

CharacterRobotBoy预制体确实是很好用的东西,但是要想以此为基础改成自己的东西还有一些容易犯错的地方:

  1. 角色是使用动画状态机控制,根据 Speed,vSpeed,Crouch,Ground 的值进行控制。
  2. 角色隐藏有两个点,天花板触点 CeilingCheck,GroundCheck要防止对,特别是在做动画时,不要让这两个点跟着跑了,否则容易出现永远掉不到地面等情况。
  3. 蹲下时要注意:一是上半身的盒型碰撞器要缩小,并放矮一些,也就是让角色蹲下时避免碰撞,能够通过地道。二是盒型碰撞器蹲下时不能与圆形碰撞器发生碰撞,否则会判定为顶上有东西,无法接触下蹲的状态。这个比较让人产生疑惑,应为案例中,初始状态这两个碰撞器是重叠的。
  4. 示例的机器人蹲下时,CeilingCheck 反而不用改变位置。但是自己做的时候要注意,如果蹲下时,头顶的 CeilingCheck 不处于“顶着”的碰撞物体内(例如很薄的地面在头上)就有可能出现蹲在地道里也可以站立的错误。解决办法是蹲下时,也让 CeilingCheck 下移一些,但是也不能太多,视具体情况。
  5. 动画机 Crouch 至 CrouchWalk 有一定的过度,并且 CrouchWalk 至 Crouch 是双过度(是双Transitions,不是双条件)。
  6. PlatformerCharacter2D类方法FixedUpdate 的42行建议加上:
    if (colliders[i].gameObject != gameObject && !colliders[i].isTrigger)
    否则角色可以在触发器上跳跃。