二.Unity代码编程

127 阅读1分钟

一.创建并绑定对象

在Project模块,Assets>>Script区域右键,Create>>C# Script,选中对象,把代码文件拖给选中对象。

二.常用方法及注意事项

1.绑定对象
  • GameObject对象绑定 (例如可以从获取的对象上创建子对象) 挂载对象是挂载到Transform下
[Tooltip("子弹对象")]
public GameObject zidan;
[Tooltip("子弹组")]
public Transform zidanGroup;

void BeginFire()
{
    //创建子弹,并把创建的子弹挂载到子弹组下
    GameObject obj = Instantiate(zidan, zidanGroup);
}
2.位置移动(如前进、后退、向左、向右)
  • 模型的+Z方向要设置为前进方向,所以往前推进Z轴即可
[Tooltip("前进速度")]
public float zSpeed = 10;

void Update()
{
    float dz = zSpeed * Time.deltaTime;
    this.transform.Translate(0, 0, dz, Space.Self);
}
3.角度旋转(如射击的炮头方向)
  • 官网不建议直接操作Rotation,所以一般使用欧拉角EulerAngles
[Tooltip("炮管,用于控制炮管方向")]
public Transform paoGuan;

void Update()
{
    if (Input.GetKeyDown(KeyCode.W))
    {
        //向上旋转,沿x轴旋转eularAngles
        Vector3 current = paoGuan.eulerAngles;
        current.x -= angle;
        paoGuan.eulerAngles = current;
    }
    if (Input.GetKeyDown(KeyCode.A))
    {
        //向左旋转
        Vector3 current = paoGuan.eulerAngles;
        current.y -= angle;
        paoGuan.eulerAngles = current;
    }
}
4.触发器
  • 延迟执行
void Start()
{
    //2s后销毁自己
    Invoke("Destroy", 2);
}
void Destroy()
{
    Destroy(gameObject);
}
  • 循环执行
void Start()
{
    //3s创建一颗子弹
    InvokeRepeating("BeginFire", 0.1f, 0.3f);
}
void BeginFire()
{
    //创建子弹
    GameObject obj = Instantiate(zidan, zidanGroup);
    //子弹位置
    obj.transform.position = zidanPosition.position;
    //子弹方向
    obj.transform.eulerAngles = zidanPosition.parent.eulerAngles;
    //子弹脚本
    MainZiDan zidanScript = obj.GetComponent<MainZiDan>();
    zidanScript.speed = zidanSpeed;
    zidanScript.lifeTime = lifeTime;
}
5.撞击事件
  • 添加Collider(碰撞体)组件,碰撞会触发OnTriggerEnter方法
    • Is Trigger:是否经过,会触发OnTriggerEnter方法
  • 添加Rigidbody(刚体)组件

image.png

private void OnTriggerEnter(Collider other)
{
    Debug.Log("子弹碰撞,other=" + other.name);
    if (!other.name.StartsWith("怪兽"))
    {
        return;
    }
    //销毁子弹
    Destroy(gameObject);
    //销毁怪物
    Destroy(other.gameObject);
}