我会尽力解释这个问题。假设我有两个if语句都将Debug.Log消息发送到控制台,如下所示:
if(Input.GetKeyDown("c")){
Debug.Log("C was pressed!");
}
if(Input.GetKeyDown("b")){
Debug.Log("b was pressed!");
}
我们当然知道,当我们按下相应的键时,我们会收到这些消息。但是,如果我想让另一个脚本触发这些if语句而不是键盘来做呢?
如果我有一个if语句的列表,这些语句在这些键盘输入中输入,有没有办法触发这些if语句通过代码,还是我必须改变条件?< / p>
答案 0 :(得分:2)
从你的问题来看,我不认为模拟键盘输入是这里的方法。我认为更好的是将语句放在新方法中,可以从其他脚本中调用。
public void HandleInputC ()
{
Debug.Log("C was pressed (or simulated).");
}
public void HandleInputD ()
{
Debug.Log("D was pressed (or simulated).");
}
private void Update ()
{
if (Input.GetKeyDown("c"))
HandleInputC();
if (Input.GetKeyDown("d"))
HandleInputD();
}
这也使得对各个方法进行扩展变得更容易,更易读,同时对其目的进行了概述。
答案 1 :(得分:1)
我希望我能正确理解你的问题。是的,它绝对可能。假设你想制作一个你稍后会重播的玩家鬼魂。因此,保存播放器在列表中进行的所有击键,然后返回此列表中的击键。我们的想法是创建一个自定义 KeyStrokeRecorder 类,其中包含一个名为 GetKey 的方法。然后,而不是调用 Input.GetKeyDown 调用 KeyStrokeRecorder.instance.GetKey 。请参阅下面的代码。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class KeyStrokeRecorder : MonoBehaviour {
public class KeyStroke {
public enum KeyState {
Idle,
Pressed,
Released,
}
public KeyCode keycode;
public string time;
public KeyState state;
}
public List<KeyStroke> mKeyStrokes;
public RecorderState recorderState = RecorderState.Idle;
public static KeyStrokeRecorder instance;
void Awake(){
instance = this;
}
void Start () {
}
void Update () {
if( isRecording || isPlayback)
gameTime += Time.deltaTime;
}
float gameTime = 0;
bool isRecording = false;
bool isPlayback = false;
public bool GetKey(KeyCode keycode)
{
if( isPlayback )
{
for(int i=0; i<mKeyStrokes.Count; i++)
{
float tTime;
float.TryParse(mKeyStrokes[i].time, out tTime);
if( mKeyStrokes[i].keyname == keycode.ToString() )
{
if( gameTime > tTime-0.5f && gameTime < tTime+0.5f )
{
if( mKeyStrokes[i].state == KeyStroke.State.Pressed)
return true;
else
return false;
}
}
}
return false;
}
else if( isRecording )
{
KeyStroke keystroke = new KeyStroke();
keystroke.keyname = keycode.ToString();
keystroke.time = gameTime.ToString();
if( Input.GetKeyDown(keycode) )
{
keystroke.state = KeyStroke.State.Pressed;
mKeyStrokes.Add(keystroke);
}
else if( Input.GetKeyUp(keycode) )
{
keystroke.state = KeyStroke.State.Released;
mKeyStrokes.Add(keystroke);
}
}
return Input.GetKey(keycode);
}
}
希望这会给你一些想法。