又又一天的unity学习总结

~~~又看了一下午加晚上的教程,还是siki老师的坦克大战
做了下总结

1、通过刚体来施加力来使物体移动
先定义个初速度,用的GetAxis();这个的参数是轴,检测对应的轴,会返回值-1~1;默认是wasd和方向键都可以控制,再让刚体的velocity = transform.forward*返回值*速度; transform.forward就是坐标前。前后的轴是Vertical 左右旋转的轴是 Horizontal 同样的。如果是两个相同的但是控制不同的,可以在轴那里复制个轴然后分别改名字。在edit中Project Setting 中Input ~。用GetAxis()来获取那个轴,返回值。根据坐标名称,返回虚拟坐标系中的值。
2、实现子弹
就是对子弹先进行设置,然后把子弹作为预制体,再创建一个空物体,在空物体上实例子弹就可以了。

GameObject.Instantiate(shellprefab,firePosition.position,firePosition.rotation)

并给一个初速度

go.GetComponent<Rigidbody>().velocity =go.transform.forward*shellSpeed;

3、Update与FixedUpdate的区别
FixedUpdate是会在每个固定的时间间隔被调用,FixeduPdate不受帧率的变化。Update是一帧一帧来的。

4、Transform.Find()
参数是一个对象的名字,这个可以通过写想要的对象的名字来获取,会返回对应的对象。

firePosition = transform.Find ("FirePosition");

5、触发器发消息
collider.sendMessage();
可以在触发检测到了后给触发的对象发消息,也就是调用那个消息也就是函数的名字。

collider.SendMessage("TankDamage");
void TankDamage(){
        if (hp <= 0)
            return;
            hp -= Random.Range(10,20);
        if(hp<=0){
            AudioSource.PlayClipAtPoint(siwang,transform.position);
            GameObject.Instantiate (TankSile, transform.position + Vector3.up, transform.rotation);
            Destroy (this.gameObject);
        }

6、摄像头的视野跟随

对于两个物体的,可以以他们距离的中心来跟随。
先计算出现在设定好的摄像头与他们两个物体之间中心的距离,然后在此基础上,摄像头也就是去改变坐标。设置摄像头的视野大小。先找出比例,可以是两个物体之间的距离与现在摄像头视野大小做比例,然后让摄像头的视野大小一直是这个比例就可以了。

public Transform play1;
    public Transform play2;
    private Vector3 cha;
    private Camera camera;
    // Use this for initialization
    void Start () {
         cha = transform.position-(play1.position+play2.position)/2;
        camera = this.GetComponent<Camera> ();
    }

    // Update is called once per frame
    void Update () {
        if (play1 == null || play2 == null)
            return;
        transform.position =  cha+(play1.position+play2.position)/2;
        float distance = Vector3.Distance (play1.position,play2.position);
        float size = distance * 1.09f;
        camera.orthographicSize = size;
    }

分享下各个脚本的代码

Tankovement

public class Tankovement : MonoBehaviour {
    public float angularSpeed = 1;
    public float speed =2.0f;
    public Rigidbody rigidbody;
    public int number =1;

    public AudioSource audio;
    // Use this for initialization
    void Start () {
        rigidbody = this.GetComponent<Rigidbody> ();
        audio = this.GetComponent<AudioSource>();
    }

    void FixedUpdate()
    {

        float v = Input.GetAxis ("VerticalPlayer"+number);
        rigidbody.velocity = transform.forward * v * speed;
        float h = Input.GetAxis ("HorizontalPlayer"+number);
        rigidbody.angularVelocity = transform.up * h * angularSpeed;

    }
}

shiyegensui

public class shiyegensui : MonoBehaviour {

    public Transform play1;
    public Transform play2;
    private Vector3 cha;
    private Camera camera;
    // Use this for initialization
    void Start () {
         cha = transform.position-(play1.position+play2.position)/2;
        camera = this.GetComponent<Camera> ();
    }

    // Update is called once per frame
    void Update () {
        if (play1 == null || play2 == null)
            return;
        transform.position =  cha+(play1.position+play2.position)/2;
        float distance = Vector3.Distance (play1.position,play2.position);
        float size = distance * 1.09f;
        camera.orthographicSize = size;
    }
}

TankAttack

public class TankAttack : MonoBehaviour {

    private Transform firePosition;
    public GameObject shellprefab;
    public KeyCode fireKey = KeyCode.Space;
    public float shellSpeed=15;
    public  AudioClip fashe;
    // Use this for initialization
    void Start () {

        firePosition = transform.Find ("FirePosition");
    }

    // Update is called once per frame
    void Update () {
       if (Input.GetKeyDown (fireKey)) {
            AudioSource.PlayClipAtPoint(fashe,transform.position);
        GameObject go=  GameObject.Instantiate(shellprefab,firePosition.position,firePosition.rotation)as GameObject ;
            go.GetComponent<Rigidbody>().velocity =go.transform.forward*shellSpeed;
        }


    }
}

TankHealth

public class TankHealth : MonoBehaviour {

    public float hp =100;
    public GameObject TankSile;
    public AudioClip  siwang;


    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    void TankDamage(){
        if (hp <= 0)
            return;
            hp -= Random.Range(10,20);
        if(hp<=0){
            AudioSource.PlayClipAtPoint(siwang,transform.position);
            GameObject.Instantiate (TankSile, transform.position + Vector3.up, transform.rotation);
            Destroy (this.gameObject);
        }

    }
}

Shell

public class Shell : MonoBehaviour {
    public GameObject shellexprafab;
    private AudioSource audio;
    public AudioClip baozha;

    void Start(){


    }


    public void OnTriggerEnter(Collider collider){
        AudioSource.PlayClipAtPoint (baozha,transform.position);
        GameObject.Instantiate (shellexprafab,this.transform.position,this.transform.rotation);
        GameObject.Destroy (this.gameObject);
        if(collider.tag=="Tank"){

            collider.SendMessage("TankDamage");
        }
    }
}

还好C#不是很难,而且我这几天接触的都还是比较简单的。这几天unity就先学习到这,我也发现了unity真的很好用,但是api好多…….很多还是现用现百度谷歌把。这几天收获很大。
今天是乌云白帽大会啊,看会直播~~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值