我有这个脚本,它会在用户触摸角色时在运行时添加SelectMove脚本。
public GameObject target;
void Start () {
}
// Update is called once per frame
void Update () {
if(Input.touchCount > 0 || Input.GetTouch(0).phase == TouchPhase.Began){
ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
Debug.DrawRay(ray.origin,ray.direction * 20,Color.red);
if(Physics.Raycast(ray, out hit,Mathf.Infinity)){
Debug.Log(hit.transform.gameObject.name);
target = hit.transform.gameObject;
//Destroy(hit.transform.gameObject);
selectedPlayer();
}
}
}
void selectedPlayer(){
target.AddComponent(Type.GetType("SelectMove"));
}
在上面的代码中,如果用户点击玩家A,玩家A将使用加速度计移动。我需要做的是,如果我点击另一个角色,比如玩家B,我需要玩家A停止移动,现在是玩家B移动的时间。但我似乎没有得到我想要的东西。我尝试使用Destroy(this)
或通过以下代码销毁脚本:
if (target != null)
{
var sphereMesh = target.GetComponent<SelectMove>();
Destroy(sphereMesh);
}
但它仍无效。
如果我没有销毁之前添加的脚本,如果用户点击了另一个字符,则之前选择的播放器仍会与新脚本一起移动。
还有另一种方法可以实现我需要做的事情吗?
答案 0 :(得分:0)
我不认为添加和销毁脚本是方便的方法
试试这个:
1.将SelectMove脚本添加到所有可移动的播放器
2.将一个公共属性private void tabs_Menu_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedTab = (sender as TabControl).SelectedItem as TabItem;
if (selectedTab.Header.ToString() == "Plugins")
{
RefreshPluginList();
}
}
string PluginDirectory;
private void RefreshPluginList()
{
list_Plugins.Items.Clear();
PluginDirectory = Path.Combine(new string[] {
Path.GetDirectoryName(Properties.Settings.Default.Rustserverexecutable),
"server",
Properties.Settings.Default.Identity,
"oxide",
"plugins" });
foreach (var file in Directory.GetFiles(PluginDirectory))
{
list_Plugins.Items.Add(Path.GetFileName(file));
}
}
添加到SelectMove脚本中,并在IsMoving为真时使if语句移动。
3.将selectedPlayer()方法更改为将目标玩家IsMoving更改为true,并将前一个(或简称所有其他玩家)设置为false。
答案 1 :(得分:0)
public GameObject target = null;
void Update ()
{
if(Input.touchCount > 0 || Input.GetTouch(0).phase == TouchPhase.Began)
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
Debug.DrawRay(ray.origin,ray.direction * 20,Color.red);
RaycastHit hit;
if(Physics.Raycast(ray, out hit,Mathf.Infinity))
{
Debug.Log(hit.transform.gameObject.name);
if(this.target != null){
SelectMove sm = this.target.GetComponent<SelectMove>()
if(sm != null){ sm.enabled = false; }
}
target = hit.transform.gameObject;
//Destroy(hit.transform.gameObject);
selectedPlayer();
}
}
}
void selectedPlayer(){
SelectMove sm = this.target.GetComponent<SelectMove>();
if(sm == null){
target.AddComponent<SelectMove>();
}
sm.enabled = true;
}
代码重用你的基础,新的部分是你使用前面选择的对象来禁用SelectMove脚本(我假设它是一个移动的东西)。它不会破坏它,而是启用/禁用,以便节省内存消耗。