问题遇到的现象和发生背景
在脚本TankMove和TankAttack中的第七行,都有一个一样的东西(不知道应该叫什么),number。无论在脚本中还是在Unity检查器中,这两个number想要修改就必须两个数值一个个改过来,如果是3个脚本,4个脚本,这种方法就会很麻烦。可不可以让我修改其中一个脚本的number就能使所有使用number的脚本,进行同步更新修改呢?
问题相关代码,请勿粘贴截图
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TankMove : MonoBehaviour
{
public int number = 1;//设立序号number(我是第七行!!!!!!!!!!!!!!!)
public float moveSpeed = 5;//设立数值移动速度为5
public float rotateSpeed = 30;//设立数值旋转速度为30
public float wsy;//设立数值wsy
public float ady;//设立数值ady
public Rigidbody GangTi;//设立刚体对象gangti
void Start()
{
}
void Update()
{
wsy = Input.GetAxis("WSYP" + number);//使wsy和输入管理器中的轴有关联
ady = Input.GetAxis("ADYP" + number);//使ady和输入管理器中的轴有关联
if (wsy != 0)//如果wsy的值不为0,则向前或向后移动,方向取决于数值的正负
{
Rigidbody GangTi = this.gameObject.GetComponent<Rigidbody>();//
if (GangTi != null)//
{
Vector3 targetPos = GangTi.position + GangTi.transform.forward * wsy * moveSpeed * Time.deltaTime;//
GangTi.MovePosition(targetPos);//
}
}
if (ady != 0)//如果ady的值不为0,则向左或向右旋转,方向取决于数值的正负
{
if (wsy < 0)//此代码解决按下SD(右后)实际往左后移动的bug
{
ady = -ady;//
}
Vector3 rotateValue = Vector3.up * ady * rotateSpeed * Time.deltaTime;//
this.transform.Rotate(rotateValue);//
}
}
}
分割线
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TankAttack : MonoBehaviour
{
public float number = 1;//设立序号numbr
public GameObject ShellPrefab;//设立游戏对象子弹预制体
public string FireKey = "FireP";//设立按键FireKey
public float shellSpeed = 100;//子弹速度为100
private Transform firePoint1;//发射位置FirePoint1
public bool Fire1 = true;//子弹发射许可设置为true
public float jiangetime = 3.0f;//攻击间隔jiangetime设置为3.0秒
public float deltatime = 0;//时间累加
void Start()
{
firePoint1 = transform.Find("FirePoint1");//自动寻找发射位置FirePoint1
FireKey = "FireP" + number;//(在Unity的输入管理器中FireP1的肯定按钮为space)
}
void Update()
{
if (Input.GetButtonDown(FireKey))//如果按下了FireKey,执行下方内容
{
if (Fire1)
{
Fire1 = false;//攻击后进入间隔,子弹发射许可设置为false
GameObject go = GameObject.Instantiate(ShellPrefab, firePoint1.position, firePoint1.rotation) as GameObject;//在发射点位置实例游戏对象ShellPrefab。
go.GetComponent<Rigidbody>().velocity = go.transform.forward * shellSpeed;//给予子弹初速度
}
}
else if (!Fire1)
{
deltatime += Time.deltaTime;//deltatime随时间增加而增加
if (deltatime > jiangetime)//如果deltatime大于jiangetime(3秒),执行下方内容
{
Fire1 = true;//子弹发射许可设置为ture
deltatime = 0;//deltatime归零
}
}
}
}