Unity3D C#脚本基础

using UnityEngine;
using System.Collections;

public class reflect : MonoBehaviour {

    // 引入一个游戏场景中的对象(包括抽象对象,如Transform.,最后要在图形界面拖入对象)
    public GameObject muban;
    // Use this for initialization
    // 初始化调用
    void Start () {
        Debug.Log(muban.name);
    }

    //float ver = Input.GetAxis("Vertical");
    //transform.position += transform.forward * ver * 300;


    // Update is called once per frame
    // Vector3 三维向量类
    // 固定每一帧都会调用一次.
    void Update () {

        if (Input.GetKey(KeyCode.A)) // Input为一个类,GetKey() 为一个方法,如果用户输出为A ,则执行下列语句。
            transform.position += new Vector3(-1, 0, 0) * Time.deltaTime;  //Time.deltaTime:  假如FPS为60,Time.deltaTime = 1/60;
         // 与学过的东西好像不太一样,对象累加,x+(-1)*Time.deltaTime, y,z不变. 
    }



    // 当进入触发器的范围时触发调用此函数 与之还有 OnTriggerExit,OnTriggerStay 顾名思义  
    void OnTriggerEnter(Collider other)  // other: 触发器所挂载的对象。
    {
        Debug.Log(other.name);
        transform.position = new Vector3(0, 4, 0);
    }
}

触发器和碰撞机:

同属于Collider, 当不勾中 Is Trigger 时为碰撞机, 当触碰到碰撞机时会触发: OnCollisionEnter(Collision other)。
都属于区域触发,不同点就是一个不能穿过会发生碰撞 ,一个能够穿过。

关于 Rigidbody 的 velocity : 意为 速度, 属于Vector3类, Vector3 为一个空间坐标向量类。

Vector3 v3 = new Vector3(1,0,0); 实例化 一个空间向量,它可以进行四则运算。
如: Rigidbody.velocity +=v3; 表示在x轴上的值加上1. v3 * 15 则 为(15,0,0);
它只是表示了一个速度向量,但是实际速度应该为 velocity.magnitude吧? , 15*15+15*15的平方?
在Unity3D 中,距离单位都用米来表示, 这里用秒来表示 那么速度就为 21米/秒?

速度向量和距离向量,正负都表示世界方向, 速度向量中的值代表速度,距离向量中的值代表速度?

如 transform.position += new Vector(1,0,0); 即代表 将游戏对象当前x上的位置加上一个单位;

using UnityEngine;
using System.Collections;

public class ballScript : MonoBehaviour {

    Rigidbody rb;
    // Use this for initialization
    void Start () {
        // 一开始给ball某个方向上的速度
        rb = GetComponent<Rigidbody>();
        rb.velocity = new Vector3(0, 1, -1) * 15 ;
    }

    // Update is called once per frame
    void Update () {
        Vector3 v = rb.velocity;
        if (v.z == 0)
            v.z = 1;
        rb.velocity = v;
    }
    void OnTriggerEnter(Collider other) {
        Vector3 v = rb.velocity;
        if (other.name == "player") {
            if(v.z <= 0) {
                rb.velocity = new Vector3(0, 1, -1) * 15;
                Debug.Log(rb.velocity.x);
                Debug.Log(rb.velocity.y);
                Debug.Log(rb.velocity.z);
                Debug.Log(rb.velocity.magnitude);
            }
            else
            {
                rb.velocity = new Vector3(0, 1, 1) * 15;
            }

        }
    }

    void OnCollisionEnter(Collision other) {
        if (other.collider.tag == "Finish") {
            Destroy(other.gameObject);
        }
    }
}

第一天的学习心得:
一个游戏对象拥有许多的组件,我将其理解为一个特性, 比如新创建一个cube对象,开发者为其初始化了几个特性分别是:Mesh Filter(网格过滤器:即改变形状,正方形,圆形等,在引擎中形状都用网格表示),Collider (这个东西叫做碰撞机,如果没有它,则这个物体不能触碰到任何物体,那么它就可以引申出很多的属性,比如材质:木板?弹床?冰块等,材质又可以引申出许多属性 比如:摩擦力?弹性?) 与现实世界不同的就是碰撞机的大小可以改变,大于或者小于物体本身。,Mesh Renderer(网格渲染器:具体属性还不是很清楚待查看)。
以上为初始化属性。
当我们运行一个物体时,会发现它不会因为重力而往下坠落。 这是因为它没有这个属性。就像一个人它本身是有重力的,因为它有质量。但是开发者并没有为其初始化该特性(组件),这能够让我们够好得去开发。
为其添加一个刚体(Rigidbody: 它有 mass(质量),drag(我猜应该是物体的拉力)等)再运行这个物体就会掉落。我们想要发生碰撞的话就需要碰撞的两个物体都要 Collider 而且 一个物体要有刚体这个特性。

一个物体的具体行为则需要在脚本中实现然后将脚本拖给这个物体。 有趣的事情发生了, 当我们在脚本中编写一条属性时(public Rigidbody rb;),在Unity3D的图形界面的inspector中会出现这个属性,然后我们可以将场景中所有?相应类型的对象拖入到属性中,然后在脚本中就可以使用它了。

using UnityEngine;
using System.Collections;

public class player : MonoBehaviour {
    // -11.27
    // 
    // Use this for initialization
    // 砖块预设体
    public GameObject bricks;
    void Start () {
        // 循环创建brick
        //Instantiate(bricks, new Vector3(-0.5f, 0, 0),Quaternion.identity);
        float width = 1;
        float widthSpace = 0.5f;
        for (int i = 0; i < 13; i++) {
            for(int j = 0;j<4;j++)
                Instantiate(bricks, new Vector3(-0.5f, 6-j*2, 11.27f - i*2  ),Quaternion.identity);
        }
    }

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



                // 获取水平轴上的值 [-1,1]
                float hor = Input.GetAxis("Horizontal");
                // 移动player
                transform.position += new Vector3(0, 0, -1) * hor * 20 * Time.deltaTime;

        if (transform.position.z >= 11.27)
            transform.position = new Vector3(transform.position.x, transform.position.y, 11.27F);
        else if (transform.position.z <= -11.27)
            transform.position = new Vector3(transform.position.x, transform.position.y, -11.27F);

    }
}

打砖块脚本………………………

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值