Unity学习(03)

Roll Ball 案例(其二)

上一小节的链接:Roll Ball 案例(其一)
上一节通过键盘监听来给小球施加力,从而控制小球移动,这节接着学习。
学习的视频链接为:视频链接

P29 控制相机

1. 相机

tip:相机的朝向是其z轴方向
在这里插入图片描述

可以像修改其他物体的位置一样来修改相机的位置和旋转(缩放无效)
相机参数

2. 获取对象

由于代码附在相机的组件中,所以获取相机这个对象中的Transform组件很容易。对象的名字直接就是gameObject,想要获取transform组件则使用gameObject.transform。(gameObject可以省略)

学习这部分参考的教程:链接

Tips:

物体:unity中在层级显示的东西都可以叫做物体
组件:unity中提供了大量已经写好的组件,比如刚体,碰撞体等,自己编写的脚本也是一种组件类
对象:挂载到物体上的脚本是一个实例化的组件,也就是一个对象。

一个游戏物体是一个对象;没有被挂载到物体上的脚本,是一个未被实例化的类,当脚本被挂载到物体上后,就变成了一个实实在在的对象。

GameObject.FindTransform.Find的对比: 参考链接

GameObject.Find
遍历整个当前场景,挨个查找,效率偏低,非特殊情况一般不要使用。
Transform.Find
只查找自己本身以及自己的子对象,效率比较高,用途比较大。
Transform.Find
可以获取处于 激活/非激活状态 的游戏对象,返回值类型是Transform 类型。
GameObject.Find
只能获取处于 激活状态 的游戏对象,返回值类型是一个GameObject类型。

总结获取一个物体的组件:

  1. 脚本被挂载到物体上
	//获取到组件后,将它的**引用**保存在rd字段中,方便下次使用
    rd = gameobject.GetComponent<Rigidbody>();
    //返回的类型是Rigidbody
  1. 脚本不在物体上
    使用Public拖拽的方式手动获取游戏对象。(在Unity编辑器中赋值)
    在这里插入图片描述
  2. 脚本不在物体上
    使用GameObject.FindWithTag或者GameObject.Find找到物体,全局搜索(可能影响性能)。
playerTransform = GameObject.FindWithTag("Player").transform;
// 注:返回的是一个transform对象的引用!!!!!!很好

Tag(标签)可以在检查器中设置
Tag

  1. 物体是脚本的孩子节点
    transform.Find(),暂未进行实验验证

3. 相机跟随

public class FollowTarget : MonoBehaviour
{
    public Transform playerTransform; //玩家的状态属性: 通过Unity编辑器赋值
    private Vector3 offset_player_camera; //相机与玩家的相对位置
    void Start()
    {
        //获取主相机位置
        Vector3 cameraPosition = gameObject.transform.position;
        //获取小球位置
        playerTransform = GameObject.Find("Player").transform;
        Vector3 playerPosition = playerTransform.position;
        //计算位置差
        offset_player_camera = cameraPosition - playerPosition;
    }
    void Update()
    {
        //更新主相机位置
        transform.position = playerTransform.position + offset_player_camera;
    }
}

P30 添加墙

在四周各安放一堵墙,防止小球滚出平面,很简单(添加立方体-改变位置大小-新建材质-绑定材质),结果如下。

在这里插入图片描述

P31 预制体(模板)

Tip:模型分组
创建一个空对象,设置位置为(0,0,0),修改名字为Env,将环境相关对象拖动进来(Env就像一个文件夹),好处很多(整洁、便于管理)。
模型分组

模板

通过模板,可以统一修改多个外观相似物体的属性。
把场景中的某个物体拖动到Prefabs文件夹中,这个物体就成了模板。
模板制作
我们可以复制那个被制成模板的物体,来创建多个相同的物体。
在这里插入图片描述

同时修改所有子物体的属性

我们如果修改模板的属性,则会同时修改所有由模板生成的物体的属性。

将子物体的属性的修改应用到模板

如果在其中的一个子物体中修改了某个属性,想让所有同类物体都更改。我们可以将这个修改覆盖到模板,这样模板变换了,所有子物体都会变换。
具体操作:覆盖–选择想覆盖的属性–应用–应用到预制件。
在这里插入图片描述
貌似“旋转”和“位置”无法覆盖。

P32 金币旋转

在预制体(模板)Coin中添加脚本。
在这里插入图片描述

使用以下代码完成金币的旋转

public class CoinRotate : MonoBehaviour
{
    Transform coinTransform;
    void Start()
    {
       coinTransform = gameObject.transform;
    }
    void Update()
    {
        //旋转采用欧拉角形式的 Vector3 参数。
        //第二个参数是旋转轴,可以将其设置为本地轴 (Space.Self) 或全局轴 (Space.World)。
        coinTransform.Rotate( new Vector3(0,1,0),Space.World);
    }
}

Unity文档

用户手册
或者用中文文档:链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值