Unity5权威讲解之菜鸟读书笔记(二)

Unity5权威讲解之菜鸟读书笔记(二)


本章制作游戏主人公角色,并学习游戏对象和组件之间的关系,学会如何实现游戏角色的移动逻辑,从而了解脚本的使用方法。

6.将用于游戏的3D模型放置于场景视图有两种方法,一是直接使用相应的3D模型,二是先建立空游戏对象,然后将3D模型拖拽至新建的空游戏对象下,使之成为其子对象。
如果是用于舞台设计的静态模型,一般会使用第一种方法,而如果是设计主人公角色或者敌对角色(NPC)则用第二种方法。 父对象和子对象Transform属性记得设置为(0.0.0)。

7.获取键盘组合键。
创建脚本PlayerCtrl放置于Scripts文件夹中
 private float h = 0.0f;
  private float v = 0.0f;
  private Transform tr;          //必须先分配变量,之后才能使用需要访问的组件。
    public float moveSpeed = 10.0f;
 public float rotSpeed = 100.0f;
void Start () {
  tr = GetComponent<Transform>(); //向脚本初始部分分配Transform组件。
}
void Update () {
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");
        Debug.Log("H=" + h.ToString());
        Debug.Log("V=" + v.ToString());
 Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h); //计算前后左右移动方向向量
 tr.Rotate (Vector3 .up*Time .deltaTime *rotSpeed *Input .GetAxis ("Mouse X"));//以Y轴为基准 rotspeed为速度旋转。
 tr.Translate(moveDir.normalized  * Time.deltaTime * moveSpeed , Space.Self);//Translate 函数    (移动方向*Time.deltaTime*位移值*速度,基础坐标)
//为了只获取向量的方向,需要将其转化为单位向量。此处使用Vector3.normalized属性获取单位向量值。(不过好像问题不大改不改无所谓)
}


提示:1.Input.GetAxis(string axisName)函数中要区分大小写例如Input.GetAxis("Horizontal")。
           2.Unity5中删除了大部分获取组件的缩略写法,只留取了transform组件的缩写。例如获取rigidbody要写成GetComponent<Rigidbody>()


8.坐标系:局部坐标系和全局坐标系
Unity的场景视图是无限的维空间,此三维空间中一一直不变的基准坐标是全局坐标,反之, 局部坐标指各游戏对象自己的坐标。
因此,如果Translate函数的基准坐标指定为Space Self,那么游戏对象将以局部坐标为基准进行移动; 若指定为Space.World,则
将以全局坐标为基准进行移动。
(图一为局部坐标,图二为全局坐标)


9.单位向量
   向量是具有大小和方向的数据类型,Unity 中,每个方向轴上大小为1的向量称为单位向量(正规
化向量,Normalized Vector) 此处可以将之理解为只表示方向的向量。
   Vector3 结构体是Unity 提供的在开发过程中用以表示三维空间坐标和方向的数据类型。Unity 提
供了如图表所示的各种单位向量的简形式,可以轻松调用。
简写形式  含义
Vector3.forwardVector3 (0,0,1)  
Vector3.backVector3 (0,0,-1)
Vector3 leftVector3 (-1,0,0 )
Vector3.rightVector3 (1,0,0 )
Vector3.upVector3 (0,1,0 )
Vector3 downVector3 (0,-1,0 )
Vector3.oneVector3 (1,1,1 )
Vector3.zeroVector3 (0,0,0)

10.实现摄像机的追踪

新建FollowCam于Scripts文件夹中。代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowCam : MonoBehaviour {
    public Transform targetTr;//要追踪的对象变量。
    public float dist = 10.0f;
    public float height = 3.0f;//高度
    public float dampTrace = 20.0f;//实现平滑追踪的变量

    //摄像机的Transform
    private Transform tr;
	// Use this for initialization
	void Start () {
        //分配给tr
        tr = GetComponent<Transform>();
	}

    // Update is called once per frame
           //使用lateupdata函数
    void LateUpdate () {
        tr.position = Vector3.Lerp(tr.position, targetTr.position - (targetTr.forward * dist) + (Vector3.up * height), Time.deltaTime * dampTrace);

        //时摄像机朝向游戏对象。
        tr.LookAt(targetTr.position);
	}

}
使用LateUpdate函数是为了防止画面抖动,在Update函数执行后才执行LateUpdate函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值