找回密码
 立即注册
查看: 511|回复: 0

Unity tutorial Create with code

[复制链接]
发表于 2021-11-30 13:39 | 显示全部楼层 |阅读模式
这里会记录下我跟学unity create with code 的时候碰到的问题以及学到的东西
如果你是跟着这个tutorial的学习的话才会看得懂
Prototype1:
学的功能:
1.官网提供了assets -> 如何import assets
2.如何移动player ->在 update funtion 里面 用c#来控制player的position,transform.Translate(),一般都是向z 轴移动。 速度有自己控制,可以设置一个速度variable,但是要乘一个Time.deltaTime 来保证unity实现的速度和自己想象的速度差不多。因为update 是每一个frame都会运行的,根据电脑的好坏,每一秒会循行的frame都是不一样的,如果不加这个deltaTime,假设速度为1m/s,每一秒运行20帧,那么unity里面显示出来的就是1秒前进20米
3.让camera 跟踪player
给camera 编一个c#,然后设置camera的position 和 player的position 一样,在加上一个camera 本来的position 从而使camera 可以看到player 且跟踪player
4.用户的interaction
用上下左右键来控制player的移动。首先就是用一个variable 来获取键盘的input,获取的input是一个数值,根据按键按的深浅来决定,比如向上键,这个值再0-1之间,按深浅来决定;向下键就是-1-0的值。把这个值跟translate的速度相关联,就可以改变translate的方向。左右也是这么做的
    void Update()
    {
        horizontalInput = Input.GetAxis("Horizontal");
        forwardInput = Input.GetAxis("Vertical");
        // move vehicle forward
        transform.Translate(Vector3.forward*Time.deltaTime*speed*forwardInput);
        //transform.Translate(Vector3.right * Time.deltaTime * turnRightSpeed*horizontalInput);

        transform.Rotate(Vector3.up, turnRightSpeed * horizontalInput * Time.deltaTime);

    }
碰到的问题:
1.copy error
temp/assets.... error, 我google 了一下,三种解决方案: 不要保存 1)关闭不保存,然后重启 2)可能是virus protection的问题,把整个unity的folder 设置乘exclusions folder,就是杀毒软件不会查询这个文件夹 3)reimport,我是在写scripts的时候出现的这个错误,点击script 右键 reimport 也可以解决这个问题, 我最后选择的是第三种方法解决
2.prototype1-> tutorial->bonus feature
最后一个 local multiplayer game:
camera的问题
1)如果把所有camera都放在一个GameObject里面整理起来,camera的transform.position 会改变,会变大
2)设置了viewport rect,虽然可以分屏,分屏之前game view 看起来挺正常。但是在play mode 当中,就看起来很奇怪了
emmmmmm, 这个是因为我follow 了之前的tutorial 把 camera的position 设置成了player.position + offset 了
public class FollowPlayer : MonoBehaviour
{
    public GameObject player;
    private Vector3 offset;
    private Vector3 playerZ;
    // Start is called before the first frame update
    void Start()
    {
        offset = transform.position;
    }

    // Update is called once per frame
    void LateUpdate()
    {
        playerZ = new Vector3(0, 0, player.transform.position.z);
        transform.position = playerZ + offset;
    }
}
Prototype2
学到的功能:
1.prefabs
类似于一个variable,只要改变这个,其他用到这个variable的地方都会改变,只是prefab中存的都是objects。
2.学习如何按一个键就能发射出beam
其实主要学习的就是 Instantiate这个函数,每一次都会复制一个一样的object
  if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation);
        }3.如何随机的放怪物
首先要建立一个game object来管理随机放怪物的这个功能。
主要学习的是 InvokeRepeating 和random.range 两个函数,invoke reapting 会每隔一段时间就运行所输入的函数。
输入的函数是这样的:
在这个case里,所有要用到的怪物被放到一个gameObject array里面,然后用random.range随机产生一个int数,每一个数代表了一个怪物。最后在instantiate一个怪物。这样就好了
4.检测碰撞,detect collision
主要学习了OnTriggerEnter 和如何设置object使其可以检测碰撞
1)检测碰撞,在object里面add rigidbody,add box collider, box collider里面勾选is trigger(这是为了使用OnTriggerEnter)
2)OnTriggerEnter
就是在碰撞之后,需要运行的函数,我这里是输入了Debug.Log("game over!")
碰到的问题都在bonus feature里面,这里先记录一下没有完全解决:
1.bonus feature 3
可以运行起来,但是从左边来的怪物和从上面下来的怪物会有所碰撞,碰撞之后就都消失了
2.bonus feature 5
就是在动物身上加一个slider,只有射到了几次之后这个怪才会消失

暂时只学到prototype2
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 03:27 , Processed in 0.062808 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表