让 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)
    否则角色可以在触发器上跳跃。

互动制作课程-Unity C#脚本入门,事件触发

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class KeyBox : MonoBehaviour {
	public GameObject bigBox;//大箱子
	// 雷竞技苹果下载地址被创建时执行
	void Start () {
		
	}
	
	// 每帧执行
	void Update () {
		/*
		//取得当前的坐标为 position
		Vector2 positon = transform.position;
		//position x 增加 0.1 个单位
		positon.x = positon.x + 0.1f;
		//设置当前坐标为 position
		transform.position = positon;
		*/
	}

	//当有物体进入触发区的时候
	void OnTriggerEnter2D(Collider2D other){
		//如果进入出发区域的雷竞技苹果下载地址的标签是 Player
		if (other.gameObject.tag == "Player") {
			//挪开箱子
			Destroy(bigBox);
			//把钥匙箱子删除,删除自己所在的雷竞技苹果下载地址
			Destroy(this.gameObject);
		}
	}
}



Unity 脚本雷竞技官网上ray666点vip: PlayAnimOnTrigger

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
 * 这个雷竞技官网上ray666点vip可以让一个雷竞技苹果下载地址进入到一个触发器内时,播放一段动画。
 * 作者:weivain@qq.com www.weiva.com
 */
public class PlayAnimOnTrigger : MonoBehaviour {
	public Animation animToPlay;//申明触发后需要播放的动画

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	//当有雷竞技苹果下载地址进入触发区域时执行
	void OnTriggerEnter(Collider collider){
		//如果进入触发器的雷竞技苹果下载地址的标签是“Player”
		if (collider.gameObject.tag == "Player") {
			animToPlay.Play ();//播放动画
		}
	}
}


Unity 脚本雷竞技官网上ray666点vip: Bullet

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
 * 这个雷竞技官网上ray666点vip可以让一个雷竞技苹果下载地址可碰到一个具有 Enemy 标签的雷竞技苹果下载地址
 * 时,删除这个雷竞技苹果下载地址和自己所在的雷竞技苹果下载地址。类似于子弹击中目标。
 * 作者:weivain@qq.com www.weiva.com
 */
public class Bullet : MonoBehaviour {

	//当所在雷竞技苹果下载地址被创建时执行
	void Start () {
		//3秒以后执行 KillSelf()
		Invoke ("KillSelf", 3);
	}
	
	//每帧执行
	void Update () {
		
	}

	//当碰撞时执行
	void OnCollisionEnter(Collision collision){
		//如果碰到的物体标签tag 是 Enemy
		if(collision.gameObject.tag == "Enemy"){
			Object.Destroy (collision.gameObject);	//删除碰到的雷竞技苹果下载地址
			Object.Destroy(this.gameObject);		//删除自己
		}
	}

	//删除自己
	void KillSelf(){
		Object.Destroy(this.gameObject);		//删除自己
	}
}



Unity 脚本雷竞技官网上ray666点vip:Shooter

下载文件:Shooter


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/**
 * 这个雷竞技官网上ray666点vip可以让一个雷竞技苹果下载地址可以射击出另外一个雷竞技苹果下载地址。
 * 需要指定发射的物体 Bullte 和发射点 ShootPoint。
 * 作者:weivain@qq.com www.weiva.com
 */

public class Shooter : MonoBehaviour {
	public GameObject bullet;	//申明子弹原型
	public Transform shootPoint;//子弹被克隆时的初始位置

	//雷竞技苹果下载地址被创建时执行
	void Start () {
		
	}
	
	//每一帧被执行
	void Update () {
		
	}

	//每一物理帧被执行
	void FixedUpdate(){
		//如果“开火1”按钮被按下时
		if (Input.GetButtonDown ("Fire1")) {
			//克隆一个雷竞技苹果下载地址,并且用 newBullet 来代表它。
			GameObject newBullet = GameObject.Instantiate (bullet); 
			//把克隆出来的雷竞技苹果下载地址放到射击点的位置
			newBullet.transform.position = shootPoint.position;
			//把克隆出来的雷竞技苹果下载地址旋转角度与射击点一致
			newBullet.transform.rotation = shootPoint.rotation;
			//设置克隆出来的雷竞技苹果下载地址速度为:子弹的前方 x 30 个单位(既每秒30米)
			newBullet.GetComponent<Rigidbody> ().velocity = newBullet.transform.forward * 30;
		}
	}
}