Unity+C# 初入 (一)

Unity+C# 初入(一)

系统环境

系统:win10 专业版
Unity版本: 2019
C# 编辑器:rider

1 旋转立方体

对象创建

新建3D项目——>创建一个平面——>创建一个立方体

如下图所示
在这里插入图片描述

脚本攥写

在project中添加一个C#脚本,取名为"MyScript"

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyScript : MonoBehaviour
{
    // Start is called before the first frame update
    //public GameObject Cube;
    public int transSpeed = 100;
    public float rotaSpeed = 10.5f;
    public float scale = 3;
    public void OnGUI()
    {
        if (GUILayout.Button("移动立方体"))
        {
            // GameObject.Find("Cube").GetComponent<Transform>().transform.Translate(Vector3.forward*transSpeed*Time.deltaTime,Space.World);
            Cube.transform.Translate(Vector3.forward*transSpeed*Time.deltaTime,Space.World);
        }

        if (GUILayout.Button("旋转立方体"))
        {
            GameObject.Find("Cube").GetComponent<Transform>().transform.Rotate(Vector3.up*rotaSpeed,Space.World);

        }
        if (GUILayout.Button("缩放立方体"))
        {
            // Cube.transform.localScale = new Vector3(scale,scale,scale);
            GameObject.Find("Cube").GetComponent<Transform>().transform.localScale= new Vector3(scale,scale,scale);;

        }
        // throw new NotImplementedException();
    }
}

脚本集成到对象

直接把脚本添加到main相机的组件里面就可以

2 角色漫游

物品配置

  1. 一个地面平面
  2. 一个empty的物品,取消重力作用和添加运动学作用,取名为player,并添加标签名称player。如下图
    在这里插入图片描述

3.地面平面上添加几个物品,球体什么的 无所谓

最终效果如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072在这里插入图片描述
9113110380.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NjeTI2MTk4MzYyNg==,size_16,color_FFFFFF,t_70)

脚本创建

创建脚本,取名为”player“
里面的代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    // 摄像机属性
    private Transform m_camTransform;
    // 相机旋转角度
    private Vector3 m_camRot;
    // 相谁相机高度
    private float m_camHeiht = 1.4f;
    public Transform m_transform;
    private CharacterController m_ch;
    private float m_movSpeed = 3.0f;
    private float m_gravity = 2.0f;



    // Start is called before the first frame update
    void Start()
    {

        m_transform = this.transform;
        m_ch = this.GetComponent<CharacterController>();
        // 获取摄像机
        m_camTransform = Camera.main.transform;
        Vector3 pos = m_transform.position;
        pos.y += m_camHeiht;
        // 设置摄像机的旋转方向与主角一直
        m_camTransform.rotation = m_transform.rotation;
        m_camRot = m_camTransform.eulerAngles;
        // 锁定鼠标
        // Cursor.lockState = CursorLockMode.Locked;

    }

    // Update is called once per frame
    void Update()
    {
        Control();
    }

    void Control()
    {

        // 定义三个值控制运动
         float xm = 0, ym = 0, zm = 0;
         // 重力运动
         ym -= m_gravity * Time.deltaTime;
         // 前后左右移动
         if (Input.GetKey(KeyCode.W))
         {
             zm += m_movSpeed * Time.deltaTime;
         }
         else if (Input.GetKey(KeyCode.S))
         {
             zm -= m_movSpeed * Time.deltaTime;

         }
         else if (Input.GetKey(KeyCode.A))
         {
             xm -= m_movSpeed * Time.deltaTime;
         }
         else if (Input.GetKey(KeyCode.D))
         {
             xm += m_movSpeed * Time.deltaTime;
         }
         // 获取鼠标移动距离
         float rh = Input.GetAxis("Mouse X");  // 返回鼠标在这个轴上的值,鼠标移动的时候才会触发,这边的值应该是相对之前的距离,而不是绝对的距离
         float rv = Input.GetAxis("Mouse Y");   // 返回鼠标在这个轴上的值
         // 旋转摄像头
         m_camRot.x -= rv;  //这个画图解释比较方便
         m_camRot.y += rh;  //
         m_camTransform.eulerAngles = m_camRot;
         // 使角色的面向方向与相机一致
         Vector3 camrot = m_camTransform.eulerAngles;
         camrot.x = 0;
         camrot.z = 0;
         m_transform.eulerAngles = camrot;
         // 操作角色移动代码
         // 使相机位置和角色一样
         Vector3 pos = m_transform.position;
         pos.y += m_camHeiht;
         m_camTransform.position = pos;



         // 使用角色控制器提供的move函数进行移动
         m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm)));
    }
}

脚本集成到物品上

将player脚本集成到player对象上即可

问题记录

问题 1. 按照参考教程里面的代码写的时候,一直提示mycube这个对象在引用前没有注册。
解决:因为采用rider的编辑器,在生成C#代码的时候,会自动填写start() 和update()函数,然后我并没有删掉,直接在下面开始写上面的代码,所以导致没有注册。

问题2:脚本改了好多次,发现鼠标指向功能一直没反应。
措施:是因为我自己是远程控制另外一台电脑写代码的,原来是远程软件的问题。 在原电脑上移动鼠标就可以。。尴尬

参考教程

Unity教程链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值